EditFrameWnd.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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. ON_MESSAGE(WM_DPICHANGED, OnDpiChanged)
  38. ON_WM_MOVING()
  39. ON_WM_ENTERSIZEMOVE()
  40. END_MESSAGE_MAP()
  41. // CEditFrameWnd message handlers
  42. int CEditFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
  43. {
  44. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  45. return -1;
  46. ModifyStyle(WS_CAPTION|WS_BORDER|WS_OVERLAPPED|0x0000C000|WS_THICKFRAME|WS_DLGFRAME|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, 0, SWP_DRAWFRAME);
  47. ModifyStyleEx(WS_EX_CLIENTEDGE, 0, 0);
  48. CString csTitle = theApp.m_Language.GetString("Ditto_Edit", "Ditto Edit");
  49. m_EditWnd.Create(NULL, csTitle, WS_CHILD, CRect(0, 0, 0, 0), this, 100, NULL);
  50. m_EditWnd.ShowWindow(SW_SHOW);
  51. MoveControls();
  52. m_DittoWindow.DoCreate(this);
  53. m_DittoWindow.m_bDrawChevron = false;
  54. m_DittoWindow.SetCaptionColors(g_Opt.m_Theme.CaptionLeft(), g_Opt.m_Theme.CaptionRight(), g_Opt.m_Theme.Border());
  55. m_DittoWindow.SetCaptionOn(this, CAPTION_TOP, true, g_Opt.m_Theme.GetCaptionSize(), g_Opt.m_Theme.GetCaptionFontSize());
  56. m_crIcon.SetRect(-2, -15, 15, 0);
  57. SetWindowText(_T("Ditto Editor"));
  58. return 0;
  59. }
  60. void CEditFrameWnd::OnDestroy()
  61. {
  62. CFrameWnd::OnDestroy();
  63. CRect rect;
  64. GetWindowRect(&rect);
  65. CGetSetOptions::SetEditWndSize(rect.Size());
  66. CGetSetOptions::SetEditWndPoint(rect.TopLeft());
  67. ::SendMessage(m_hNotifyWnd, WM_EDIT_WND_CLOSING, 0, 0);
  68. }
  69. void CEditFrameWnd::OnSize(UINT nType, int cx, int cy)
  70. {
  71. CFrameWnd::OnSize(nType, cx, cy);
  72. MoveControls();
  73. }
  74. void CEditFrameWnd::MoveControls()
  75. {
  76. if(::IsWindow(m_EditWnd.GetSafeHwnd()))
  77. {
  78. CRect cr;
  79. GetClientRect(cr);
  80. m_EditWnd.MoveWindow(cr);
  81. }
  82. }
  83. bool CEditFrameWnd::EditIds(CClipIDs &Ids)
  84. {
  85. return m_EditWnd.EditIds(Ids);
  86. }
  87. BOOL CEditFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
  88. {
  89. if(cs.hMenu!=NULL)
  90. {
  91. ::DestroyMenu(cs.hMenu); // delete menu if loaded
  92. cs.hMenu = NULL; // no menu for this window
  93. }
  94. WNDCLASS wc;
  95. wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
  96. wc.lpfnWndProc = AfxWndProc;
  97. wc.cbClsExtra = 0;
  98. wc.cbWndExtra = 0;
  99. wc.hInstance = AfxGetInstanceHandle();
  100. wc.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  101. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  102. wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  103. wc.lpszMenuName = NULL;
  104. wc.lpszClassName = _T("Ditto Edit Wnd");
  105. // Create the QPaste window class
  106. if (!AfxRegisterClass(&wc))
  107. return FALSE;
  108. cs.lpszClass = wc.lpszClassName;
  109. return CFrameWnd::PreCreateWindow(cs);
  110. }
  111. void CEditFrameWnd::OnDummy()
  112. {
  113. }
  114. void CEditFrameWnd::OnSetFocus(CWnd* pOldWnd)
  115. {
  116. CFrameWnd::OnSetFocus(pOldWnd);
  117. m_EditWnd.SetFocus();
  118. }
  119. void CEditFrameWnd::OnClose()
  120. {
  121. if(m_EditWnd.CloseEdits(true) == false)
  122. return;
  123. CFrameWnd::OnClose();
  124. }
  125. void CEditFrameWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
  126. {
  127. CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
  128. m_DittoWindow.DoNcCalcSize(bCalcValidRects, lpncsp);
  129. }
  130. void CEditFrameWnd::OnNcPaint()
  131. {
  132. m_DittoWindow.DoNcPaint(this);
  133. }
  134. HITTEST_RET CEditFrameWnd::OnNcHitTest(CPoint point)
  135. {
  136. UINT Ret = m_DittoWindow.DoNcHitTest(this, point);
  137. if(Ret == -1)
  138. return CWnd::OnNcHitTest(point);
  139. return Ret;
  140. }
  141. void CEditFrameWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
  142. {
  143. int buttonPressed = m_DittoWindow.DoNcLButtonDown(this, nHitTest, point);
  144. if (buttonPressed != 0)
  145. {
  146. SetTimer(TIMER_BUTTON_UP, 100, NULL);
  147. }
  148. CFrameWnd::OnNcLButtonDown(nHitTest, point);
  149. }
  150. void CEditFrameWnd::OnNcLButtonUp(UINT nHitTest, CPoint point)
  151. {
  152. if(m_DittoWindow.DoNcLButtonUp(this, nHitTest, point) > 0)
  153. return;
  154. KillTimer(TIMER_BUTTON_UP);
  155. CFrameWnd::OnNcLButtonUp(nHitTest, point);
  156. }
  157. void CEditFrameWnd::OnNcMouseMove(UINT nHitTest, CPoint point)
  158. {
  159. m_DittoWindow.DoNcMouseMove(this, nHitTest, point);
  160. CFrameWnd::OnNcMouseMove(nHitTest, point);
  161. }
  162. BOOL CEditFrameWnd::PreTranslateMessage(MSG* pMsg)
  163. {
  164. m_DittoWindow.DoPreTranslateMessage(pMsg);
  165. return CFrameWnd::PreTranslateMessage(pMsg);
  166. }
  167. bool CEditFrameWnd::CloseAll()
  168. {
  169. return m_EditWnd.CloseEdits(true);
  170. }
  171. void CEditFrameWnd::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
  172. {
  173. CPoint pt(point);
  174. ScreenToClient(&pt);
  175. if(m_crIcon.PtInRect(pt))
  176. {
  177. CloseAll();
  178. OnClose();
  179. return;
  180. }
  181. CFrameWnd::OnNcLButtonDblClk(nHitTest, point);
  182. }
  183. void CEditFrameWnd::OnWindowPosChanging(WINDOWPOS* lpwndpos)
  184. {
  185. CFrameWnd::OnWindowPosChanging(lpwndpos);
  186. }
  187. void CEditFrameWnd::OnTimer(UINT_PTR nIDEvent)
  188. {
  189. switch (nIDEvent)
  190. {
  191. case TIMER_BUTTON_UP:
  192. {
  193. if ((GetKeyState(VK_LBUTTON) & 0x100) == 0)
  194. {
  195. m_DittoWindow.DoNcLButtonUp(this, 0, CPoint(0, 0));
  196. KillTimer(TIMER_BUTTON_UP);
  197. }
  198. break;
  199. }
  200. }
  201. CWnd::OnTimer(nIDEvent);
  202. }
  203. LRESULT CEditFrameWnd::OnDpiChanged(WPARAM wParam, LPARAM lParam)
  204. {
  205. int dpi = HIWORD(wParam);
  206. m_DittoWindow.OnDpiChanged(this, dpi);
  207. RECT* const prcNewWindow = (RECT*)lParam;
  208. SetWindowPos(NULL,
  209. prcNewWindow->left,
  210. prcNewWindow->top,
  211. prcNewWindow->right - prcNewWindow->left,
  212. prcNewWindow->bottom - prcNewWindow->top,
  213. SWP_NOZORDER | SWP_NOACTIVATE);
  214. this->Invalidate();
  215. this->UpdateWindow();
  216. return TRUE;
  217. }
  218. void CEditFrameWnd::OnMoving(UINT fwSide, LPRECT pRect)
  219. {
  220. CWnd::OnMoving(fwSide, pRect);
  221. m_snap.OnSnapMoving(m_hWnd, pRect);
  222. }
  223. void CEditFrameWnd::OnEnterSizeMove()
  224. {
  225. m_snap.OnSnapEnterSizeMove(m_hWnd);
  226. CWnd::OnEnterSizeMove();
  227. }