DUI-模态对话框的实现

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DUI-模态对话框的实现相关的知识,希望对你有一定的参考价值。

模态对话框要求自己实现自己的消息循环,当然,建议它还是处于主线程中,所以最好是由它再调用主线程的消息循环函数,此时主线程自身的消息循环函数被阻塞,等待模板对话框的消息循环函数退出

参考代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
INT_PTR XX::DoModal(LPCWSTR lpszXmlId, HWND hParent/*=NULL*/bool bShadow/*=false*/, DM::CRect rect/* = NULL*/)
{
    BOOL bEnableParent = FALSE;
    if(NULL == hParent)
    {
        hParent = GetActiveWnd();
    }
     
    if (hParent && hParent != ::GetDesktopWindow() && ::IsWindowEnabled(hParent))
    {
        ::EnableWindow(hParent, FALSE);
        bEnableParent = TRUE;
    }
 
    if(!DM_CreateWindow(lpszXmlId, rect.left,rect.top,rect.Width(),rect.Height(), hParent, bShadow))
    {
        ::EnableWindow(hParent, TRUE);
        return 0; // 此处失败了
    }
 
    GetClientRect(rect);
    if (!rect.IsRectEmpty())
    {
        CenterWindow();
    }
 
    SendMessage(WM_INITDIALOG);//发送init消息
 
    if(GetExStyle()&WS_EX_TOOLWINDOW)
    {
        ::ShowWindow(m_hWnd,SW_SHOWNOACTIVATE);
    }
    else
    {
        ::ShowWindow(m_hWnd,SW_SHOWNORMAL);
    }
 
     
    ::SetWindowPos(m_hWnd, /*HWND_TOP*/HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
         Run(m_hWnd,true);// 消息循环
 
    if (bEnableParent)
    {
        ::EnableWindow(hParent, TRUE);
    }
 
    return m_nRetCode;
}
 
void  XX::EndDialog( INT_PTR nResult )
{
    m_nRetCode = nResult;
    PostMessage(WM_QUIT);
}

 

http://hgy413.com/1635.html

以上是关于DUI-模态对话框的实现的主要内容,如果未能解决你的问题,请参考以下文章

MFC钩子问题 我想点击一个按钮 弹出一个对话框 然后用钩子函数修改消息,点击之后弹出另一个dui对话框

Web前瞻一个可以打开模态窗的 CSS 新属性

MFC模态与非模态对话框

html+css+jquery 实现模态盒(模式窗口对话框)

模态对话框练习

有没有办法在对话框片段前面打开一个导航抽屉