home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / wksinst / rwcdemo.pak / RWCWND.CPP < prev    next >
C/C++ Source or Header  |  1991-09-09  |  5KB  |  244 lines

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