好贷网好贷款

duilib : 模态窗口

发布时间:2016-12-5 2:26:02 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"duilib : 模态窗口",主要涉及到duilib : 模态窗口方面的内容,对于duilib : 模态窗口感兴趣的同学可以参考一下。

void CMainDlg::DoTask() { CTaskDlg * pDlg = NULL; pDlg = new CTaskDlg(XML_FILE_NAME_TASK_DLG, WND_CLASS_NAME_TASK_DLG); pDlg->Create(this->m_hWnd, MAIN_RORG_DISP_NAME, UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); ///< 如果参数1是NULL, 为桌面, 子窗口就不是模态对话框 pDlg->CenterWindow(); pDlg->ShowModal(); ///< 弹出的是模态窗口 } pDlg->Create 的参数1,开始写成了NULL, 子窗口弹出后, 还可以操作主窗口. 因为要弹出模态对话框, 跟进 pDlg->ShowModal(),  看到了duilib禁止主窗口的代码,  才想到参数1应为父窗口窗口句柄. 可以看出, 当要弹出非模态窗口时, 可以将pDlg->Create 的参数1 填成 NULL. 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( msg.message == WM_CLOSE && msg.hwnd == m_hWnd ) { nRet = msg.wParam; ::EnableWindow(hWndParent, TRUE); ::SetFocus(hWndParent); } if( !CPaintManagerUI::TranslateMessage(&msg) ) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } if( msg.message == WM_QUIT ) break; } ::EnableWindow(hWndParent, TRUE); ::SetFocus(hWndParent); if( msg.message == WM_QUIT ) ::PostQuitMessage(msg.wParam); return nRet; }

上一篇:公园行VS近期点滴汇总
下一篇:程序员人生之路(分析的非常透彻!)http://www.open-open.com/news/view/233f5f

相关文章

相关评论