MainFrm.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:8k
源码类别:

界面编程

开发平台:

Visual C++

  1. // MainFrm.h : interface of the CMainFrame class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_MAINFRM_H__205C43B5_15CF_429F_8CA0_07C395066CE5__INCLUDED_)
  5. #define AFX_MAINFRM_H__205C43B5_15CF_429F_8CA0_07C395066CE5__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #if !defined(__EXT_TEMPL_H)
  10. #include <ExtTempl.h>
  11. #endif
  12. class CSimpleThinFrame : public CWnd
  13. {
  14. bool m_bAutoDestroyOnPostNcDestroy;
  15. public:
  16. CSimpleThinFrame()
  17. : m_bAutoDestroyOnPostNcDestroy( false )
  18. {
  19. }
  20. BOOL Create(
  21. CWnd * pParentWnd,
  22. UINT nID
  23. )
  24. {
  25. return
  26. CWnd::Create(
  27. AfxRegisterWndClass(0), NULL,
  28. WS_CHILD|WS_VISIBLE,
  29. CRect( 0,0,0,0 ),
  30. pParentWnd,
  31. nID,
  32. NULL
  33. );
  34. }
  35. BOOL CreateDynamicThinFrame(
  36. CWnd * pChildWnd
  37. )
  38. {
  39. ASSERT( !m_bAutoDestroyOnPostNcDestroy );
  40. ASSERT_VALID( pChildWnd );
  41. CWnd * pParentWnd = pChildWnd->GetParent();
  42. ASSERT_VALID( pParentWnd );
  43. UINT nID = pChildWnd->GetDlgCtrlID();
  44. if( ! Create( pParentWnd, nID ) )
  45. {
  46. ASSERT( FALSE );
  47. return FALSE;
  48. }
  49. pChildWnd->SetParent( this );
  50. m_bAutoDestroyOnPostNcDestroy = true;
  51. return TRUE;
  52. }
  53. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  54. {
  55. switch( message )
  56. {
  57. case WM_SETFOCUS:
  58. {
  59. HWND hWndChild = ::GetWindow( GetSafeHwnd(), GW_CHILD );
  60. if( hWndChild != NULL )
  61. {
  62. ::SetFocus( hWndChild );
  63. return 0;
  64. }
  65. }
  66. break;
  67. case WM_SIZE:
  68. if( wParam != SIZE_MINIMIZED )
  69. {
  70. HWND hWndChild = ::GetWindow( m_hWnd, GW_CHILD );
  71. if( hWndChild != NULL )
  72. {
  73. ::MoveWindow(
  74. hWndChild,
  75. 0,
  76. 0,
  77. LOWORD(lParam),
  78. HIWORD(lParam),
  79. FALSE
  80. );
  81. RedrawWindow(
  82. NULL, NULL,
  83. RDW_INVALIDATE|RDW_UPDATENOW
  84. |RDW_ERASE|RDW_ERASENOW
  85. |RDW_ALLCHILDREN
  86. );
  87. } // if( hWndChild != NULL )
  88. }
  89. return 0;
  90. case WM_NCCALCSIZE:
  91. {
  92. NCCALCSIZE_PARAMS * pNCCSP =
  93. reinterpret_cast < NCCALCSIZE_PARAMS * > ( lParam );
  94. ASSERT( pNCCSP != NULL );
  95. CRect rcWnd( pNCCSP->rgrc[0] );
  96. rcWnd.DeflateRect( 2, 2 );
  97. ::CopyRect( &(pNCCSP->rgrc[0]), rcWnd );
  98. return 0;
  99. }
  100. case WM_ERASEBKGND:
  101. return 1;
  102. case WM_NCPAINT:
  103. {
  104. CRect rcChildWnd, rcClient;
  105. GetWindowRect( &rcChildWnd );
  106. GetClientRect( &rcClient );
  107. ClientToScreen( &rcClient );
  108. if( rcChildWnd == rcClient )
  109. return 0;
  110. CPoint ptDevOffset = -rcChildWnd.TopLeft();
  111. rcChildWnd.OffsetRect( ptDevOffset );
  112. rcClient.OffsetRect( ptDevOffset );
  113. CWindowDC dc( this );
  114. ASSERT( dc.GetSafeHdc() != NULL );
  115. dc.ExcludeClipRect( &rcClient );
  116. dc.FillSolidRect(
  117. &rcChildWnd,
  118. g_PaintManager->GetColor( COLOR_3DFACE, this )
  119. );
  120. COLORREF clrThinFrame = g_PaintManager->GetColor( COLOR_3DSHADOW, this );
  121. dc.Draw3dRect(
  122. &rcChildWnd,
  123. clrThinFrame,
  124. clrThinFrame
  125. );
  126. return 0;
  127. }
  128. case WM_PAINT:
  129. {
  130. HWND hWndChild = ::GetWindow( m_hWnd, GW_CHILD );
  131. if( hWndChild == NULL )
  132. break;
  133. if( !CExtPaintManager::stat_DefIsHwndNeedsDirectRepaint(hWndChild) )
  134. break;
  135. CRect rcClient;
  136. GetClientRect( &rcClient );
  137. CPaintDC dc( this );
  138. bool bNoFill = false;
  139. if( g_PaintManager->GetCb2DbTransparentMode(this) )
  140. bNoFill =
  141. g_PaintManager->PaintDockerBkgnd(
  142. true,
  143. dc,
  144. this
  145. );
  146. if( ! bNoFill )
  147. dc.FillSolidRect(
  148. &rcClient,
  149. g_PaintManager->GetColor(
  150. CExtPaintManager::CLR_3DFACE_OUT, this
  151. )
  152. );
  153. return 1;
  154. }
  155. } // switch( message )
  156. return CWnd::WindowProc(message,wParam,lParam);
  157. }
  158. virtual void PostNcDestroy()
  159. {
  160. CWnd::PostNcDestroy();
  161. if( m_bAutoDestroyOnPostNcDestroy )
  162. delete this;
  163. }
  164. }; // class CSimpleThinFrame
  165. class CSimpleDynamicEdit : public CExtNCSB < CExtEditBase >
  166. {
  167. public:
  168. CBrush m_brush;
  169. CSimpleDynamicEdit()
  170. : CExtNCSB < CExtEditBase > ( true , true )
  171. {
  172. }
  173. bool Create(
  174. HWND hWndParent,
  175. LPCTSTR strEditorText
  176. )
  177. {
  178. ASSERT_VALID( this );
  179. ASSERT( m_hWnd == NULL );
  180. ASSERT( hWndParent != NULL && ::IsWindow(hWndParent) );
  181. if( ! CWnd::CreateEx(
  182. 0,
  183. _T("EDIT"),
  184. strEditorText,
  185. WS_CHILD|WS_VISIBLE|WS_VSCROLL
  186. |ES_LEFT|ES_WANTRETURN
  187. |ES_DISABLENOSCROLL
  188. |ES_MULTILINE|ES_AUTOVSCROLL
  189. |ES_NOHIDESEL|ES_READONLY
  190. ,
  191. 0,
  192. 0,
  193. 0,
  194. 0,
  195. hWndParent,
  196. (HMENU)NULL,
  197. 0L
  198. )
  199. )
  200. {
  201. ASSERT( FALSE );
  202. return false;
  203. }
  204. SetFont(
  205. CFont::FromHandle(
  206. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  207. )
  208. );
  209. CSimpleThinFrame * pWndThinFrame = new CSimpleThinFrame;
  210. VERIFY( pWndThinFrame->CreateDynamicThinFrame( this ) );
  211. return true;
  212. }
  213. virtual void PostNcDestroy()
  214. {
  215. delete this;
  216. }
  217. protected:
  218. virtual BOOL OnChildNotify(
  219. UINT message,
  220. WPARAM wParam,
  221. LPARAM lParam,
  222. LRESULT * pResult
  223. )
  224. {
  225. if( message == WM_CTLCOLORMSGBOX
  226. || message == WM_CTLCOLOREDIT
  227. || message == WM_CTLCOLORLISTBOX
  228. || message == WM_CTLCOLORBTN
  229. || message == WM_CTLCOLORDLG
  230. || message == WM_CTLCOLORSCROLLBAR
  231. || message == WM_CTLCOLORSTATIC
  232. )
  233. {
  234. if( m_brush.GetSafeHandle() != NULL )
  235. {
  236. CDC * pDC = CDC::FromHandle( (HDC)wParam );
  237. pDC->SetBkMode( TRANSPARENT );
  238. (*pResult) = (LRESULT)m_brush.GetSafeHandle();
  239. return TRUE;
  240. } // if( m_brush.GetSafeHandle() != NULL )
  241. } // if( message == WM_CTLCOLOREDIT )
  242. return
  243. CWnd::OnChildNotify(
  244. message,
  245. wParam,
  246. lParam,
  247. pResult
  248. );
  249. }
  250. }; // class CSimpleDynamicEdit
  251. class CSimpleControlBar : public CExtDynamicControlBar
  252. {
  253. public:
  254. DECLARE_SERIAL( CSimpleControlBar );
  255. COLORREF m_clrEditorBackground;
  256. CSimpleControlBar()
  257. {
  258. m_clrEditorBackground =
  259. CExtBitmap::stat_HLStoRGB(
  260. double( ::rand() % 1000 ) / 1000.0,
  261. 0.8,
  262. 0.7
  263. );
  264. }
  265. virtual void OnSerializeDynamicProps( CArchive & ar )
  266. {
  267. CExtDynamicControlBar::OnSerializeDynamicProps( ar );
  268. if( ar.IsStoring() )
  269. ar << DWORD(m_clrEditorBackground);
  270. else
  271. {
  272. DWORD dwTmp;
  273. ar >> dwTmp; m_clrEditorBackground = COLORREF(dwTmp);
  274. }
  275. }
  276. }; // class CSimpleControlBar
  277. class CMainFrame
  278. : public CExtNCW < CMDIFrameWnd >
  279. , public CExtDynamicBarSite
  280. {
  281. DECLARE_DYNAMIC(CMainFrame)
  282. public:
  283. CMainFrame();
  284. // Attributes
  285. protected:
  286. WINDOWPLACEMENT m_dataFrameWP;
  287. // Operations
  288. public:
  289. // Overrides
  290. // ClassWizard generated virtual function overrides
  291. //{{AFX_VIRTUAL(CMainFrame)
  292. virtual BOOL DestroyWindow();
  293. virtual BOOL PreTranslateMessage(MSG* pMsg);
  294. virtual void ActivateFrame(int nCmdShow = -1);
  295. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  296. virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
  297. //}}AFX_VIRTUAL
  298. // Implementation
  299. public:
  300. virtual ~CMainFrame();
  301. #ifdef _DEBUG
  302. virtual void AssertValid() const;
  303. virtual void Dump(CDumpContext& dc) const;
  304. #endif
  305. protected:  // control bar embedded members
  306. CExtMenuControlBar         m_wndMenuBar;
  307. CExtStatusControlBar       m_wndStatusBar;
  308. CExtToolControlBar         m_wndToolBar;
  309. CExtThemeSwitcherToolControlBar m_wndToolBarUiLook;
  310. CExtDynamicControlBar *    m_pBarPersistent;
  311. CTypedPtrArray < CPtrArray, CExtDynamicControlBar * > m_arrAllDynamicBars;
  312. #if (!defined __EXT_MFC_NO_TABMDI_CTRL)
  313. CExtTMDBS < CExtTabMdiWhidbeyWnd > m_wndMdiTabs;
  314. #endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
  315. // Generated message map functions
  316. protected:
  317. //{{AFX_MSG(CMainFrame)
  318. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  319. afx_msg void OnPersistenceLoadFromFile_Resizable();
  320. afx_msg void OnPersistenceSaveToFile_Resizable();
  321. afx_msg void OnPersistenceLoadFromFile_Fixedsized();
  322. afx_msg void OnPersistenceSaveToFile_Fixedsized();
  323. //}}AFX_MSG
  324. DECLARE_MESSAGE_MAP()
  325. afx_msg LRESULT OnExtMenuPrepare(WPARAM wParam, LPARAM lParam);
  326. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  327. afx_msg void OnUpdateControlBarMenu(CCmdUI* pCmdUI);
  328. afx_msg BOOL OnBarCheck(UINT nID);
  329. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  330. };
  331. /////////////////////////////////////////////////////////////////////////////
  332. //{{AFX_INSERT_LOCATION}}
  333. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  334. #endif // !defined(AFX_MAINFRM_H__205C43B5_15CF_429F_8CA0_07C395066CE5__INCLUDED_)