局部变量创建非模态对话框

不用new创建非模态对话框方法如下:

int DoEvents()
{
    MSG msg;
    // Process existing messages in the application's message queue.
    // When the queue is empty, do clean up and return.
    while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    {// has msg
        if(msg.message== WM_APP) return 1;
        if (!AfxGetThread()->PumpMessage()) break;
    }
    return 0;
}
//
WNDPROC g_OldProc=0;
LRESULT CALLBACK NewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch(message) 
    
    case WM_CLOSE: 
        PostMessage(GetParent(hwnd),WM_APP,0,0);
    break;
    case WM_COMMAND: // 0x0111
        if(LOWORD(wParam)==IDOK)
        {   
            PostMessage(GetParent(hwnd),WM_APP,0,0);
        }
    break;   
    
    return CallWindowProc(g_OldProc, hwnd, message, wParam, lParam);
//
void CxxxxDlg::OnButton1() 
{
    CAboutDlg dlg;// modeless dlg , not use new !!!
    dlg.Create(IDD_ABOUTBOX);
    dlg.ShowWindow(SW_SHOW);
    g_OldProc = (WNDPROC)SetWindowLong(dlg.m_hWnd, GWL_WNDPROC, (LONG)NewProc);
//
    while (!DoEvents());
    dlg.DestroyWindow();
    afxDump << "Dlg closed()\n";
}

注意
CAboutDlg dlg;// modeless dlg , not use new !!!

阅读更多
文章标签: modeless dialog
个人分类: MFC
上一篇CFormView 在改变大小时,控件闪烁的问题
下一篇限制对话框的移动范围
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭