在mfc dll的InitInstance()方法中创建对话框实力并且进行显示,在调用dll的时候窗体会一闪而过。
CDLGTEST*dlg;BOOLCTestApp::InitInstance(){dlg=newCDLGTEST;dlg->Create(IDD_DIA_TEST);d...
CDLGTEST *dlg;
BOOL CTestApp::InitInstance()
{
dlg=new CDLGTEST;
dlg->Create(IDD_DIA_TEST);
dlg->ShowWindow(SW_SHOWNORMAL);
return CWinApp::InitInstance();
}
后来查阅资料说是得加入消息循环,代码如下:
CDLGTEST *dlg;
BOOL CTestApp::InitInstance()
{
dlg=new CDLGTEST;
dlg->Create(IDD_DIA_TEST);
dlg->ShowWindow(true);
while(::GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return CWinApp::InitInstance();
}
似乎问题还是解决不了,一闪而过的问题没了,但是这样下来被注入的程序(记事本无响应),注入程序也是无响应,有相应的只有IDD_DIA_TEST窗体,好像主线程进入了while后,一直在处理消息问题,后来用线程来处理消息循环,更是得不到消息信息,困扰几天的问题,实在解决不了了,还请师哥师姐们多多指点。。。小弟万分感激。谢谢 展开
BOOL CTestApp::InitInstance()
{
dlg=new CDLGTEST;
dlg->Create(IDD_DIA_TEST);
dlg->ShowWindow(SW_SHOWNORMAL);
return CWinApp::InitInstance();
}
后来查阅资料说是得加入消息循环,代码如下:
CDLGTEST *dlg;
BOOL CTestApp::InitInstance()
{
dlg=new CDLGTEST;
dlg->Create(IDD_DIA_TEST);
dlg->ShowWindow(true);
while(::GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return CWinApp::InitInstance();
}
似乎问题还是解决不了,一闪而过的问题没了,但是这样下来被注入的程序(记事本无响应),注入程序也是无响应,有相应的只有IDD_DIA_TEST窗体,好像主线程进入了while后,一直在处理消息问题,后来用线程来处理消息循环,更是得不到消息信息,困扰几天的问题,实在解决不了了,还请师哥师姐们多多指点。。。小弟万分感激。谢谢 展开
2个回答
展开全部
我先问一下你在使用dll的时候,如何调用Dll的东东创建对话框的?
追问
我直接将InitInstance函数另起一个名字作为DLL输出函数,直接调用的。
追答
这样是不行的。其实你摸到了问题了,就是你之前的做法是想用CWinApp建立对话框,而实际上,这个CWinApp在MFC运行时是代替了WinMain函数,其在WinMain中被调用,且除了Instance需要调用它的Run函数。而对话框机制下确实是在这个InitInstance里面一直处理消息循环的:
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
不过这个是主对话框的情况,看你的对话框是非模态的,而你又没真正使用CWinApp的功能,所以最好只写一个函数创建对话框即可,且以调用这个线程的对话框为主对话框,这样,消息会由调用线程自动发送到该对话框。另外,不知道你是如何在线程处理消息循环的,而实际应该把对话框的创建都放到线程,因为GetMessage只从当前线程的消息队列获取消息,而你创建对话框如果在另一个线程,那么消息也处在另一个线程,如果消息处理却再开一个线程,那就取不了其消息。
个人不建议使用线程来创建。还有要注意IDD_DIA_TEST和你其它对话框的ID是否有重复。
至于那个一闪而过的问题:水平有限,也没遇到过你这种,如果可以,还望发送工程至gwlprogrammer@hotmail.com让我找找原因。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-28
展开全部
peekmessage
试试
试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询