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

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #include "stdafx.h"
  22. #if (!defined __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG)
  23. #if (!defined __EXT_MDI_WINDOWS_LIST_DIALOG_H)
  24. #include <ExtMdiWindowsListDlg.h>
  25. #endif
  26. #include <Resources/Resource.h>
  27. #ifdef _DEBUG
  28. #define new DEBUG_NEW
  29. #undef THIS_FILE
  30. static char THIS_FILE[] = __FILE__;
  31. #endif
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CExtMdiWindowsListDlg dialog
  34. IMPLEMENT_DYNAMIC( CExtMdiWindowsListDlg, CExtResizableDialog )
  35. CExtMdiWindowsListDlg::CExtMdiWindowsListDlg(
  36. CMDIFrameWnd * pMDIFrameWnd,
  37. CWnd * pParent // = NULL
  38. )
  39. : __BASEOF_CExtMdiWindowsListDlg__ ( IDD_EXT_MDI_WINDOWS_LIST, pParent )
  40. {
  41. _Init( pMDIFrameWnd->GetSafeHwnd() );
  42. }
  43. CExtMdiWindowsListDlg::CExtMdiWindowsListDlg(
  44. HWND hMDIFrameWnd,
  45. CWnd * pParent // = NULL
  46. )
  47. : __BASEOF_CExtMdiWindowsListDlg__ ( IDD_EXT_MDI_WINDOWS_LIST, pParent )
  48. {
  49. _Init( hMDIFrameWnd );
  50. }
  51. void CExtMdiWindowsListDlg::_Init( HWND hMDIFrameWnd )
  52. {
  53. m_hIcon = NULL;
  54. m_hMDIFrameWnd = hMDIFrameWnd;
  55. ASSERT( m_hMDIFrameWnd != NULL && ::IsWindow(m_hMDIFrameWnd) );
  56. m_hWndMDIClient =
  57. CExtControlBar::stat_FindMdiClientHWND(
  58. m_hMDIFrameWnd
  59. );
  60. ASSERT( m_hWndMDIClient != NULL && ::IsWindow(m_hWndMDIClient) );
  61. m_hIcon = (HICON)(__EXT_MFC_DWORD_PTR)::SendMessage( m_hMDIFrameWnd, WM_GETICON, FALSE, 0 );
  62. if( m_hIcon == NULL ) 
  63. {
  64. m_hIcon = (HICON)(__EXT_MFC_DWORD_PTR)::SendMessage( m_hMDIFrameWnd, WM_GETICON, TRUE, 0 );
  65. if( m_hIcon == NULL ) 
  66. {
  67. m_hIcon = (HICON)(__EXT_MFC_DWORD_PTR)::__EXT_MFC_GetClassLong( m_hMDIFrameWnd, __EXT_MFC_GCL_HICONSM );
  68. if( m_hIcon == NULL )
  69. m_hIcon = ::AfxGetApp()->LoadStandardIcon( IDI_WINLOGO );
  70. } // if( m_hIcon == NULL ) 
  71. } // if( m_hIcon == NULL ) 
  72. }
  73. void CExtMdiWindowsListDlg::DoDataExchange(CDataExchange* pDX)
  74. {
  75. __BASEOF_CExtMdiWindowsListDlg__ :: DoDataExchange(pDX);
  76. //{{AFX_DATA_MAP(CExtMdiWindowsListDlg)
  77. DDX_Control(pDX, IDOK, m_btnOk);
  78. DDX_Control(pDX, IDC_EXT_TILEVERT, m_btnTileVert);
  79. DDX_Control(pDX, IDC_EXT_TILEHORZ, m_btnTileHorz);
  80. DDX_Control(pDX, IDC_EXT_SAVE, m_btnSave);
  81. DDX_Control(pDX, IDC_EXT_MINIMIZE, m_btnMinimize);
  82. DDX_Control(pDX, IDC_EXT_LISTBOX_WINDOWS, m_wndListWindows);
  83. DDX_Control(pDX, IDC_EXT_CLOSEWINDOWS, m_btnCloseWindows);
  84. DDX_Control(pDX, IDC_EXT_CASCADE, m_btnCascade);
  85. DDX_Control(pDX, IDC_EXT_ACTIVATE, m_btnActivate);
  86. DDX_Control(pDX, IDC_EXT_STATIC_LISTBOX_WINDOWS, m_labelListWindows);
  87. //}}AFX_DATA_MAP
  88. }
  89. BEGIN_MESSAGE_MAP( CExtMdiWindowsListDlg, CExtResizableDialog )
  90. //{{AFX_MSG_MAP(CExtMdiWindowsListDlg)
  91. ON_WM_DRAWITEM()
  92. ON_WM_MEASUREITEM()
  93. ON_WM_COMPAREITEM()
  94. ON_LBN_SELCHANGE(IDC_EXT_LISTBOX_WINDOWS, OnSelchangeListboxWindows)
  95. ON_LBN_DBLCLK(IDC_EXT_LISTBOX_WINDOWS, OnDblclkListboxWindows)
  96. //}}AFX_MSG_MAP
  97. END_MESSAGE_MAP()
  98. /////////////////////////////////////////////////////////////////////////////
  99. // CExtMdiWindowsListDlg message handlers
  100. BOOL CExtMdiWindowsListDlg::OnInitDialog() 
  101. {
  102. if( ! __BASEOF_CExtMdiWindowsListDlg__ :: OnInitDialog() )
  103. return FALSE;
  104. if( m_hIcon != NULL )
  105. {
  106. SetIcon( m_hIcon, TRUE ); // Set big icon
  107. SetIcon( m_hIcon, FALSE ); // Set small icon
  108. } // if( m_hIcon != NULL )
  109. AddAnchor(IDC_EXT_LISTBOX_WINDOWS, __RDA_LT, __RDA_RB);
  110. AddAnchor(IDC_EXT_ACTIVATE, __RDA_RT);
  111. AddAnchor(IDOK, __RDA_RT);
  112. AddAnchor(IDC_EXT_SAVE, __RDA_RT);
  113. AddAnchor(IDC_EXT_CLOSEWINDOWS, __RDA_RT);
  114. AddAnchor(IDC_EXT_CASCADE, __RDA_RT);
  115. AddAnchor(IDC_EXT_TILEHORZ, __RDA_RT);
  116. AddAnchor(IDC_EXT_TILEVERT, __RDA_RT);
  117. AddAnchor(IDC_EXT_MINIMIZE, __RDA_RT);
  118. _FillMDIWindowList();
  119. _SelectMDIActive();
  120. OnUpdateButtons();
  121. return TRUE;
  122. }
  123. void CExtMdiWindowsListDlg::OnUpdateButtons()
  124. {
  125. int nCount = m_wndListWindows.GetSelCount();
  126. m_btnActivate.EnableWindow(nCount == 1);
  127. m_btnSave.EnableWindow(nCount > 0);
  128. m_btnCloseWindows.EnableWindow(nCount > 0);
  129. m_btnCascade.EnableWindow(nCount > 1);
  130. m_btnTileVert.EnableWindow(nCount > 1);
  131. m_btnTileHorz.EnableWindow(nCount > 1);
  132. m_btnMinimize.EnableWindow(nCount > 0);
  133. }
  134. //////////////////////////////////////////////////////////////////////////
  135. // Draws listbox item
  136. //////////////////////////////////////////////////////////////////////////
  137. void CExtMdiWindowsListDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS) 
  138. {
  139. if (nIDCtl == IDC_EXT_LISTBOX_WINDOWS)
  140. {
  141. if (lpDIS->itemID == LB_ERR)
  142. return;
  143. CDC* pDC = CDC::FromHandle(lpDIS->hDC);
  144. CRect rcItem = lpDIS->rcItem;
  145. COLORREF clrBackground = PmBridge_GetPM()->GetColor( COLOR_WINDOW, this );
  146. COLORREF clrText = PmBridge_GetPM()->GetColor( COLOR_WINDOWTEXT, this );
  147. if( lpDIS->itemState & ODS_SELECTED )
  148. clrText = PmBridge_GetPM()->GetColor( COLOR_HIGHLIGHTTEXT, this ); 
  149. clrBackground = PmBridge_GetPM()->GetColor( COLOR_HIGHLIGHT, this ); 
  150. }
  151. if( lpDIS->itemAction & (ODA_DRAWENTIRE | ODA_SELECT) )
  152. {
  153. CRect rcErase( rcItem );
  154. if( INT(lpDIS->itemID) == (m_wndListWindows.GetCount()-1) )
  155. {
  156. CRect rcClient;
  157. GetClientRect( &rcClient );
  158. if( rcErase.bottom < rcClient.bottom )
  159. rcErase.bottom = rcClient.bottom;
  160. }
  161. pDC->FillSolidRect( 
  162. rcErase, 
  163. PmBridge_GetPM()->GetColor( COLOR_WINDOW, this )
  164. );
  165. }
  166. CSize szIcon(
  167. ::GetSystemMetrics(SM_CXSMICON),
  168. ::GetSystemMetrics(SM_CYSMICON)
  169. );
  170. CRect rcText( rcItem );
  171. rcText.left += szIcon.cx + 3;
  172. if( lpDIS->itemAction & (ODA_DRAWENTIRE | ODA_SELECT) )
  173. pDC->FillSolidRect( rcText, clrBackground ); 
  174. if( lpDIS->itemAction & ODA_FOCUS )
  175. {
  176. COLORREF clrTextOld = 
  177. pDC->SetTextColor( RGB(255,255,255) );
  178. COLORREF clrBkOld =
  179. pDC->SetBkColor( RGB(0,0,0) );
  180. pDC->DrawFocusRect( &rcText );
  181. pDC->SetBkColor( clrBkOld );
  182. pDC->SetTextColor( clrTextOld );
  183. }
  184. int nOldBkMode = pDC->SetBkMode( TRANSPARENT ); 
  185. COLORREF clrOldText = pDC->SetTextColor( clrText ); 
  186. if( INT(lpDIS->itemID) >= 0 )
  187. {
  188. CString sText;
  189. m_wndListWindows.GetText( INT(lpDIS->itemID), sText );
  190. if( !sText.IsEmpty() )
  191. {
  192. rcItem.left += szIcon.cx + 4;
  193. pDC->DrawText(
  194. sText, 
  195. -1, 
  196. &rcItem,
  197. DT_LEFT | DT_VCENTER | DT_NOPREFIX | DT_SINGLELINE
  198. );
  199. rcItem.left = lpDIS->rcItem.left;
  200. } // if( !sText.IsEmpty() )
  201. } // if( INT(lpDIS->itemID) >= 0 )
  202. HICON hIcon =  (HICON)(__EXT_MFC_DWORD_PTR)::SendMessage( (HWND)lpDIS->itemData, WM_GETICON, FALSE, 0 );
  203. if (hIcon == NULL) 
  204. hIcon = (HICON)(__EXT_MFC_DWORD_PTR)::__EXT_MFC_GetClassLong((HWND)lpDIS->itemData, __EXT_MFC_GCL_HICONSM);
  205. if (hIcon == NULL) 
  206. hIcon = AfxGetApp()->LoadStandardIcon(IDI_WINLOGO);
  207. CRect rcIcon(
  208. rcItem.left, 
  209. rcItem.top, 
  210. rcItem.left + szIcon.cx + 3, 
  211. rcItem.top + szIcon.cy
  212. );
  213. pDC->FillSolidRect( 
  214. rcIcon, 
  215. PmBridge_GetPM()->GetColor( COLOR_WINDOW, this ) 
  216. ); 
  217. ::DrawIconEx(
  218. pDC->m_hDC, 
  219. rcItem.left + 2, 
  220. rcItem.top, 
  221. hIcon,
  222. szIcon.cx, 
  223. szIcon.cy, 
  224. 0, 
  225. NULL, 
  226. DI_NORMAL
  227. );
  228. pDC->SetTextColor( clrOldText );
  229. pDC->SetBkMode( nOldBkMode );
  230. return;
  231. } // if (nIDCtl == IDC_EXT_LISTBOX_WINDOWS)
  232. __BASEOF_CExtMdiWindowsListDlg__ :: OnDrawItem(nIDCtl, lpDIS);
  233. }
  234. void CExtMdiWindowsListDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMIS)
  235. {
  236. if( nIDCtl == IDC_EXT_LISTBOX_WINDOWS )
  237. {
  238. if( lpMIS->itemID == LB_ERR )
  239. return;
  240. return;
  241. } // if( nIDCtl == IDC_EXT_LISTBOX_WINDOWS )
  242. __BASEOF_CExtMdiWindowsListDlg__ :: OnMeasureItem(nIDCtl, lpMIS);
  243. }
  244. int CExtMdiWindowsListDlg::OnCompareItem(int nIDCtl, LPCOMPAREITEMSTRUCT lpCIS)
  245. {
  246. if (nIDCtl == IDC_EXT_LISTBOX_WINDOWS)
  247. {
  248. ASSERT( lpCIS->CtlType == ODT_LISTBOX );
  249. if( lpCIS->itemID1 == LB_ERR 
  250. || lpCIS->itemID2 == LB_ERR 
  251. )
  252. return -1;
  253. CString strItem1, strItem2;
  254. m_wndListWindows.GetText( lpCIS->itemID1, strItem1 );
  255. m_wndListWindows.GetText( lpCIS->itemID2, strItem2 );
  256. return strItem1.Collate( strItem2 );
  257. } // if (nIDCtl == IDC_EXT_LISTBOX_WINDOWS)
  258. return __BASEOF_CExtMdiWindowsListDlg__ :: OnCompareItem(nIDCtl, lpCIS);
  259. }
  260. void CExtMdiWindowsListDlg::OnSelchangeListboxWindows() 
  261. {
  262. OnUpdateButtons();
  263. }
  264. void CExtMdiWindowsListDlg::_FillMDIWindowList()
  265. {
  266. m_wndListWindows.SetRedraw( FALSE );
  267. m_wndListWindows.ResetContent();
  268. // CMDIChildWnd * pActiveChild = (CMDIChildWnd*)m_pMDIFrameWnd->MDIGetActive();
  269. // if( pActiveChild != NULL ) 
  270. // {
  271. // CMDIChildWnd * pChildFrame = (CMDIChildWnd*)pActiveChild->GetWindow(GW_HWNDLAST);
  272. // while( pChildFrame != NULL ) 
  273. // {
  274. // HWND hChildFrame = pChildFrame->GetSafeHwnd();
  275. // CString strWindowText;
  276. // pChildFrame->GetWindowText( strWindowText );
  277. // if( strWindowText.IsEmpty() )
  278. // {
  279. // CWnd* pMDIChildWnd = pChildFrame->GetWindow(GW_CHILD);
  280. // while( pMDIChildWnd )
  281. // {
  282. // if( pMDIChildWnd->IsKindOf(RUNTIME_CLASS(CView)) ) 
  283. // {
  284. // CDocument* pDocument = ((CView*)pMDIChildWnd)->GetDocument();
  285. // if (pDocument == NULL)
  286. // strWindowText = _T("");
  287. // strWindowText = pDocument->GetTitle();
  288. // pChildFrame->SetWindowText( strWindowText );
  289. // } // if( pMDIChildWnd->IsKindOf(RUNTIME_CLASS(CView)) ) 
  290. // pMDIChildWnd = pMDIChildWnd->GetWindow(GW_HWNDNEXT);
  291. // } // while( pMDIChildWnd )
  292. // } // if( strWindowText.IsEmpty() )
  293. // int iIndex = m_wndListWindows.AddString(strWindowText);
  294. // m_wndListWindows.SetItemData(iIndex, (DWORD)hChildFrame);
  295. // pChildFrame = (CMDIChildWnd*)pChildFrame->GetWindow(GW_HWNDPREV);
  296. // } // while( pChildFrame != NULL ) 
  297. // } // if( pActiveChild != NULL ) 
  298. BOOL bMax = FALSE;
  299. HWND hWndMdiActive = (HWND)
  300. ::SendMessage(
  301. m_hWndMDIClient,
  302. WM_MDIGETACTIVE,
  303. 0,
  304. (LPARAM)&bMax
  305. );
  306. if( hWndMdiActive != NULL ) 
  307. {
  308. HWND hWndMdiChild =
  309. ::GetWindow(
  310. hWndMdiActive,
  311. GW_HWNDLAST
  312. );
  313. while( hWndMdiChild != NULL ) 
  314. {
  315. if( ::IsWindowVisible( hWndMdiChild ) )
  316. {
  317. HWND hChildFrame = hWndMdiChild;
  318. CString strWindowText;
  319. CWnd::FromHandle(hWndMdiChild)->GetWindowText( strWindowText );
  320. if( strWindowText.IsEmpty() )
  321. {
  322. HWND hChild = ::GetWindow( hWndMdiChild, GW_CHILD );
  323. while( hChild != NULL )
  324. {
  325. CWnd * pWndPermanent =
  326. CWnd::FromHandlePermanent( hChild );
  327. if( pWndPermanent != NULL )
  328. {
  329. CView * pView =
  330. DYNAMIC_DOWNCAST( CView, pWndPermanent );
  331. if( pView != NULL ) 
  332. {
  333. CDocument * pDocument = pView->GetDocument();
  334. if( pDocument == NULL )
  335. strWindowText = _T("");
  336. strWindowText = pDocument->GetTitle();
  337. ::SetWindowText( hWndMdiChild, strWindowText );
  338. } // if( pView != NULL ) 
  339. } // if( pWndPermanent != NULL )
  340. hChild = ::GetWindow( hChild, GW_HWNDNEXT );
  341. } // while( hChild )
  342. } // if( strWindowText.IsEmpty() )
  343. int iIndex = m_wndListWindows.AddString(strWindowText);
  344. m_wndListWindows.SetItemData( iIndex, (__EXT_MFC_LONG_PTR)hChildFrame );
  345. }
  346. hWndMdiChild = ::GetWindow( hWndMdiChild, GW_HWNDPREV );
  347. } // while( hWndMdiChild != NULL ) 
  348. } // if( hWndMdiActive != NULL ) 
  349. m_wndListWindows.SetRedraw( TRUE );
  350. m_wndListWindows.Invalidate();
  351. }
  352. void CExtMdiWindowsListDlg::_SelectMDIActive()
  353. {
  354. int nCount = m_wndListWindows.GetCount();
  355. if( nCount != LB_ERR 
  356. && nCount > 0
  357. )
  358. {
  359. m_wndListWindows.SelItemRange(FALSE, 0, nCount-1);
  360. BOOL bMax = FALSE;
  361. HWND hWnd = (HWND)
  362. ::SendMessage(
  363. m_hWndMDIClient,
  364. WM_MDIGETACTIVE,
  365. 0,
  366. (LPARAM)&bMax
  367. );
  368. for( int nItem = 0; nItem < nCount; nItem++ ) 
  369. {
  370. if( hWnd == (HWND)m_wndListWindows.GetItemData(nItem) ) 
  371. {
  372. m_wndListWindows.SetSel( nItem );
  373. return;
  374. } // if( hWnd == (HWND)m_wndListWindows.GetItemData(nItem) ) 
  375. } // for(int nItem = 0; nItem < nCount; nItem++) 
  376. }
  377. }
  378. void CExtMdiWindowsListDlg::OnDblclkListboxWindows() 
  379. {
  380. this->SendMessage( WM_COMMAND, IDC_EXT_ACTIVATE );
  381. }
  382. BOOL CExtMdiWindowsListDlg::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  383. {
  384. if( nCode == CN_COMMAND )
  385. {
  386. bool bNeedToUpdateButtons = false;
  387. int nCount = m_wndListWindows.GetCount();
  388. HWND hWnd = (HWND)m_wndListWindows.GetItemData( 
  389. m_wndListWindows.GetCurSel() 
  390. );
  391. WINDOWPLACEMENT wp;
  392. if(hWnd != (HWND)LB_ERR)
  393. {
  394. switch(nID) 
  395. {
  396. case IDC_EXT_TILEVERT:
  397. if( nCount != LB_ERR && nCount > 0 )
  398. {
  399. for(int nItem = nCount-1; nItem >= 0; nItem-- )
  400. {
  401. HWND hWnd=(HWND)m_wndListWindows.GetItemData(nItem);
  402. if( m_wndListWindows.GetSel(nItem) > 0 )
  403. {
  404. //::ShowWindow( hWnd, SW_RESTORE );
  405. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_RESTORE, 0L );
  406. }
  407. else
  408. {
  409. //::ShowWindow( hWnd, SW_MINIMIZE );
  410. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0L );
  411. }
  412. } // for(int nItem = nCount-1; nItem >= 0; nItem-- )
  413. ::SendMessage(m_hWndMDIClient, WM_MDITILE, MDITILE_VERTICAL, 0);
  414. } // if( nCount != LB_ERR && nCount > 0 )
  415. bNeedToUpdateButtons = true;
  416. break;
  417. case IDC_EXT_TILEHORZ:
  418. if( nCount != LB_ERR && nCount > 0 )
  419. {
  420. for(int nItem = nCount-1; nItem >= 0; nItem-- )
  421. {
  422. HWND hWnd=(HWND)m_wndListWindows.GetItemData(nItem);
  423. if( m_wndListWindows.GetSel(nItem) > 0 )
  424. {
  425. //::ShowWindow( hWnd, SW_RESTORE );
  426. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_RESTORE, 0L );
  427. }
  428. else
  429. {
  430. //::ShowWindow( hWnd, SW_MINIMIZE );
  431. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0L );
  432. }
  433. } // for(int nItem = nCount-1; nItem >= 0; nItem-- )
  434. ::SendMessage(m_hWndMDIClient, WM_MDITILE, MDITILE_HORIZONTAL, 0);
  435. } // if( nCount != LB_ERR && nCount > 0 )
  436. bNeedToUpdateButtons = true;
  437. break;
  438. case IDC_EXT_SAVE:
  439. if( nCount != LB_ERR && nCount > 0 )
  440. {
  441. for( int nItem = 0; nItem < nCount; nItem++ ) 
  442. {
  443. if( m_wndListWindows.GetSel(nItem) > 0 ) 
  444. {
  445. HWND hWnd = (HWND)m_wndListWindows.GetItemData(nItem);
  446. if( hWnd != NULL ) 
  447. {
  448. CMDIChildWnd* pMDIChildWnd = (CMDIChildWnd*)CWnd::FromHandle(hWnd);
  449. if (!pMDIChildWnd)
  450. continue;
  451. CDocument *pDocument = pMDIChildWnd->GetActiveDocument();
  452. if(pDocument != NULL)
  453. pDocument->SaveModified();
  454. } // if( hWnd != NULL )
  455. } // if( m_wndListWindows.GetSel(nItem) > 0 ) 
  456. } // for( int nItem = 0; nItem < nCount; nItem++ ) 
  457. } // if( nCount != LB_ERR && nCount > 0 )
  458. _FillMDIWindowList();
  459. _SelectMDIActive();
  460. bNeedToUpdateButtons = true;
  461. break;
  462. case IDC_EXT_MINIMIZE:
  463. if( nCount != LB_ERR && nCount > 0 )
  464. {
  465. for(int nItem = nCount-1; nItem >= 0; nItem-- )
  466. {
  467. HWND hWnd=(HWND)m_wndListWindows.GetItemData(nItem);
  468. if( m_wndListWindows.GetSel(nItem) > 0 )
  469. {
  470. //::ShowWindow( hWnd, SW_MINIMIZE );
  471. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0L );
  472. }
  473. } // for(int nItem = nCount-1; nItem >= 0; nItem-- )
  474. ::SendMessage(m_hWndMDIClient, WM_MDICASCADE, 0, 0);
  475. } // if( nCount != LB_ERR && nCount > 0 )
  476. bNeedToUpdateButtons = true;
  477. break;
  478. case IDC_EXT_ACTIVATE:
  479. ::memset( &wp, 0, sizeof(WINDOWPLACEMENT) );
  480. wp.length = sizeof(WINDOWPLACEMENT);
  481. ::GetWindowPlacement(hWnd, &wp);
  482. if( wp.showCmd == SW_SHOWMINIMIZED )
  483. {
  484. //::ShowWindow( hWnd, SW_RESTORE );
  485. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_RESTORE, 0L );
  486. }
  487. ::SendMessage( m_hWndMDIClient, WM_MDIACTIVATE, (WPARAM)hWnd, 0 );
  488. __BASEOF_CExtMdiWindowsListDlg__ :: OnOK();
  489. break;
  490. case IDC_EXT_CLOSEWINDOWS:
  491. if( nCount != LB_ERR && nCount > 0 )
  492. {
  493. for( int nItem = 0; nItem < nCount; nItem++ ) 
  494. {
  495. if( m_wndListWindows.GetSel(nItem) > 0 ) 
  496. {
  497. HWND hWnd = (HWND)m_wndListWindows.GetItemData(nItem);
  498. if( hWnd != NULL )
  499. ::PostMessage(hWnd, WM_CLOSE, 0,0);
  500. } // if( m_wndListWindows.GetSel(nItem) > 0 ) 
  501. } // for( int nItem = 0; nItem < nCount; nItem++ ) 
  502. } // if( nCount != LB_ERR && nCount > 0 )
  503. CExtPopupMenuWnd::PassMsgLoop( false );
  504. _FillMDIWindowList();
  505. _SelectMDIActive();
  506. bNeedToUpdateButtons = true;
  507. break;
  508. case IDC_EXT_CASCADE:
  509. if( nCount != LB_ERR && nCount > 0 )
  510. {
  511. for(int nItem = nCount-1; nItem >= 0; nItem-- )
  512. {
  513. HWND hWnd=(HWND)m_wndListWindows.GetItemData(nItem);
  514. if( m_wndListWindows.GetSel(nItem) > 0 )
  515. {
  516. //::ShowWindow( hWnd, SW_RESTORE );
  517. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_RESTORE, 0L );
  518. }
  519. else
  520. {
  521. //::ShowWindow( hWnd, SW_MINIMIZE );
  522. ::SendMessage( hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0L );
  523. }
  524. } // for(int nItem = nCount-1; nItem >= 0; nItem-- )
  525. ::SendMessage(m_hWndMDIClient, WM_MDICASCADE, 0, 0);
  526. } // if( nCount != LB_ERR && nCount > 0 )
  527. bNeedToUpdateButtons = true;
  528. break;
  529. }
  530. if( bNeedToUpdateButtons )
  531. OnUpdateButtons();
  532. } // if(hWnd != (HWND)LB_ERR)
  533. } // if( nCode == CN_COMMAND )
  534. return __BASEOF_CExtMdiWindowsListDlg__ :: OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  535. }
  536. #endif // (!defined __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG)