home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_C / COOLWORX.ZIP / DEMO / SDIEDIT / SDIEDIT.C < prev    next >
C/C++ Source or Header  |  1994-02-11  |  9KB  |  253 lines

  1. /*****************************************
  2.  * SDIEdit -- The CoolWorx SDI 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 "sdiedit.h"
  12. #include "cw.h"
  13.  
  14. HANDLE hInst;
  15. HWND mainw;
  16. HWND editor;
  17. char ini[]="sdiedit.ini";
  18.  
  19. /* Forward reference */
  20. long WINAPI _export win_proc(HWND hWnd, UINT message,
  21.          UINT wParam, LONG lParam);
  22. int init(HANDLE,HANDLE,int);
  23.  
  24. int PASCAL WinMain(HANDLE hInstance, HANDLE prev,
  25.                                          LPSTR cmdline, int show)
  26.   {
  27.   HANDLE acc;
  28.   hInst=hInstance;
  29.   cw_BeginIcons(hInst,LoadIcon(hInst,MAKEINTRESOURCE(APPICON)),
  30.       NULL);
  31.   if (!init(hInst,prev,show)) return FALSE;
  32.   /* Vanilla event loop */
  33.   acc=LoadAccelerators(hInst,MAKEINTRESOURCE(EMENU));
  34.   cw_Run(mainw,NULL,1,&acc,TRUE,TRUE);
  35.   cw_End(hInst);
  36.   return FALSE;
  37.   }
  38.  
  39. /* Create window here */
  40. int init(HANDLE hInstance, HANDLE prev,int nCmdShow)
  41.          {
  42.          HWND            hWnd;
  43.          /* Create a main window */
  44.          mainw=hWnd=cw_SDICreate("SDICoolEdit",
  45.            MAKEINTRESOURCE(EMENU),
  46.            hInst,(FARPROC)win_proc,MAKEINTRESOURCE(EMENUBAR),
  47.            NULL,NULL,MAKEINTRESOURCE(STATUS_BAR),0);
  48.          if (!hWnd)
  49.             return FALSE;
  50. /* Make the window visible, update its client area,
  51.           and return "success" */
  52.          if (nCmdShow==SW_SHOWNORMAL)
  53.           cw_IniPosSet(ini,"Main",hWnd);
  54.          else
  55.            ShowWindow(hWnd,nCmdShow);
  56.          UpdateWindow(hWnd);
  57.          return TRUE;
  58.          }
  59.  
  60.  
  61.  
  62. /* Window procedure */
  63. long WINAPI _export win_proc(HWND hWnd, UINT message,
  64.          UINT wParam, LONG lParam)
  65.          {
  66.          switch (message)
  67.                   {
  68.                   case WM_SETFOCUS:
  69.                     if (editor) SetFocus(editor);
  70.                     break;
  71.  
  72.                   case WM_SIZE:
  73.                     {
  74.                     RECT r;
  75.                     /* Don't use passed in size since
  76.                        other code calls WM_SIZE with
  77.                        no parameters */
  78.                     cw_GetClientRect(hWnd,&r);
  79.                     MoveWindow(editor,r.left,r.top,r.right-r.left,
  80.                       r.bottom-r.top,TRUE);
  81.                     break;
  82.                     }
  83.  
  84.                   case CW_SDICREATE:
  85.                     {
  86.                     RECT r;
  87.                     cw_GetClientRect(hWnd,&r);
  88.                     editor=CreateWindow("CWEDITCLASS",
  89.                       "Untitled - 1",WS_CHILD|WS_VISIBLE|
  90.                       CE_HSCROLL|CE_VSCROLL,r.left,r.top,
  91.                       r.right-r.left,r.bottom-r.top,
  92.                       hWnd,1,hInst,0);
  93.                     SetFocus(editor);
  94.                     cw_EditSDINew(editor);
  95.                     SendMessage(hWnd,WM_SETTEXT,0,(DWORD)
  96.                       "CoolEdit SDI - Untitled");
  97.                     break;
  98.                     }
  99.  
  100.                   case WM_INITMENU:
  101.                     cw_IniOpenMenu(ini,
  102.                       GetMenu(hWnd),0,
  103.                       6,4000);
  104.                     SendMessage(editor,WM_INITMENU,wParam,
  105.                       lParam);
  106.                     break;
  107.  
  108.                   case CW_HELPID:
  109.                     {
  110.                     static HWND sb;
  111.                     static int oldid;
  112.                     if (!sb)
  113.                       {
  114.                       sb=cw_GetRibbon(hWnd,CWRIBBON_BOTTOM);
  115. /* Skip the first one so (c) message appears */
  116.                       return 0;
  117.                       }
  118.                     if (oldid==wParam) return 0;
  119.                     oldid=wParam;
  120.                     cw_StatusHelp(hInst,sb,STATUS_PANE,oldid);
  121.                     break;
  122.                     }
  123.                   case CW_IDLE:
  124.                     {
  125.                     static unsigned divide=0;
  126.                     if (divide++%600==0)
  127.                       cw_StatusTime(hWnd,CWRIBBON_BOTTOM,TIME_PANE);
  128.                     cw_StatusKeys(hWnd,CWRIBBON_BOTTOM,
  129.                       CAP_STATIC,NUM_STATIC,NULL,NULL);
  130.                     if (editor)
  131.                       {
  132.                       SendMessage(editor,CW_INITTOOL,0,(DWORD)hWnd);
  133.                       cw_EditStatus(hWnd,CWRIBBON_BOTTOM,editor,
  134.                         EDSTAT_PANE,FALSE);
  135.                       }
  136.                     else
  137.                       {
  138.                       SendMessage(
  139.                         GetDlgItem(
  140.                           cw_GetRibbon(hWnd,CWRIBBON_BOTTOM),
  141.                           EDSTAT_PANE),WM_SETTEXT,0,(DWORD)"");
  142.                       }
  143.                     break;
  144.                     }
  145.  
  146.                   case WM_COMMAND:
  147.                     if (wParam>=4000&&wParam<=4010)
  148.                       {
  149.                       char fn[66];
  150.                       cw_IniOpenGet(ini,4000,
  151.                       wParam,fn,sizeof(fn));
  152.                       if (*fn)
  153.                         {
  154.                         cw_EditSDINew(editor);
  155.                         if (cw_EditOpen(editor,fn,FALSE))
  156.                           {
  157.                           char title[256];
  158.                           wsprintf(title,"CoolEdit SDI - %s",(LPSTR)fn);
  159.                           SendMessage(hWnd,WM_SETTEXT,0,(DWORD)title);
  160.                           cw_IniOpenSet(ini,fn);
  161.                           }
  162.                         }
  163.                       }
  164.                     if (!SendMessage(
  165.                       editor,CW_STDMENU,wParam,0))
  166.                     switch (wParam)
  167.                       {
  168.                       case VIEW_FONT:
  169.                         {
  170.                         if (editor)
  171.                           cw_EditSetFont(editor,NULL);
  172.                         break;
  173.                         }
  174.  
  175.                       case VIEW_TB:
  176.                         {
  177.                         HMENU m=GetMenu(hWnd);
  178.                         BOOL ck=GetMenuState(m,VIEW_TB,MF_BYCOMMAND)
  179.                           &MF_CHECKED;
  180.                         static HWND tb;
  181.                         if (!tb) tb=cw_GetRibbon(hWnd,CWRIBBON_TOP);
  182.                         ShowWindow(tb,ck?SW_HIDE:SW_SHOW);
  183.                         CheckMenuItem(m,VIEW_TB,MF_BYCOMMAND
  184.                           |(ck?MF_UNCHECKED:MF_CHECKED));
  185.                         SendMessage(hWnd,WM_SIZE,0,0);
  186.                         break;
  187.                         }
  188.  
  189.                       case VIEW_SB:
  190.                         {
  191.                         HMENU m=GetMenu(hWnd);
  192.                         BOOL ck=GetMenuState(m,VIEW_SB,MF_BYCOMMAND)
  193.                           &MF_CHECKED;
  194.                         static HWND sb;
  195.                         if (!sb) sb=cw_GetRibbon(hWnd,CWRIBBON_BOTTOM);
  196.                         ShowWindow(sb,ck?SW_HIDE:SW_SHOW);
  197.                         CheckMenuItem(m,VIEW_SB,MF_BYCOMMAND
  198.                           |(ck?MF_UNCHECKED:MF_CHECKED));
  199.                         SendMessage(hWnd,WM_SIZE,0,0);
  200.                         break;
  201.                         }
  202.  
  203.                       case CM_FILENEW:
  204.                         cw_EditSDINew(editor);
  205.                         SendMessage(hWnd,WM_SETTEXT,0,(DWORD)"CoolEdit SDI - Untitled");
  206.                         break;
  207.  
  208.                       case CM_FILEOPEN:
  209.                         {
  210.                         char fn[66];
  211.                         if (cw_EditSDIOpenFile(editor,
  212.                             fn,sizeof(fn)))
  213.                           {
  214.                           char title[256];
  215.                           wsprintf(title,"CoolEdit SDI - %s",(LPSTR)fn);
  216.                           SendMessage(hWnd,WM_SETTEXT,0,(DWORD)title);
  217.                           cw_IniOpenSet(ini,fn);
  218.                           }
  219.                          }
  220.                         break;
  221.                        case NUM_BUTTON:
  222.                         cw_ToggleKeyState(VK_NUMLOCK);
  223.                         break;
  224.                        case CAP_BUTTON:
  225.                         cw_ToggleKeyState(VK_CAPITAL);
  226.                         break;
  227.  
  228.                        case CM_HELPABOUT:
  229. /* Use CoolDialog for about box -- no callback is needed
  230.    and there isn't any data to transfer */
  231.                        cw_DialogBox(hInst,"ABTBOX",
  232.                          mainw,NULL,cw_NullCDlgTemp());
  233.                         break;
  234.  
  235.                        }
  236.                       break;
  237.  
  238.                   case WM_QUERYENDSESSION:
  239.                     return SendMessage(editor,WM_QUERYENDSESSION,
  240.                       0,0);
  241.  
  242.                   case WM_DESTROY:
  243.                     cw_IniPosSave(ini,"Main",hWnd);
  244.                     PostQuitMessage(0);
  245.                     break;
  246.  
  247.  
  248.                   }
  249.               return (cw_DefWindowProc(hWnd, message,
  250.                          wParam, lParam));
  251.          }
  252.  
  253.