home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tools / coolwork / cooledit.c_ / cooledit.c
C/C++ Source or Header  |  1994-02-20  |  10KB  |  277 lines

  1. /*****************************************
  2.  * CoolEdit -- The CoolWorx Editor       *
  3.  *                                       *
  4.  * Copyright 1994 by Al Williams Comp.   *
  5.  * You may use portions of CoolEdit in   *
  6.  * your own code, but you may not        *
  7.  * distribute CoolEdit by itself.        *
  8.  *                                       *
  9.  *****************************************/
  10. #include <windows.h>
  11. #include "cooledit.h"
  12. #include "cw.h"
  13.  
  14. /* Forward reference */
  15. long WINAPI _export win_proc(HWND hWnd, UINT message,
  16.          UINT wParam, LONG lParam);
  17. int init(HANDLE,HANDLE,int);
  18.  
  19.  
  20. #define WINDOWMENU 4
  21. HANDLE hInst;
  22. HWND mainw;
  23. char ini[]="cooledit.ini";
  24.  
  25. /* Main entry point */
  26. int PASCAL WinMain(HANDLE hInstance, HANDLE prev,
  27.                                          LPSTR cmdline, int show)
  28.   {
  29.   HANDLE acc=NULL; /* use MDI accel */
  30.   hInst=hInstance;
  31.   cw_BeginIcons(hInst,LoadIcon(hInst,MAKEINTRESOURCE(APPICON)),
  32.       LoadIcon(hInst,MAKEINTRESOURCE(EDITICON)),NULL);
  33.   cw_Logo(hInst,777,778,10000,TRUE,TRUE);
  34.   if (!init(hInst,prev,show)) return FALSE;
  35.   /* Vanilla event loop */
  36.   cw_Run(mainw,cw_MDIGetClientWindow(mainw),1,&acc,TRUE,TRUE);
  37.   cw_End(hInst);
  38.   return FALSE;
  39.   }
  40.  
  41. /* Create window here */
  42. int init(HANDLE hInstance, HANDLE prev,int nCmdShow)
  43.          {
  44.          HWND            hWnd;
  45.          /* Create a main window */
  46.          mainw=hWnd=cw_MDICreateFrame("CoolEdit","MMENU",0,
  47.            hInstance,(FARPROC)win_proc,FALSE,2000,
  48.            MAKEINTRESOURCE(MENUBAR),NULL,
  49.            NULL,MAKEINTRESOURCE(STATUS_BAR),
  50.            LoadAccelerators(hInst,"MMENU"),
  51.            CWRIBBON_TOP,0);
  52.          if (!hWnd)
  53.            return FALSE;
  54.  
  55. /* Make the window visible, update its client area,
  56.           and return "success"
  57.    if we should show normal, use stored window position */
  58.          if (nCmdShow==SW_SHOWNORMAL)
  59.            cw_IniPosSet(ini,"Main",hWnd);
  60.          else
  61.            ShowWindow(hWnd,nCmdShow);
  62.          UpdateWindow(hWnd);
  63.          return TRUE;
  64.          }
  65.  
  66. /* Create new (empty) child window */
  67. void new_child(HWND hWnd)
  68.   {
  69.   static int untitled=0; // keep track of #
  70.   char title[66];
  71.   wsprintf(title,"Untitled - %d",++untitled);
  72.   cw_MDICreateChild("CWEDITCLASS",title,
  73.     CW_MDIWIN|CE_HSCROLL|CE_VSCROLL|CW_USEHELP|CW_USEPROG,
  74.     CW_USEDEFAULT,0,CW_USEDEFAULT,0,
  75.     "EMENU",hWnd,hInst,WINDOWMENU,
  76.     LoadAccelerators(hInst,"EMENU"),
  77.     MAKEINTRESOURCE(EMENUBAR),CWRIBBON_TOP,NULL);
  78.   }
  79.  
  80.  
  81. /* Window procedure */
  82. long WINAPI _export win_proc(HWND hWnd, UINT message,
  83.          UINT wParam, LONG lParam)
  84.          {
  85.          switch (message)
  86.                   {
  87.                   case WM_INITMENU:
  88. /* Set up most recently opened menu
  89.    -- if child active, put at location 6 of menu 0 (file)
  90.    -- if no child windows, put at location 2 of menu 0 */
  91.                     cw_IniOpenMenu(ini,
  92.                       GetMenu(hWnd),0,
  93.                       cw_MDIGetActive(hWnd)?6:2,4000);
  94.  
  95. /* Send WM_INITMENU to child window (if any) */
  96.                     cw_MDISendActive(hWnd,WM_INITMENU,wParam,
  97.                       lParam);
  98.  
  99. /* Update toolbar/statusbar visibility */
  100.                     CheckMenuItem (GetMenu (hWnd), VIEW_TB,
  101.                       MF_BYCOMMAND|
  102.                       (cw_GetRibbon(hWnd,CWRIBBON_TOP)
  103.                       ? MF_CHECKED : MF_UNCHECKED));
  104.                     CheckMenuItem (GetMenu (hWnd),
  105.                       VIEW_SB, MF_BYCOMMAND
  106.                       | (cw_GetRibbon(hWnd,CWRIBBON_BOTTOM)
  107.                       ? MF_CHECKED : MF_UNCHECKED));
  108.                     break;
  109.  
  110. #if 0 // enable to have an inital window
  111.                   case CW_MDICREATE:
  112.                     new_child(hWnd);
  113.                     break;
  114. #endif
  115.  
  116. /* Handle help window messages */
  117.                   case CW_HELPID:
  118.                     {
  119.                     static HWND sb;
  120.                     static int oldid;
  121. /* If first time, find status bar and quit */
  122.                     if (!sb)
  123.                       {
  124.                       sb=cw_GetRibbon(hWnd,CWRIBBON_BOTTOM);
  125. /* Skip the first one so (c) message appears */
  126.                       return 0;
  127.                       }
  128. /* Filter out redundant help messages */
  129.                     if (oldid==wParam) return 0;
  130.                     oldid=wParam;
  131. /* Load help from resource file or defaults */
  132.                     cw_StatusHelp(hInst,sb,STATUS_PANE,oldid);
  133.                     break;
  134.                     }
  135.  
  136. /* Update status bar/toolbar, etc */
  137.                   case CW_IDLE:
  138.                     {
  139.                     static unsigned divide=0;
  140.                     HWND w=cw_MDIGetActive(hWnd);
  141. /* Only update time every 600 ticks */
  142.                     if (divide++%600==0)
  143.                       cw_StatusTime(hWnd,CWRIBBON_BOTTOM,
  144.                         TIME_PANE);
  145. /* Update status keys */
  146.                     cw_StatusKeys(hWnd,CWRIBBON_BOTTOM,
  147.                       CAP_STATIC,NUM_STATIC,NULL,NULL);
  148. /* Give child a chance to init toolbar and show status */
  149.                     if (w)
  150.                       {
  151.                       SendMessage(w,CW_INITTOOL,0,(DWORD)hWnd);
  152.                       cw_EditStatus(hWnd,CWRIBBON_BOTTOM,w,
  153.                         EDSTAT_PANE,FALSE);
  154.                       }
  155.                     else
  156.                       {
  157. /* No child so clear edit status pane */
  158.                       SendMessage(
  159.                         GetDlgItem(
  160.                           cw_GetRibbon(hWnd,CWRIBBON_BOTTOM),
  161.                           EDSTAT_PANE),WM_SETTEXT,0,(DWORD)"");
  162.                       }
  163.                     break;
  164.                     }
  165.  
  166. /* Menu commands */
  167.                   case WM_COMMAND:
  168. /* Check for most recently used files */
  169.                     if (wParam>=4000&&wParam<=4010)
  170.                       {
  171.                       char fn[66];
  172.                       cw_IniOpenGet(ini,4000,
  173.                       wParam,fn,sizeof(fn));
  174.                       if (*fn)
  175.                         {
  176.                         if (cw_EditOpenFileName(hWnd,
  177.                             CW_USEPROG|CW_USEHELP|CE_HSCROLL|CE_VSCROLL,
  178.                             "EMENU",WINDOWMENU,
  179.                             fn,FALSE,LoadAccelerators(hInst,
  180.                             "EMENU"),MAKEINTRESOURCE(EMENUBAR),
  181.                             CWRIBBON_TOP))
  182.                           cw_IniOpenSet(ini,fn);
  183.                         }
  184.                       break;
  185.                       }
  186. /* Ask child if it can handle this message */
  187.                     if (!cw_MDISendActive(
  188.                       hWnd,CW_STDMENU,wParam,0))
  189. /* If not, we must do it.... */
  190.                     switch (wParam)
  191.                       {
  192.                       case VIEW_FONT:
  193.                         {
  194. /* change font */
  195.                         HWND w=cw_MDIGetActive(hWnd);
  196.                         if (w) cw_EditSetFont(w,NULL);
  197.                         break;
  198.                         }
  199.  
  200.                       case VIEW_TB:
  201.                         {
  202. /* Hide/show toolbar */
  203.                         cw_MDIShowToolBar (hWnd, CWRIBBON_TOP,
  204.                           !cw_GetRibbon(hWnd,CWRIBBON_TOP));
  205.                           break;
  206.                         }
  207.  
  208.                       case VIEW_SB:
  209.                         {
  210. /* Hide/show status bar */
  211.                         static HWND sb;
  212.                         if (!sb)
  213.                           sb = cw_GetRibbon (hWnd, CWRIBBON_BOTTOM);
  214.                         cw_MDIShowRibbon (sb,
  215.                           !cw_GetRibbon(hWnd,CWRIBBON_BOTTOM));
  216.                         break;
  217.                         }
  218.  
  219. /* Create new child */
  220.                       case CM_FILENEW:
  221.                         new_child(hWnd);
  222.                         break;
  223.  
  224. /* Open new child */
  225.                       case CM_FILEOPEN:
  226.                         {
  227.                         char fn[66];
  228.                         if (cw_EditOpenFile(hWnd,
  229.                             CW_USEPROG|CW_USEHELP|CE_HSCROLL|CE_VSCROLL,
  230.                             "EMENU",WINDOWMENU,
  231.                             fn,sizeof(fn),
  232.                             LoadAccelerators(hInst,
  233.                             "EMENU"),
  234.                             MAKEINTRESOURCE(EMENUBAR),
  235.                             CWRIBBON_TOP))
  236. /* Register file name with most recently opened */
  237.                           cw_IniOpenSet(ini,fn);
  238.                          }
  239.                         break;
  240.  
  241. /* Toggle NUMLOCK */
  242.                        case NUM_BUTTON:
  243.                         cw_ToggleKeyState(VK_NUMLOCK);
  244.                         break;
  245.  
  246. /* Toggle CAPS LOCK */
  247.                        case CAP_BUTTON:
  248.                         cw_ToggleKeyState(VK_CAPITAL);
  249.                         break;
  250.  
  251.                        case CM_HELPABOUT:
  252. /* Use CoolDialog for about box -- no callback is needed
  253.    and there isn't any data to transfer */
  254.                        cw_DialogBox(hInst,"ABTBOX",
  255.                          mainw,NULL,cw_NullCDlgTemp());
  256.                         break;
  257.  
  258.                        }
  259.                       break;
  260.  
  261.  
  262. /* On exit, save window position */
  263.                   case WM_DESTROY:
  264.                     cw_IniPosSave(ini,"Main",hWnd);
  265.                     PostQuitMessage(0);
  266.                     break;
  267.  
  268.  
  269.                   }
  270. /* Use CoolWorx default -- not windows! */
  271.               return (cw_DefFrameProc(hWnd, message,
  272.                          wParam, lParam));
  273.          }
  274.  
  275.  
  276.  
  277.