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

界面编程

开发平台:

Visual C++

  1. // MainFrm.h : interface of the CMainFrame class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_MAINFRM_H__F714E2DF_477E_45FB_99F4_0BF9B1494D80__INCLUDED_)
  5. #define AFX_MAINFRM_H__F714E2DF_477E_45FB_99F4_0BF9B1494D80__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. #include <Resources/Resource.h>
  13. class CMyTaskAreaBar : public CExtControlBar
  14. {
  15. class CTaskAreaWnd : public CExtWRB<CWnd>
  16. {
  17. public:
  18. INT m_nPageNo, m_nPageCount;
  19. CTaskAreaWnd()
  20. : m_nPageNo( 0 )
  21. , m_nPageCount( 5 )
  22. {
  23. }
  24. void SyncPage()
  25. {
  26. ASSERT( GetSafeHwnd() != NULL );
  27. CString sText;
  28. sText.Format(
  29. _T("TaskArea - Page %d"),
  30. m_nPageNo+1,
  31. m_nPageCount
  32. );
  33. CWnd * pBarWnd = GetParent();
  34. ASSERT( pBarWnd != NULL );
  35. ASSERT( pBarWnd->GetSafeHwnd() != NULL );
  36. pBarWnd->SetWindowText( sText );
  37. Invalidate();
  38. }
  39. private:
  40. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  41. {
  42. switch( message )
  43. {
  44. case WM_CREATE:
  45. SyncPage();
  46. break;
  47. case WM_CONTEXTMENU:
  48. return 0;
  49. case WM_ERASEBKGND:
  50. return TRUE;
  51. case WM_PAINT:
  52. {
  53. BOOL bXpStyle = g_PaintManager->IsKindOf(RUNTIME_CLASS(CExtPaintManagerXP));
  54. CPaintDC dcPaint( this );
  55. CExtMemoryDC dc( &dcPaint );
  56. CRect rcPaint;
  57. GetClientRect( &rcPaint );
  58. dc.FillSolidRect(
  59. &rcPaint,
  60. g_PaintManager->GetColor(
  61. bXpStyle
  62. ? CExtPaintManagerXP::XPCLR_3DFACE_NORMAL
  63. : COLOR_WINDOW
  64. ,
  65. this
  66. )
  67. );
  68. rcPaint.DeflateRect( 4, 4 );
  69. if( rcPaint.right - rcPaint.left < 10
  70. || rcPaint.bottom - rcPaint.top < 10
  71. )
  72. return 0;
  73. CFont * pOldFont = dc.SelectObject( &g_PaintManager->m_FontNormal );
  74. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  75. COLORREF clrOldText =
  76. dc.SetTextColor( g_PaintManager->GetColor( COLOR_BTNTEXT, this ) );
  77. CRgn rgnPaint;
  78. VERIFY( rgnPaint.CreateRectRgnIndirect(&rcPaint) );
  79. dc.SelectClipRgn( &rgnPaint );
  80. ASSERT( m_nPageNo >=0 && m_nPageNo < m_nPageCount );
  81. CString sText;
  82. sText.Format(
  83. _T("<< Page %d of %d >>"),
  84. m_nPageNo+1,
  85. m_nPageCount
  86. );
  87. dc.DrawText(
  88. sText,
  89. rcPaint,
  90. DT_SINGLELINE|DT_LEFT|DT_TOP|DT_END_ELLIPSIS
  91. );
  92. dc.SelectClipRgn( NULL );
  93. dc.SetTextColor(clrOldText);
  94. dc.SetBkMode( nOldBkMode );
  95. dc.SelectObject( pOldFont );
  96. return 0;
  97. }
  98. }
  99. return
  100. CExtWRB<CWnd>::WindowProc(message,wParam,lParam);
  101. }
  102. }; // class CTaskAreaWnd
  103. CTaskAreaWnd m_wndTaskArea;
  104. class CBarNcTaskAreaBtn : public CExtBarNcAreaButton
  105. {
  106. public:
  107. bool m_bSwitchToPrevPage:1;
  108. CTaskAreaWnd * m_pTaskAreaWnd;
  109. CBarNcTaskAreaBtn(
  110. CExtControlBar * pBar,
  111. CTaskAreaWnd * pTaskAreaWnd,
  112. bool bSwitchToPrevPage
  113. )
  114. : CExtBarNcAreaButton( pBar )
  115. , m_pTaskAreaWnd( pTaskAreaWnd )
  116. , m_bSwitchToPrevPage( bSwitchToPrevPage )
  117. {
  118. }
  119. virtual bool OnQueryVisibility() const
  120. {
  121. ASSERT_VALID( this );
  122. if( !CExtBarNcAreaButton::OnQueryVisibility() )
  123. return false;
  124. return true;
  125. }
  126. virtual void OnNcAreaDraw( CDC & dc )
  127. {
  128. ASSERT_VALID( this );
  129. ASSERT( dc.GetSafeHdc() != NULL );
  130. ASSERT( OnQueryVisibility() );
  131. if( m_rc.IsRectEmpty() )
  132. return;
  133. m_bDisabled = false;
  134. if( m_bSwitchToPrevPage )
  135. {
  136. if( m_pTaskAreaWnd->m_nPageNo == 0 )
  137. m_bDisabled = true;
  138. } // if( m_bSwitchToPrevPage )
  139. else
  140. {
  141. if( m_pTaskAreaWnd->m_nPageNo == m_pTaskAreaWnd->m_nPageCount-1 )
  142. m_bDisabled = true;
  143. } // else from if( m_bSwitchToPrevPage )
  144. NcDrawDefault(
  145. dc,
  146. m_bSwitchToPrevPage
  147. ? CExtPaintManager::__DCBT_ARROW_LEFT_L
  148. : CExtPaintManager::__DCBT_ARROW_RIGHT_L
  149. );
  150. }
  151. virtual UINT OnNcAreaHitTest( CPoint point )
  152. {
  153. ASSERT_VALID( this );
  154. UINT nHT = CExtBarNcAreaButton::OnNcAreaHitTest( point );
  155. if( nHT == HTCLIENT )
  156. return HTCLIENT; // not inside nc-button
  157. return HTMAXBUTTON; // non HTCLIENT
  158. }
  159. virtual bool OnNcAreaClicked( CPoint point )
  160. {
  161. ASSERT_VALID( this );
  162. if( !m_rc.PtInRect(point) )
  163. return false; // continue asking nc-buttins
  164. ASSERT_VALID( m_pTaskAreaWnd );
  165. bool bRedrawTaskAreaWnd = false;
  166. if( m_bSwitchToPrevPage )
  167. {
  168. if( m_pTaskAreaWnd->m_nPageNo > 0 )
  169. {
  170. m_pTaskAreaWnd->m_nPageNo --;
  171. bRedrawTaskAreaWnd = true;
  172. }
  173. } // if( m_bSwitchToPrevPage )
  174. else
  175. {
  176. if( m_pTaskAreaWnd->m_nPageNo < m_pTaskAreaWnd->m_nPageCount-1 )
  177. {
  178. m_pTaskAreaWnd->m_nPageNo ++;
  179. bRedrawTaskAreaWnd = true;
  180. }
  181. } // else from if( m_bSwitchToPrevPage )
  182. if( bRedrawTaskAreaWnd )
  183. m_pTaskAreaWnd->SyncPage();
  184. return true;
  185. }
  186. __EXT_MFC_INT_PTR OnToolHitTest(
  187. CPoint point,
  188. TOOLINFO * pTI
  189. )
  190. {
  191. ASSERT_VALID( this );
  192. point; // shuld be in button area
  193. return
  194. DoDefaultReflectForToolHitTest(
  195. pTI,
  196. m_bSwitchToPrevPage ? IDS_CBNCAREA_PREV : IDS_CBNCAREA_NEXT,
  197. m_bSwitchToPrevPage ? _T("Previous page") : _T("Next page")
  198. );
  199. }
  200. void OnNcAreaReposition(
  201. CExtBarNcAreaButton * pPrevBtn
  202. )
  203. {
  204. pPrevBtn;
  205. ASSERT_VALID( this );
  206. bool bGripperAtTop = false;
  207. if( !GetBarNcAreaInfo( &m_rc, NULL, &bGripperAtTop ) )
  208. return;
  209. const int _nGapToBordersH = 2;
  210. const int _nGapToBordersV = 3;
  211. const int _nGapBetweenButtons = 3;
  212. ASSERT( bGripperAtTop );
  213. m_rc.DeflateRect(
  214. _nGapToBordersH,
  215. _nGapToBordersV
  216. );
  217. m_rc.right = m_rc.left + m_rc.Height();
  218. m_rc.OffsetRect( 1, 0 );
  219. if( !m_bSwitchToPrevPage )
  220. m_rc.OffsetRect(
  221. m_rc.Width() + _nGapBetweenButtons,
  222. 0
  223. );
  224. }
  225. }; // class CBarNcTaskAreaBtn
  226. virtual void OnNcAreaButtonsReinitialize()
  227. {
  228. INT nCountOfNcButtons = NcButtons_GetCount();
  229. if( nCountOfNcButtons > 0 )
  230. return;
  231. NcButtons_Add( new CExtBarNcAreaButtonClose(this) );
  232. NcButtons_Add( new CBarNcTaskAreaBtn(this,&m_wndTaskArea,false) );
  233. NcButtons_Add( new CBarNcTaskAreaBtn(this,&m_wndTaskArea,true) );
  234. }
  235. virtual bool _IsShowContentWhenDragging() const
  236. {
  237. return true;
  238. }
  239. virtual bool _IsShowContentWhenRowResizing() const
  240. {
  241. return true;
  242. }
  243. virtual bool _IsShowContentWhenRowRecalcing() const
  244. {
  245. return true;
  246. }
  247. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  248. {
  249. switch( message )
  250. {
  251. case WM_CREATE:
  252. VERIFY(
  253. m_wndTaskArea.Create(
  254. ::AfxRegisterWndClass(0),
  255. _T(""),
  256. WS_CHILD|WS_VISIBLE,
  257. CRect(0,0,0,0),
  258. this,
  259. (UINT)IDC_STATIC
  260. )
  261. );
  262. break;
  263. } // switch( message )
  264. return
  265. CExtControlBar::WindowProc(message,wParam,lParam);
  266. }
  267. virtual CRect & NcButtons_CalcGripperTextLocation(
  268. CRect & rcPreCalcText
  269. )
  270. {
  271. INT nCountOfNcButtons = NcButtons_GetCount();
  272. if( nCountOfNcButtons == 0 )
  273. return CExtControlBar::NcButtons_CalcGripperTextLocation(rcPreCalcText);
  274. ASSERT( nCountOfNcButtons == 3 );
  275. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  276. {
  277. CExtBarNcAreaButton * pBtnExamine = NcButtons_GetAt( 0 );
  278. CRect rc = *pBtnExamine;
  279. if( rcPreCalcText.left < rc.right )
  280. rcPreCalcText.left = rc.right;
  281. pBtnExamine = NcButtons_GetAt( 1 );
  282. rc = *pBtnExamine;
  283. if( rcPreCalcText.right > rc.left )
  284. rcPreCalcText.right = rc.left;
  285. }
  286. else
  287. {
  288. CExtBarNcAreaButton * pBtnExamine = NcButtons_GetAt( 0 );
  289. CRect rc = *pBtnExamine;
  290. if( rcPreCalcText.right > rc.left )
  291. rcPreCalcText.right = rc.left;
  292. pBtnExamine = NcButtons_GetAt( 1 );
  293. rc = *pBtnExamine;
  294. if( rcPreCalcText.left < rc.right )
  295. rcPreCalcText.left = rc.right;
  296. }
  297. return rcPreCalcText;
  298. }
  299. }; // class CMyTaskAreaBar
  300. class CMainFrame : public CExtNCW < CMDIFrameWnd >
  301. {
  302. DECLARE_DYNAMIC(CMainFrame)
  303. public:
  304. CMainFrame();
  305. #ifndef __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG
  306. class CMyMdiWindowsListDlg : public CExtMdiWindowsListDlg
  307. {
  308. public:
  309. CMyMdiWindowsListDlg(
  310. CMDIFrameWnd * pMDIFrameWnd,
  311. CWnd * pParent = NULL
  312. )
  313. : CExtMdiWindowsListDlg(
  314. pMDIFrameWnd,
  315. pParent
  316. )
  317. {
  318. }
  319. CMyMdiWindowsListDlg(
  320. HWND hMDIFrameWnd,
  321. CWnd * pParent = NULL
  322. )
  323. : CExtMdiWindowsListDlg(
  324. hMDIFrameWnd,
  325. pParent
  326. )
  327. {
  328. }
  329. protected:
  330. virtual void OnUpdateButtons()
  331. {
  332. CExtMdiWindowsListDlg::OnUpdateButtons();
  333. m_btnSave.ShowWindow(SW_HIDE);
  334. }
  335. }; // class CMyMdiWindowsListDlg : public CExtMdiWindowsListDlg
  336. #endif // #ifndef __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG
  337. // Attributes
  338. public:
  339. private:
  340. // window placement persistence
  341. WINDOWPLACEMENT m_dataFrameWP;
  342. // Operations
  343. public:
  344. // Overrides
  345. // ClassWizard generated virtual function overrides
  346. //{{AFX_VIRTUAL(CMainFrame)
  347. public:
  348. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  349. virtual BOOL PreTranslateMessage(MSG* pMsg);
  350. virtual BOOL DestroyWindow();
  351. virtual void ActivateFrame(int nCmdShow = -1);
  352. virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
  353. //}}AFX_VIRTUAL
  354. // Implementation
  355. public:
  356. virtual ~CMainFrame();
  357. virtual void RecalcLayout(BOOL bNotify = TRUE);
  358. #ifdef _DEBUG
  359. virtual void AssertValid() const;
  360. virtual void Dump(CDumpContext& dc) const;
  361. #endif
  362. protected:  // control bar embedded members
  363. CExtStatusControlBar  m_wndStatusBar;
  364. public: // for child frame
  365. CExtMenuControlBar    m_wndMenuBar;
  366. protected:
  367. CExtToolControlBar    m_wndToolBar;
  368. CExtThemeSwitcherToolControlBar  m_wndToolBarUiLook;
  369. CExtControlBar    m_wndResizableBar0;
  370. CExtControlBar    m_wndResizableBar1;
  371. CExtControlBar    m_wndResizableBar2;
  372. CExtControlBar    m_wndResizableBar3;
  373. CExtControlBar    m_wndResizableBar4;
  374. CMyTaskAreaBar    m_wndResizableBarTA;
  375. CExtNCSB < CExtEditBase > m_wndInBarEdit;
  376. CExtNCSB < CListBox > m_wndInBarListBox;
  377. CExtWRB< CExtColorCtrl > m_wndInBarColorPicker;
  378. CExtWRB< CExtResizableDialog > m_wndInBarDlg;
  379. // Generated message map functions
  380. protected:
  381. //{{AFX_MSG(CMainFrame)
  382. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  383. //}}AFX_MSG
  384. afx_msg LRESULT OnExtMenuPrepare(WPARAM wParam, LPARAM lParam);
  385. afx_msg void OnUpdateControlBarMenu(CCmdUI* pCmdUI);
  386. afx_msg BOOL OnBarCheck(UINT nID);
  387. DECLARE_MESSAGE_MAP()
  388. };
  389. /////////////////////////////////////////////////////////////////////////////
  390. //{{AFX_INSERT_LOCATION}}
  391. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  392. #endif // !defined(AFX_MAINFRM_H__F714E2DF_477E_45FB_99F4_0BF9B1494D80__INCLUDED_)