home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 5.ddi / RWCDEMO.ZIP / RWCWND.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  6.1 KB  |  247 lines

  1. // (C) Copyright 1991, 1992 by Borland International
  2.  
  3. #define STRICT
  4. #include <windows.h>
  5. #if defined( BWCC)
  6. #include <bwcc.h>
  7. #else
  8. #define IDHELP 210
  9. #endif
  10. #include "rwcdemo.h"
  11. TMDIChildWindow::TMDIChildWindow(char *aTitle)
  12. {
  13.         title = strdup(aTitle);
  14.         registerWnd();
  15. }
  16.  
  17. TMDIChildWindow::~TMDIChildWindow()
  18. {
  19.         free(title);
  20. }
  21.  
  22. void TMDIChildWindow::registerWnd()
  23. {
  24.         WNDCLASS wndClass;
  25.  
  26.         getWindowClass(&wndClass);
  27.         RegisterClass(&wndClass);
  28. }
  29.  
  30. void TMDIChildWindow::getWindowClass(WNDCLASS *wndClass)
  31. {
  32.         wndClass->style         = CS_HREDRAW | CS_VREDRAW;
  33.         wndClass->lpfnWndProc   = ::WndProc;
  34.         wndClass->cbClsExtra    = 0;
  35.         wndClass->cbWndExtra    = sizeof(LOCALHANDLE);
  36.         wndClass->hInstance     = WinApp::hInstance;
  37.         wndClass->hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  38.         wndClass->hCursor       = LoadCursor(NULL, IDC_ARROW);
  39.         wndClass->hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
  40.         wndClass->lpszMenuName  = NULL;
  41.         wndClass->lpszClassName = className();
  42. }
  43.  
  44. void TMDIChildWindow::rButtonDown(LONG lParam)
  45. {
  46.         HMENU AMenu = CreatePopupMenu();
  47.         char *AName = getPopupTitle();
  48.  
  49.         if (AName)
  50.         {
  51.                 AppendMenu(AMenu, MF_POPUP, (UINT) getPopupMenu(), AName);
  52.                 ClientToScreen(hWindow, &(MAKEPOINT(lParam)));
  53.                 TrackPopupMenu(AMenu, 0, LOWORD(lParam), HIWORD(lParam), 0,
  54.                         hWindow, NULL);
  55.                 DestroyMenu(AMenu);
  56.         }
  57. }
  58.  
  59. TDocument::TDocument(char *aFileName) : TMDIChildWindow(aFileName)
  60. {
  61.         isNewFile = 1;
  62.         changed = 0;
  63.         if (aFileName)
  64.           fileName = strdup(aFileName);
  65.         else
  66.           fileName = NULL;
  67. }
  68.  
  69. TDocument::~TDocument()
  70. {
  71.         if (fileName)
  72.                 free(fileName);
  73. }
  74.  
  75. void TDragWindow::lButtonDown(WORD, LONG)
  76. {
  77.         dragDC = GetDC(hWindow);
  78.         buttonDown = 1;
  79.         SetCapture(hWindow);
  80. }
  81.  
  82. void TDragWindow::lButtonUp(WORD, LONG)
  83. {
  84.         buttonDown = 0;
  85.         ReleaseDC(hWindow, dragDC);
  86.         ReleaseCapture();
  87. }
  88.  
  89. void TScribbleWindow::lButtonDown(WORD wParam, LONG lParam)
  90. {
  91.         TDragWindow::lButtonDown(wParam, lParam);
  92.         MoveTo(dragDC, LOWORD(lParam), HIWORD(lParam));
  93. }
  94.  
  95. void TScribbleWindow::lButtonUp(WORD wParam, LONG lParam)
  96. {
  97.         LineTo(dragDC, LOWORD(lParam), HIWORD(lParam));
  98.         TDragWindow::lButtonUp(wParam, lParam);
  99. }
  100.  
  101. void TScribbleWindow::mouseMove(WORD, LONG lParam)
  102. {
  103.         if (buttonDown)
  104.                 LineTo(dragDC, LOWORD(lParam), HIWORD(lParam));
  105. }
  106.  
  107. void TGraphObject::DrawRect(HDC HandleDC, RECT R)
  108. {
  109.         SetRect(&R, min(R.right, R.left), min(R.top, R.bottom),
  110.                         max(R.right, R.left), max(R.top, R.bottom));
  111.         Assign(&R);
  112.         Draw(HandleDC);
  113. }
  114.  
  115. void TShapeWindow::lButtonDown(WORD wParam, LONG lParam)
  116. {
  117.         TDragWindow::lButtonDown(wParam, lParam);
  118.         oldRop = SetROP2(dragDC, R2_NOTXORPEN);
  119.         SetRect(&R, LOWORD(lParam), HIWORD(lParam), LOWORD(lParam), HIWORD(lParam));
  120.         currentShape = new TRectangle(&R);
  121. }
  122.  
  123. void TShapeWindow::lButtonUp(WORD wParam, LONG lParam)
  124. {
  125.     SetROP2(dragDC, oldRop);
  126.         currentShape->Assign(&R);
  127.         currentShape->Draw(dragDC);
  128.     TDragWindow::lButtonUp(wParam, lParam);
  129.     delete currentShape;
  130. }
  131.  
  132. void TShapeWindow::mouseMove(WORD, LONG lParam)
  133. {
  134.         if (buttonDown)
  135.         {
  136.                 currentShape->DrawRect(dragDC, R);
  137.                 SetRect(&R, R.left, R.top, LOWORD(lParam), HIWORD(lParam));
  138.                 currentShape->DrawRect(dragDC, R);
  139.         }
  140. }
  141.  
  142. BOOL TDocument::canClear()
  143. {
  144.         char s[80];
  145.         int rslt;
  146.  
  147.         if (isModified())
  148.         {
  149.                 if (!fileName)
  150.                   strcpy(s, "Untitled file has changed. Save?");
  151.                 else
  152.                   wvsprintf(s, "File \"%s\" has changed.  Save?", fileName);
  153. #if defined (BWCC)
  154.                 rslt = BWCCMessageBox(hWindow, s, "File Changed", MB_YESNOCANCEL |
  155.                   MB_ICONQUESTION);
  156. #else
  157.                 rslt = MessageBox(hWindow, s, "File Changed", MB_YESNOCANCEL |
  158.                   MB_ICONQUESTION);
  159. #endif
  160.                 return (rslt == IDYES ? save() : rslt != IDCANCEL);
  161.         }
  162.         else
  163.           return 1;
  164. }
  165.  
  166. void TDocument::newFile()
  167. {
  168.         if (canClear())
  169.         {
  170.                 clearWindow();
  171.                 clearModify();
  172.                 isNewFile = 1;
  173.                 setFileName(NULL);
  174.         }
  175. }
  176.  
  177. void TDocument::setFileName(char *aFileName)
  178. {
  179.         char *newCaption;
  180.  
  181.         if (fileName != aFileName)
  182.         {
  183.                 if (fileName)
  184.                         free(fileName);
  185.                 if (aFileName)
  186.                         fileName = strdup(aFileName);
  187.                 else
  188.                         fileName = NULL;
  189.         }
  190.  
  191.         if (!fileName)
  192.                 newCaption = "(Untitled)";
  193.         else
  194.                 newCaption = fileName;
  195.  
  196.         SetWindowText(hWindow, newCaption);
  197. }
  198.  
  199. BOOL TDocument::save()
  200. {
  201.         if (isModified())
  202.                 if (fileName)
  203.                         write();
  204.                 else
  205.                         return saveAs();
  206.  
  207.         return 1;
  208. }
  209.  
  210. TEditWindow::TEditWindow(char *AFilename) :
  211.   TDocument(AFilename)
  212. {
  213. }
  214.  
  215. void TEditWindow::create()
  216. {
  217.   TDocument::create();
  218.   editor = CreateWindow("edit", NULL,
  219.           WS_CHILD | WS_VISIBLE | ES_NOHIDESEL | ES_MULTILINE,
  220.           0, 0, 0, 0, hWindow, (HMENU) 100, WinApp::hInstance, NULL);
  221.                 //size method will size control
  222. }
  223.  
  224. void TEditWindow::size(WORD wParam, LONG lParam)
  225. {
  226.         TDocument::size(wParam, lParam);
  227.         SetWindowPos(editor, 0, -1, -1, LOWORD(lParam) + 2, HIWORD(lParam)+2,
  228.           SWP_NOZORDER);
  229. }
  230.  
  231. void TEditWindow::setFocus()
  232. {
  233.         SetFocus(editor);
  234. }
  235.  
  236. HMENU TShapeWindow::getPopupMenu()
  237. {
  238.         return LoadMenu(WinApp::hInstance, MAKEINTRESOURCE(1001));
  239. }
  240.  
  241.  
  242. HMENU TScribbleWindow::getPopupMenu()
  243. {
  244.         return LoadMenu(WinApp::hInstance, MAKEINTRESOURCE(1000));
  245. }
  246.  
  247.