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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "MDIDOCVIEW.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNAMIC( CMainFrame, CMDIFrameWnd )
  14. BEGIN_MESSAGE_MAP( CMainFrame, CMDIFrameWnd )
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. //}}AFX_MSG_MAP
  18. ON_COMMAND_EX(ID_VIEW_MENUBAR, OnBarCheck )
  19. ON_UPDATE_COMMAND_UI(ID_VIEW_MENUBAR, OnUpdateControlBarMenu)
  20. ON_COMMAND_EX(ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  21. ON_UPDATE_COMMAND_UI(ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu)
  22. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_EMPTY, OnBarCheck )
  23. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_EMPTY, OnUpdateControlBarMenu)
  24. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_TREE, OnBarCheck )
  25. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_TREE, OnUpdateControlBarMenu)
  26. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_EDIT, OnBarCheck )
  27. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_EDIT, OnUpdateControlBarMenu)
  28. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_CP, OnBarCheck )
  29. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_CP, OnUpdateControlBarMenu)
  30. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_DLG, OnBarCheck )
  31. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_DLG, OnUpdateControlBarMenu)
  32. ON_REGISTERED_MESSAGE(
  33. CExtPopupMenuWnd::g_nMsgPrepareMenu,
  34. OnExtMenuPrepare
  35. )
  36. END_MESSAGE_MAP()
  37. static UINT indicators[] =
  38. {
  39. ID_SEPARATOR,           // status line indicator
  40. ID_INDICATOR_CAPS,
  41. ID_INDICATOR_NUM,
  42. ID_INDICATOR_SCRL,
  43. };
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CMainFrame construction/destruction
  46. CMainFrame::CMainFrame()
  47. : m_wndDockedCtrlTree( true, true )
  48. , m_wndDockedCtrlEdit( true, true )
  49. {
  50. CWinApp * pApp = ::AfxGetApp();
  51. ASSERT( pApp != NULL );
  52. ASSERT( pApp->m_pszRegistryKey != NULL );
  53. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  54. ASSERT( pApp->m_pszProfileName != NULL );
  55. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  56. if( ! g_PaintManager.PaintManagerStateLoad(
  57. pApp->m_pszRegistryKey,
  58. pApp->m_pszProfileName,
  59. pApp->m_pszProfileName
  60. )
  61. )
  62. g_PaintManager.InstallPaintManager(
  63. RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue)
  64. );
  65. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  66. m_dataFrameWP.showCmd = SW_HIDE;
  67. }
  68. CMainFrame::~CMainFrame()
  69. {
  70. }
  71. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  72. void CMainFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  73. {
  74. CExtControlBar::DoFrameBarCheckUpdate(
  75. this,
  76. pCmdUI,
  77. false
  78. );
  79. }
  80. BOOL CMainFrame::OnBarCheck(UINT nID)
  81. {
  82. return
  83. CExtControlBar::DoFrameBarCheckCmd(
  84. this,
  85. nID,
  86. false
  87. );
  88. }
  89. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  90. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  91. {
  92. CWinApp * pApp = ::AfxGetApp();
  93. ASSERT( pApp != NULL );
  94. ASSERT( pApp->m_pszRegistryKey != NULL );
  95. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  96. ASSERT( pApp->m_pszProfileName != NULL );
  97. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  98. if( CExtNCW < CMDIFrameWnd > :: OnCreate(lpCreateStruct) == -1 )
  99. {
  100. ASSERT( FALSE );
  101. return -1;
  102. }
  103. VERIFY(
  104. g_CmdManager->ProfileWndAdd(
  105. pApp->m_pszProfileName,
  106. GetSafeHwnd()
  107. )
  108. );
  109. VERIFY(
  110. g_CmdManager->UpdateFromMenu(
  111. pApp->m_pszProfileName,
  112. IDR_MAINFRAME
  113. )
  114. );
  115. VERIFY(
  116. g_CmdManager->UpdateFromMenu(
  117. pApp->m_pszProfileName,
  118. IDR_MDIDOCTYPE
  119. )
  120. );
  121. m_wndMenuBar.SetMdiWindowPopupName( _T("Window") );
  122. if( ! m_wndMenuBar.Create(
  123. NULL,
  124. this,
  125. ID_VIEW_MENUBAR
  126. )
  127. )
  128.     {
  129.         TRACE0("Failed to create menubarn");
  130.         return -1;      // failed to create
  131.     }
  132. if( (! m_wndToolBar.Create(
  133. NULL,
  134. this,
  135. AFX_IDW_TOOLBAR
  136. )
  137. )
  138. || (! m_wndToolBar.LoadToolBar( IDR_MAINFRAME ) )
  139. )
  140. {
  141. TRACE0("Failed to create m_wndToolBar toolbarn");
  142. return -1;      // fail to create
  143. }
  144. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  145. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  146. )
  147. {
  148. TRACE0("Failed to create m_wndToolBarUiLook toolbarn");
  149. return -1;      // fail to create
  150. }
  151. if( (! m_wndStatusBar.Create( this ) )
  152. || (! m_wndStatusBar.SetIndicators(
  153. indicators,
  154. sizeof(indicators) / sizeof(UINT)
  155. )
  156. )
  157. )
  158. {
  159. TRACE0("Failed to create status barn");
  160. return -1;      // fail to create
  161. }
  162. m_wndResizableBarEmpty.SetInitDesiredSizeVertical(
  163. CSize( 200, 400 )
  164. );
  165. m_wndResizableBarEmpty.SetInitDesiredSizeHorizontal(
  166. CSize( 400, 200 )
  167. );
  168. if( !m_wndResizableBarEmpty.Create(
  169. NULL, // _T("Optional control bar caption"),
  170. this,
  171. ID_VIEW_RESIZABLEBAR_EMPTY
  172. )
  173. )
  174. {
  175. TRACE0("Failed to create m_wndResizableBarEmptyn");
  176. return -1; // fail to create
  177. }
  178. m_wndResizableBarTree.SetInitDesiredSizeVertical(
  179. CSize( 200, 400 )
  180. );
  181. m_wndResizableBarTree.SetInitDesiredSizeHorizontal(
  182. CSize( 400, 200 )
  183. );
  184. if( !m_wndResizableBarTree.Create(
  185. NULL, // _T("Optional control bar caption"),
  186. this,
  187. ID_VIEW_RESIZABLEBAR_TREE
  188. )
  189. )
  190. {
  191. TRACE0("Failed to create m_wndResizableBarTreen");
  192. return -1; // fail to create
  193. }
  194. if( !m_wndDockedCtrlTree.Create(
  195. WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL
  196. |TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT
  197. |TVS_INFOTIP
  198. |TVS_DISABLEDRAGDROP
  199. |TVS_EDITLABELS
  200. //|TVS_SINGLEEXPAND
  201. |TVS_SHOWSELALWAYS
  202. ,
  203. CRect(0,0,0,0),
  204. &m_wndResizableBarTree,
  205. m_wndResizableBarTree.GetDlgCtrlID()
  206. )
  207. )
  208. {
  209. TRACE0("Failed to create m_wndDockedCtrlEditn");
  210. return -1; // fail to create
  211. }
  212. m_wndDockedCtrlTree.SetFont(
  213. CFont::FromHandle(
  214. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  215. )
  216. );
  217. for( int nTreeIdx0=0; nTreeIdx0<10; nTreeIdx0++ )
  218. {
  219. CString sTreeItemText;
  220. sTreeItemText.Format( _T("Item 1-%d"), nTreeIdx0+1 );
  221. HTREEITEM htiAtLevel0 =
  222. m_wndDockedCtrlTree.InsertItem(
  223. LPCTSTR(sTreeItemText)
  224. );
  225. ASSERT( htiAtLevel0 != NULL );
  226. for( int nTreeIdx1=0; nTreeIdx1<5; nTreeIdx1++ )
  227. {
  228. sTreeItemText.Format( _T("Item 2-%d"), nTreeIdx1+1 );
  229. HTREEITEM htiAtLevel1 =
  230. m_wndDockedCtrlTree.InsertItem(
  231. LPCTSTR(sTreeItemText),
  232. htiAtLevel0
  233. );
  234. ASSERT( htiAtLevel1 != NULL );
  235. for( int nTreeIdx2=0; nTreeIdx2<3; nTreeIdx2++ )
  236. {
  237. sTreeItemText.Format( _T("Item 3-%d"), nTreeIdx2+1 );
  238. HTREEITEM htiAtLevel2 =
  239. m_wndDockedCtrlTree.InsertItem(
  240. LPCTSTR(sTreeItemText),
  241. htiAtLevel1
  242. );
  243. ASSERT( htiAtLevel2 != NULL );
  244. htiAtLevel2;
  245. } // for( int nTreeIdx2=0; nTreeIdx2<5; nTreeIdx2++ )
  246. } // for( int nTreeIdx1=0; nTreeIdx1<5; nTreeIdx1++ )
  247. } // for( int nTreeIdx0=0; nTreeIdx0<10; nTreeIdx0++ )
  248. m_wndResizableBarEdit.SetInitDesiredSizeVertical(
  249. CSize( 200, 400 )
  250. );
  251. m_wndResizableBarEdit.SetInitDesiredSizeHorizontal(
  252. CSize( 400, 200 )
  253. );
  254. if( !m_wndResizableBarEdit.Create(
  255. NULL, // _T("Optional control bar caption"),
  256. this,
  257. ID_VIEW_RESIZABLEBAR_EDIT
  258. )
  259. )
  260. {
  261. TRACE0("Failed to create m_wndResizableBarEditn");
  262. return -1; // fail to create
  263. }
  264. if( !m_wndDockedCtrlEdit.Create(
  265. WS_CHILD|WS_VISIBLE
  266. |ES_MULTILINE|ES_LEFT
  267. |ES_NOHIDESEL|ES_WANTRETURN
  268. ,
  269. CRect(0,0,0,0),
  270. &m_wndResizableBarEdit,
  271. m_wndResizableBarEdit.GetDlgCtrlID()
  272. )
  273. )
  274. {
  275. TRACE0("Failed to create m_wndDockedCtrlEditn");
  276. return -1; // fail to create
  277. }
  278. m_wndDockedCtrlEdit.SetFont(
  279. CFont::FromHandle(
  280. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  281. )
  282. );
  283. m_wndDockedCtrlEdit.SetWindowText(
  284. _T("    Edit controlrn")
  285. _T("    inside resizable control bar")
  286. );
  287. m_wndResizableBarCP.SetInitDesiredSizeVertical(
  288. CSize( 200, 400 )
  289. );
  290. m_wndResizableBarCP.SetInitDesiredSizeHorizontal(
  291. CSize( 400, 200 )
  292. );
  293. if( !m_wndResizableBarCP.Create(
  294. NULL, // _T("Optional control bar caption"),
  295. this,
  296. ID_VIEW_RESIZABLEBAR_CP
  297. )
  298. )
  299. {
  300. TRACE0("Failed to create m_wndResizableBarCPn");
  301. return -1; // fail to create
  302. }
  303. if( !m_wndDockedCtrlCP.Create(
  304. _T("BUTTON"),
  305. _T(""),
  306. WS_CHILD|WS_VISIBLE,
  307. CRect(0,0,0,0),
  308. &m_wndResizableBarCP,
  309. m_wndResizableBarCP.GetDlgCtrlID()
  310. )
  311. )
  312. {
  313. TRACE0("Failed to create m_wndDockedCtrlCPn");
  314. return -1; // fail to create
  315. }
  316. m_wndResizableBarDlg.SetInitDesiredSizeVertical(
  317. CSize( 200, 400 )
  318. );
  319. m_wndResizableBarDlg.SetInitDesiredSizeHorizontal(
  320. CSize( 400, 200 )
  321. );
  322. if( !m_wndResizableBarDlg.Create(
  323. NULL, // _T("Optional control bar caption"),
  324. this,
  325. ID_VIEW_RESIZABLEBAR_DLG
  326. )
  327. )
  328. {
  329. TRACE0("Failed to create m_wndResizableBarDlgn");
  330. return -1; // fail to create
  331. }
  332. if( ! m_wndDockedResizableDialog.Create(
  333. IDD_DIALOG_FOR_RESIZABLE_BAR,
  334. &m_wndResizableBarDlg
  335. )
  336. )
  337. {
  338. TRACE0("Failed to create m_wndResizableBarDlgn");
  339. return -1; // fail to create
  340. }
  341. m_wndDockedResizableDialog.ShowSizeGrip( FALSE );
  342. m_wndLabelInResizableDialog.SubclassDlgItem( IDC_STATIC_TEST, &m_wndDockedResizableDialog );
  343. m_wndDockedResizableDialog.AddAnchor(
  344. IDC_EDIT_IN_RESIZABLE_FORM,
  345. __RDA_LT,
  346. __RDA_RT
  347. );
  348. VERIFY(
  349. m_wndEditInDockedDlg.SubclassDlgItem(
  350. IDC_EDIT_IN_RESIZABLE_FORM,
  351. &m_wndDockedResizableDialog
  352. )
  353. );
  354. m_wndMenuBar.EnableDocking( CBRS_ALIGN_ANY );
  355. m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
  356. m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY );
  357. m_wndResizableBarEmpty.EnableDocking( CBRS_ALIGN_ANY );
  358. m_wndResizableBarTree.EnableDocking( CBRS_ALIGN_ANY );
  359. m_wndResizableBarEdit.EnableDocking( CBRS_ALIGN_ANY );
  360. m_wndResizableBarCP.EnableDocking( CBRS_ALIGN_ANY );
  361. m_wndResizableBarDlg.EnableDocking( CBRS_ALIGN_ANY );
  362. //
  363. // Prof-UIS advanced docking windows feature:
  364. // Show content of control bars when docking / resizing
  365. //
  366. if( !CExtControlBar::FrameEnableDocking(this) )
  367. {
  368. ASSERT( FALSE );
  369. return -1;
  370. }
  371. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  372. if( !CExtControlBar::FrameInjectAutoHideAreas(this) )
  373. {
  374. ASSERT( FALSE );
  375. return -1;
  376. }
  377. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  378. static UINT statBasicCommands[] =
  379. {
  380. ID_FILE_NEW, 
  381. ID_FILE_OPEN, 
  382. ID_FILE_SAVE,
  383. ID_APP_EXIT,
  384. ID_APP_ABOUT,
  385. ID_FILE_PRINT,
  386. ID_FILE_PRINT_SETUP, 
  387. ID_EDIT_COPY, 
  388. ID_EDIT_CUT, 
  389. ID_EDIT_PASTE, 
  390. ID_EDIT_UNDO, 
  391. ID_VIEW_TOOLBAR, 
  392. ID_VIEW_RESIZABLEBAR_EMPTY,
  393. ID_VIEW_RESIZABLEBAR_TREE,
  394. ID_VIEW_RESIZABLEBAR_EDIT,
  395. ID_VIEW_RESIZABLEBAR_CP,
  396. ID_VIEW_RESIZABLEBAR_DLG,
  397. ID_VIEW_UI_LOOK_BAR,
  398. ID_WINDOW_TILE_HORZ,
  399. 0 // end of commands list
  400. }; // statBasicCommands array
  401. VERIFY(
  402. g_CmdManager->SetBasicCommands(
  403. pApp->m_pszProfileName,
  404. statBasicCommands
  405. )
  406. );
  407. if( !CExtControlBar::ProfileBarStateLoad(
  408. this,
  409. pApp->m_pszRegistryKey,
  410. pApp->m_pszProfileName,
  411. pApp->m_pszProfileName,
  412. &m_dataFrameWP
  413. )
  414. )
  415. {
  416. DockControlBar( &m_wndMenuBar );
  417. DockControlBar( &m_wndToolBar );
  418. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  419. m_wndResizableBarEmpty.DockControlBar( AFX_IDW_DOCKBAR_LEFT, 1, this, true );
  420. m_wndResizableBarEmpty.DockControlBar( &m_wndResizableBarTree, true, false, this, true );
  421. m_wndResizableBarEdit.DockControlBar( AFX_IDW_DOCKBAR_RIGHT, 1, this, false );
  422. m_wndResizableBarDlg.DockControlBar( AFX_IDW_DOCKBAR_BOTTOM, 2, this, false );
  423. m_wndResizableBarCP.FloatControlBar( CPoint(400, 200) );
  424. RecalcLayout();
  425. }
  426. g_CmdManager->SerializeState(
  427. pApp->m_pszProfileName,
  428. pApp->m_pszRegistryKey,
  429. pApp->m_pszProfileName,
  430. false
  431. );
  432. return 0;
  433. }
  434. BOOL CMainFrame::DestroyWindow() 
  435. {
  436. CWinApp * pApp = ::AfxGetApp();
  437. ASSERT( pApp != NULL );
  438. ASSERT( pApp->m_pszRegistryKey != NULL );
  439. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  440. ASSERT( pApp->m_pszProfileName != NULL );
  441. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  442. pApp;
  443. VERIFY(
  444. CExtControlBar::ProfileBarStateSave(
  445. this,
  446. pApp->m_pszRegistryKey,
  447. pApp->m_pszProfileName,
  448. pApp->m_pszProfileName,
  449. &m_dataFrameWP
  450. )
  451. );
  452. VERIFY(
  453. g_CmdManager->SerializeState(
  454. pApp->m_pszProfileName,
  455. pApp->m_pszRegistryKey,
  456. pApp->m_pszProfileName,
  457. true
  458. )
  459. );
  460. VERIFY(
  461. g_PaintManager.PaintManagerStateSave(
  462. pApp->m_pszRegistryKey,
  463. pApp->m_pszProfileName,
  464. pApp->m_pszProfileName
  465. )
  466. );
  467. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  468. return CExtNCW < CMDIFrameWnd > :: DestroyWindow();
  469. }
  470. void CMainFrame::ActivateFrame(int nCmdShow) 
  471. {
  472. if( m_dataFrameWP.showCmd != SW_HIDE )
  473. {
  474. SetWindowPlacement( &m_dataFrameWP );
  475. CExtNCW < CMDIFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  476. m_dataFrameWP.showCmd = SW_HIDE;
  477. return;
  478. }
  479. CExtNCW < CMDIFrameWnd > :: ActivateFrame(nCmdShow);
  480. }
  481. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  482. {
  483. if( ! CExtNCW < CMDIFrameWnd > :: PreCreateWindow(cs) )
  484. return FALSE;
  485. return TRUE;
  486. }
  487. /////////////////////////////////////////////////////////////////////////////
  488. // CMainFrame diagnostics
  489. #ifdef _DEBUG
  490. void CMainFrame::AssertValid() const
  491. {
  492. CExtNCW < CMDIFrameWnd > :: AssertValid();
  493. }
  494. void CMainFrame::Dump(CDumpContext& dc) const
  495. {
  496. CExtNCW < CMDIFrameWnd > :: Dump( dc );
  497. }
  498. #endif //_DEBUG
  499. /////////////////////////////////////////////////////////////////////////////
  500. // CMainFrame message handlers
  501. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  502. {
  503. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  504. return TRUE;
  505. if( m_wndMenuBar.TranslateMainFrameMessage( pMsg ) )
  506. return TRUE;
  507. return CExtNCW < CMDIFrameWnd > :: PreTranslateMessage( pMsg );
  508. }
  509. LRESULT CMainFrame::OnExtMenuPrepare(WPARAM wParam, LPARAM lParam)
  510. {
  511. wParam;
  512. lParam;
  513. //////////////////////////////////////////////////////////////////////////
  514. // Add "Windows..." command
  515. //////////////////////////////////////////////////////////////////////////
  516. CExtPopupMenuWnd::MsgPrepareMenuData_t * pData =
  517. reinterpret_cast
  518. < CExtPopupMenuWnd::MsgPrepareMenuData_t * >
  519. ( wParam );
  520. ASSERT( pData != NULL );
  521. CExtPopupMenuWnd * pPopup = pData->m_pPopup;
  522. ASSERT( pPopup != NULL );
  523. INT nItemPos;
  524. INT nNewPos = -1;
  525. nItemPos = pPopup->ItemFindPosForCmdID( __ID_MDIWND_DLGWINDOWS );
  526. if( nItemPos > 0 )
  527. {
  528. // "More Windows..." command found
  529. pPopup->ItemRemove( nItemPos );
  530. nNewPos = nItemPos;
  531. }
  532. else
  533. {
  534. int nMaxCmdID = 0;
  535. for( int nCmdID = __ID_MDIWNDLIST_FIRST; nCmdID <= __ID_MDIWNDLIST_LAST; nCmdID++ ){
  536. nItemPos = pPopup->ItemFindPosForCmdID( nCmdID );
  537. if( nItemPos > 0 ){
  538. if( nCmdID > nMaxCmdID ){
  539. nMaxCmdID = nCmdID;
  540. nNewPos = nItemPos;
  541. }
  542. }
  543. }
  544. if( nNewPos > 0 ){
  545. pPopup->ItemInsert(
  546. (UINT)CExtPopupMenuWnd::TYPE_SEPARATOR,
  547. ++nNewPos
  548. );
  549. nNewPos++;
  550. }
  551. }
  552. if( nNewPos > 0 )
  553. {
  554. UINT nCmdID = ID_WINDOWS_LIST;
  555. CExtCmdItem * pCmdItem =
  556. g_CmdManager->CmdGetPtr(
  557. g_CmdManager->ProfileNameFromWnd( this->GetSafeHwnd() ),
  558. nCmdID
  559. );
  560. if( pCmdItem == NULL ){
  561. pCmdItem = 
  562. g_CmdManager->CmdAllocPtr( 
  563. g_CmdManager->ProfileNameFromWnd( this->GetSafeHwnd() ), 
  564. nCmdID 
  565. );
  566. }
  567. ASSERT( pCmdItem != NULL );
  568. if( pCmdItem != NULL )
  569. {
  570. CExtSafeString sMoreWindows(_T("Windows..."));
  571. CExtSafeString sManageWindows(_T("Manages the currently open windows"));
  572. pCmdItem->m_sMenuText = sMoreWindows;
  573. pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
  574. pCmdItem->m_sTipTool = sManageWindows;
  575. pCmdItem->m_sTipStatus = pCmdItem->m_sTipTool;
  576. pCmdItem->StateSetBasic( true );
  577. pPopup->ItemInsert(
  578. nCmdID,
  579. nNewPos,
  580. sMoreWindows,
  581. NULL,
  582. m_hWnd
  583. );
  584. }
  585. }
  586. return 1;
  587. }
  588. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  589. {
  590. if( nCode == CN_COMMAND )
  591. {
  592. #ifndef __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG
  593. if( nID == ID_WINDOWS_LIST )
  594. {
  595. CExtMdiWindowsListDlg dlgMdiWindowsList( this );
  596. dlgMdiWindowsList.DoModal();
  597. return TRUE;
  598. }
  599. #endif // #ifndef __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG
  600. }
  601. return CExtNCW < CMDIFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  602. }