home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / 4418 / DEMO / SOURCE.ZIP / DRAWPROC.CPP < prev    next >
C/C++ Source or Header  |  1993-05-02  |  3KB  |  102 lines

  1. #include <windows.h>
  2. #include <windowsx.h>
  3. #include "winx31ad.h"
  4. #include <shellapi.h>
  5. #include <commdlg.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8.  
  9. #include "bmpef.h"
  10. #include "bmpwks.h"
  11. #include "drawproc.h"                     
  12.  
  13.  
  14. static BOOL OnCreate(HWND hwnd, CREATESTRUCT FAR *lpCreateStruct)
  15. {
  16. LPWNDINFO lpWndInfo ;
  17. HWND hWndApp;
  18. BOOL fRet = TRUE;
  19. char szFn[128];
  20. LPMDICREATESTRUCT lpMdiCreateStruct = 
  21.             (LPMDICREATESTRUCT)(lpCreateStruct -> lpCreateParams);
  22.   hWndApp = hwnd;
  23.   while (GetParent(hWndApp)!=NULL) hWndApp = GetParent(hWndApp);     
  24.  
  25.   lpWndInfo = (LPWNDINFO) GlobalAllocPtr(GHND,sizeof(WNDINFO));
  26.   lpWndInfo->hwndParent = lpCreateStruct->hwndParent;    
  27.   lpWndInfo->hWndApp = hWndApp;
  28.   SetWindowLong(hwnd,0,(LONG)lpWndInfo);
  29.   
  30.   lstrcpy(szFn,(LPSTR)(lpMdiCreateStruct->lParam));   
  31.    
  32.   if (fRet) (fRet = DoTryLoad(hwnd,szFn));
  33.   if (!fRet)
  34.     {                  
  35.       SetWindowLong(hwnd,0,0L);
  36.       GlobalFreePtr(lpWndInfo);
  37.     }
  38.   return (fRet);
  39. }
  40.  
  41. static void OnDestroy(HWND hwnd)
  42. {
  43. LPWNDINFO lpWndInfo ;
  44.   lpWndInfo = GETLPWNDINFO(hwnd);
  45.   if (lpWndInfo->hPal != NULL)
  46.     DeleteObject(lpWndInfo->hPal);
  47.   if (lpWndInfo->hBitmap != NULL)
  48.     DeleteObject(lpWndInfo->hBitmap);
  49.   if (lpWndInfo->lpBmp != NULL)
  50.     GlobalFreePtr(lpWndInfo->lpBmp);    
  51.   GlobalFreePtr(lpWndInfo);
  52.   SetWindowLong(hwnd,0,(LONG)0);
  53. }
  54.  
  55. void OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
  56. {
  57.   switch(id)
  58.     {
  59.       case IDM_NEW:
  60.         DoNew(hWnd);
  61.         break;
  62.         
  63.       case IDM_SAVE:  
  64.       case IDM_SAVEAS:  
  65.         DoTrySave(hWnd);
  66.         break;
  67.         
  68.       case IDM_ROTATE:
  69.         DoRotate(hWnd);
  70.         break;
  71.         
  72.       case IDM_EXIT:
  73.         {
  74.         LPWNDINFO lpWndInfo = GETLPWNDINFO(hWnd);
  75.         SendMessage(lpWndInfo->hWndApp,WM_CLOSE,0,0);
  76.         break;
  77.         }
  78.       default :
  79.         DefMDIChildProc(hWnd, WM_COMMAND,
  80.           GET_WM_COMMAND_MPS (id,hwndCtl,(WORD)codeNotify));
  81.     }
  82. }
  83.  
  84. long CALLBACK DrawWndProc(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
  85. {
  86.   switch (uiMsg)
  87.     {
  88.       HANDLE_MSG(hWnd, WM_CREATE,          OnCreate);
  89.       HANDLE_MSG(hWnd, WM_PAINT,           OnPaint);
  90.       //HANDLE_MSG(hWnd, WM_LBUTTONDOWN,     OnLButtonDown);
  91.       //HANDLE_MSG(hWnd, WM_LBUTTONUP,       OnLButtonUp);
  92.       //HANDLE_MSG(hWnd, WM_MOUSEMOVE,       OnMouseMove);
  93.       HANDLE_MSG(hWnd, WM_COMMAND,         OnCommand);
  94.       HANDLE_MSG(hWnd, WM_DESTROY,         OnDestroy); 
  95.       HANDLE_MSG(hWnd, WM_QUERYNEWPALETTE, OnQueryNewPalette);
  96.       HANDLE_MSG(hWnd, WM_ACTIVATE,        OnActivate);
  97.       HANDLE_MSG(hWnd, WM_MDIACTIVATE,     OnMDIActivate);
  98.     }
  99.  return DefMDIChildProc(hWnd, uiMsg, wParam, lParam);
  100. }
  101.  
  102.