duilib : 模态窗口

时间:2025-01-24 12:55:25
  • UINT CWindowWnd::ShowModal()  
  • {  
  •     ASSERT(::IsWindow(m_hWnd));  
  •     UINT nRet = 0;  
  •     HWND hWndParent = GetWindowOwner(m_hWnd); ///< 如果子窗口创建时,参数1为NULL, 这里得到的 hWndParent 就为 NULL  
  •     ::ShowWindow(m_hWnd, SW_SHOWNORMAL);  
  •     ::EnableWindow(hWndParent, FALSE); ///< 当 (NULL == hWndParent) 时, EnableWindow 不生效, 导致弹出的是非模态窗口.  
  •     MSG msg = { 0 };  
  •     while( ::IsWindow(m_hWnd) && ::GetMessage(&msg, NULL, 0, 0) ) {  
  •         if(  == WM_CLOSE &&  == m_hWnd ) {  
  •             nRet = ;  
  •             ::EnableWindow(hWndParent, TRUE);  
  •             ::SetFocus(hWndParent);  
  •         }  
  •         if( !CPaintManagerUI::TranslateMessage(&msg) ) {  
  •             ::TranslateMessage(&msg);  
  •             ::DispatchMessage(&msg);  
  •         }  
  •         if(  == WM_QUIT ) break;  
  •     }  
  •     ::EnableWindow(hWndParent, TRUE);  
  •     ::SetFocus(hWndParent);  
  •     if(  == WM_QUIT ) ::PostQuitMessage();  
  •     return nRet;  
  • }