EditFrameWnd.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. // EditFrameWnd.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CP_Main.h"
  5. #include "EditFrameWnd.h"
  6. #include ".\editframewnd.h"
  7. #define TIMER_BUTTON_UP 1
  8. // CEditFrameWnd
  9. IMPLEMENT_DYNCREATE(CEditFrameWnd, CFrameWnd)
  10. CEditFrameWnd::CEditFrameWnd()
  11. {
  12. m_bAutoMenuEnable = FALSE;
  13. }
  14. CEditFrameWnd::~CEditFrameWnd()
  15. {
  16. }
  17. BEGIN_MESSAGE_MAP(CEditFrameWnd, CFrameWnd)
  18. ON_WM_CREATE()
  19. ON_WM_DESTROY()
  20. ON_WM_SIZE()
  21. ON_COMMAND(ID_BUTTON_SAVE, OnDummy)
  22. ON_COMMAND(ID_BUTTON_SAVE_ALL, OnDummy)
  23. ON_COMMAND(ID_BUTTON_CLOSE, OnDummy)
  24. ON_COMMAND(ID_BUTTON_NEW, OnDummy)
  25. ON_COMMAND(ID_BUTTON_SAVE_CLOSE_CLIPBOARD, OnDummy)
  26. ON_WM_SETFOCUS()
  27. ON_WM_CLOSE()
  28. ON_WM_NCCALCSIZE()
  29. ON_WM_NCPAINT()
  30. ON_WM_NCHITTEST()
  31. ON_WM_NCLBUTTONDOWN()
  32. ON_WM_NCLBUTTONUP()
  33. ON_WM_NCMOUSEMOVE()
  34. ON_WM_NCLBUTTONDBLCLK()
  35. ON_WM_WINDOWPOSCHANGING()
  36. ON_WM_TIMER()
  37. END_MESSAGE_MAP()
  38. // CEditFrameWnd message handlers
  39. int CEditFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
  40. {
  41. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  42. return -1;
  43. ModifyStyle(WS_CAPTION|WS_BORDER|WS_OVERLAPPED|0x0000C000|WS_THICKFRAME|WS_DLGFRAME|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, 0, SWP_DRAWFRAME);
  44. ModifyStyleEx(WS_EX_CLIENTEDGE, 0, 0);
  45. CString csTitle = theApp.m_Language.GetString("Ditto_Edit", "Ditto Edit");
  46. m_EditWnd.Create(NULL, csTitle, WS_CHILD, CRect(0, 0, 0, 0), this, 100, NULL);
  47. m_EditWnd.ShowWindow(SW_SHOW);
  48. MoveControls();
  49. m_DittoWindow.DoCreate(this);
  50. m_DittoWindow.m_bDrawChevron = false;
  51. m_DittoWindow.SetCaptionColors(g_Opt.m_Theme.CaptionLeft(), g_Opt.m_Theme.CaptionRight(), g_Opt.m_Theme.Border());
  52. m_DittoWindow.SetCaptionOn(this, CAPTION_TOP, true, g_Opt.m_Theme.GetCaptionSize(), g_Opt.m_Theme.GetCaptionFontSize());
  53. m_crIcon.SetRect(-2, -15, 15, 0);
  54. SetWindowText(_T("Ditto Editor"));
  55. return 0;
  56. }
  57. void CEditFrameWnd::OnDestroy()
  58. {
  59. CFrameWnd::OnDestroy();
  60. CRect rect;
  61. GetWindowRect(&rect);
  62. CGetSetOptions::SetEditWndSize(rect.Size());
  63. CGetSetOptions::SetEditWndPoint(rect.TopLeft());
  64. ::SendMessage(m_hNotifyWnd, WM_EDIT_WND_CLOSING, 0, 0);
  65. }
  66. void CEditFrameWnd::OnSize(UINT nType, int cx, int cy)
  67. {
  68. CFrameWnd::OnSize(nType, cx, cy);
  69. m_DittoWindow.DoSetRegion(this);
  70. MoveControls();
  71. }
  72. void CEditFrameWnd::MoveControls()
  73. {
  74. if(::IsWindow(m_EditWnd.GetSafeHwnd()))
  75. {
  76. CRect cr;
  77. GetClientRect(cr);
  78. m_EditWnd.MoveWindow(cr);
  79. }
  80. }
  81. bool CEditFrameWnd::EditIds(CClipIDs &Ids)
  82. {
  83. return m_EditWnd.EditIds(Ids);
  84. }
  85. BOOL CEditFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
  86. {
  87. if(cs.hMenu!=NULL)
  88. {
  89. ::DestroyMenu(cs.hMenu); // delete menu if loaded
  90. cs.hMenu = NULL; // no menu for this window
  91. }
  92. WNDCLASS wc;
  93. wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
  94. wc.lpfnWndProc = AfxWndProc;
  95. wc.cbClsExtra = 0;
  96. wc.cbWndExtra = 0;
  97. wc.hInstance = AfxGetInstanceHandle();
  98. wc.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  99. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  100. wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  101. wc.lpszMenuName = NULL;
  102. wc.lpszClassName = _T("Ditto Edit Wnd");
  103. // Create the QPaste window class
  104. if (!AfxRegisterClass(&wc))
  105. return FALSE;
  106. cs.lpszClass = wc.lpszClassName;
  107. return CFrameWnd::PreCreateWindow(cs);
  108. }
  109. void CEditFrameWnd::OnDummy()
  110. {
  111. }
  112. void CEditFrameWnd::OnSetFocus(CWnd* pOldWnd)
  113. {
  114. CFrameWnd::OnSetFocus(pOldWnd);
  115. m_EditWnd.SetFocus();
  116. }
  117. void CEditFrameWnd::OnClose()
  118. {
  119. if(m_EditWnd.CloseEdits(true) == false)
  120. return;
  121. CFrameWnd::OnClose();
  122. }
  123. void CEditFrameWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
  124. {
  125. CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
  126. m_DittoWindow.DoNcCalcSize(bCalcValidRects, lpncsp);
  127. }
  128. void CEditFrameWnd::OnNcPaint()
  129. {
  130. m_DittoWindow.DoNcPaint(this);
  131. }
  132. HITTEST_RET CEditFrameWnd::OnNcHitTest(CPoint point)
  133. {
  134. UINT Ret = m_DittoWindow.DoNcHitTest(this, point);
  135. if(Ret == -1)
  136. return CWnd::OnNcHitTest(point);
  137. return Ret;
  138. }
  139. void CEditFrameWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
  140. {
  141. int buttonPressed = m_DittoWindow.DoNcLButtonDown(this, nHitTest, point);
  142. if (buttonPressed != 0)
  143. {
  144. SetTimer(TIMER_BUTTON_UP, 100, NULL);
  145. }
  146. CFrameWnd::OnNcLButtonDown(nHitTest, point);
  147. }
  148. void CEditFrameWnd::OnNcLButtonUp(UINT nHitTest, CPoint point)
  149. {
  150. if(m_DittoWindow.DoNcLButtonUp(this, nHitTest, point) > 0)
  151. return;
  152. KillTimer(TIMER_BUTTON_UP);
  153. CFrameWnd::OnNcLButtonUp(nHitTest, point);
  154. }
  155. void CEditFrameWnd::OnNcMouseMove(UINT nHitTest, CPoint point)
  156. {
  157. m_DittoWindow.DoNcMouseMove(this, nHitTest, point);
  158. CFrameWnd::OnNcMouseMove(nHitTest, point);
  159. }
  160. BOOL CEditFrameWnd::PreTranslateMessage(MSG* pMsg)
  161. {
  162. m_DittoWindow.DoPreTranslateMessage(pMsg);
  163. return CFrameWnd::PreTranslateMessage(pMsg);
  164. }
  165. bool CEditFrameWnd::CloseAll()
  166. {
  167. return m_EditWnd.CloseEdits(true);
  168. }
  169. void CEditFrameWnd::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
  170. {
  171. CPoint pt(point);
  172. ScreenToClient(&pt);
  173. if(m_crIcon.PtInRect(pt))
  174. {
  175. CloseAll();
  176. OnClose();
  177. return;
  178. }
  179. CFrameWnd::OnNcLButtonDblClk(nHitTest, point);
  180. }
  181. void CEditFrameWnd::OnWindowPosChanging(WINDOWPOS* lpwndpos)
  182. {
  183. CFrameWnd::OnWindowPosChanging(lpwndpos);
  184. m_DittoWindow.SnapToEdge(this, lpwndpos);
  185. }
  186. void CEditFrameWnd::OnTimer(UINT_PTR nIDEvent)
  187. {
  188. switch (nIDEvent)
  189. {
  190. case TIMER_BUTTON_UP:
  191. {
  192. if ((GetKeyState(VK_LBUTTON) & 0x100) == 0)
  193. {
  194. m_DittoWindow.DoNcLButtonUp(this, 0, CPoint(0, 0));
  195. KillTimer(TIMER_BUTTON_UP);
  196. }
  197. break;
  198. }
  199. }
  200. CWnd::OnTimer(nIDEvent);
  201. }