标签:html cpp als pos shadow .com 代码 idt oid
模态对话框要求自己实现自己的消息循环,当然,建议它还是处于主线程中,所以最好是由它再调用主线程的消息循环函数,此时主线程自身的消息循环函数被阻塞,等待模板对话框的消息循环函数退出

参考代码如下:
|
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
标签:html cpp als pos shadow .com 代码 idt oid
原文地址:http://www.cnblogs.com/findumars/p/6271629.html