mfc ShowWindow 对话框显示延迟?

U201212366 2015-11-26 01:40:09
我最近在做把一个封装了对话框的mfc标准的dll,但是程序执行效果不理想
显示对话框代码:
void ShowFiles(HWND hMainWnd, CString FilePath, CList<CString>&list)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CShowFile *showfile = new CShowFile();
CWnd * pMainWnd = CWnd:: FromHandle(hMainWnd);
ASSERT(pMainWnd);
BOOL retValue = showfile->Create(IDD_SHOWFILE, pMainWnd);
showfile->AddFiletoTree(FilePath);
if (!retValue)
{
AfxMessageBox("未能创建对话框");
return;
}
else
{
int n = showfile->ShowWindow(SW_SHOW);
POSITION pos = showfile->m_CheckList.GetHeadPosition();
while(pos)
{
list.AddTail(showfile->m_CheckList.GetNext(pos));
}
}

}

问题是在ShowWindow()执行以后,对话框并没有显示出来...
这是我调用的地方...
void CtestDlg::OnBnClickedTest()
{
// TODO: Add your control notification handler code here
CList<CString>test;
HWND hwnd = AfxGetMainWnd()->GetSafeHwnd();
ShowFiles(hwnd, "D:\\22222\\DICOMDIR", test);
int n = test.GetCount();

}
...全文
454 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
U201212366 2016-01-04
  • 打赏
  • 举报
回复
谢谢啊,所以非模态框在不适用这种方法的时候的确是要出了作用域才会弹出的吧
schlafenhamster 2015-12-31
  • 打赏
  • 举报
回复
ShowFiles(hwnd, "D:\\22222\\DICOMDIR", test); Sleep(500); 、、 等窗口弹出 int n = test.GetCount();
U201212366 2015-12-31
  • 打赏
  • 举报
回复
也就是非模态的对话框的确是这种特性吧,请指教
Eleven 2015-12-30
  • 打赏
  • 举报
回复
那你应该用模块对话框才行~
U201212366 2015-12-30
  • 打赏
  • 举报
回复
void CtestDlg::OnBnClickedTest() { // TODO: Add your control notification handler code here CList<CString>test; HWND hwnd = AfxGetMainWnd()->GetSafeHwnd(); ShowFiles(hwnd, "D:\\22222\\DICOMDIR", test); int n = test.GetCount(); } 就是这样吧,结果是 它先执行int n = test.GetCount();最后再显示窗口,但是test的内容是在窗口显示出来之后,用户做出选择才赋值的,所以最后n总是0
Eleven 2015-12-30
  • 打赏
  • 举报
回复
你的这个函数是在哪里调用的?
U201212366 2015-12-30
  • 打赏
  • 举报
回复
主线程没有卡主吧,就比如我有一个button,点击button响应消息,弹出对话框,但是它要等到后面的函数都执行完了,跳出button响应函数才弹出窗口
Yofoo 2015-12-25
  • 打赏
  • 举报
回复
非模态的也是用主线程的消息引擎才能工作 如果主线程卡住了, 非模态窗体会无响应的
U201212366 2015-11-26
  • 打赏
  • 举报
回复
应该是没影响吧,我的这个是非模态的,想请教一下,是不是必须出了这个模块才会弹出对话框?
信阳毛尖 2015-11-26
  • 打赏
  • 举报
回复
测试一下呗,把 POSITION pos = showfile->m_CheckList.GetHeadPosition(); while(pos) { list.AddTail(showfile->m_CheckList.GetNext(pos)); } 先注释掉看看啥情况

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧