读书人

怎么在DLL的辅助线程中创建非模式对话

发布时间: 2012-01-12 22:11:58 作者: rapoo

如何在DLL的辅助线程中创建非模式对话框??急!!!
UINT ConnectThread(LPVOID lParam)
{
CHintDlg * pdlg = new CHintDlg;
pdlg-> Create(IDD_MY, CWnd::FromHandle(::GetDesktopWindow()));
pdlg-> ShowWindow(...);
}

我在我的DLL中的辅助线程内,想创建一个非模态对话框(因为不想阻塞),如上面的代码,但是发现好象不行。症状是,对话框可以显示出来,但鼠标处于沙漏状态,并且,对话框上的控件不能显示。

请问如何修改?注:创建线程,使用的是AfxBeginThread(CreateThread也试过),都不行。

注:上面的代码,在主线程中内执行就能正常创建对话框。

[解决办法]
你可以在后面+上消息循环

CHintDlg * pdlg = new CHintDlg;
pdlg-> Create(IDD_MY, CWnd::FromHandle(::GetDesktopWindow()));
pdlg-> ShowWindow(...);

MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(pdlg-> GetSafeHwnd() == 0 ||!IsDialogMessage(pdlg-> GetSafeHwnd(),&msg)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
[解决办法]
CWnd::FromHandle(::GetDesktopWindow())); 可能是这...被别的窗口盖住了吧?

又不是主线程,也不阻塞?
[解决办法]
pdlg-> Create(IDD_MY, CWnd::FromHandle(::GetDesktopWindow()));
====================
改成: pdlg-> Create(IDD_MY, NULL);试试

读书人网 >VC/MFC

热点推荐