VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 660|回复: 4

[求助] 我用CreateIndirect创建对话框,执行到dlg.DoModal()时居然崩溃了。这个要怎样写?

[复制链接]
75_avatar_middle
在线会员 cumulonimbus 发表于 2017-9-5 13:02:26 | 显示全部楼层 |阅读模式
void CTestDlg::OnButton4()
{
        // TODO: Add your control notification handler code here

        CDialog dlg;
        //LPCDLGTEMPLATE temp;
        DLGTEMPLATE temp;
        temp.cdit=1;
        temp.cx=100;
        temp.cy=100;
        temp.style=WS_OVERLAPPEDWINDOW | WS_VISIBLE | DS_CENTER | DS_3DLOOK;
        temp.x=0;
        temp.y=0;
        temp.dwExtendedStyle=0;
        dlg.CreateIndirect(&temp,this);
        dlg.DoModal();

}

我用CreateIndirect创建对话框,执行到dlg.DoModal()时居然崩溃了。这个要怎样写?




上一篇:显示键盘输入的内容
下一篇:[Win32编程] 求推荐书籍

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2017-9-5 13:36:23 | 显示全部楼层
CreateIndirect 实际用的比较少,他是创建一个非模态对话框,调用完之后你又马上调用 DoModal 创建一个模态的对话框,肯定不行啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
ico_lz  楼主| cumulonimbus 发表于 2017-9-5 21:34:45 | 显示全部楼层
Syc 发表于 2017-9-5 13:36
CreateIndirect 实际用的比较少,他是创建一个非模态对话框,调用完之后你又马上调用 DoModal 创建一个模态 ...

        dlg.ShowWindow(SW_SHOW);
即使改成这样也不行呀

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

81_avatar_middle
online_moderator Debug 发表于 2017-9-6 09:40:27 | 显示全部楼层
初始化 DLGTEMPLATE 类型的对象之后,可以使用 DialogBoxIndirectParam 来创建一个模态的对话框,其 第二个参数就是 DLGTEMPLATE 类型的指针。
大概的代码类似于这种:
  1. //声明:
  2. int UICreateModelDialog(HWND hParent);
  3. BOOL CALLBACK MyDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
  4. int nResult;
  5. //在主模板中调用
  6. nResult = UICreateModelDialog(hWnd);//hWnd为主模板句柄
  7. //定义
  8. int UICreateModelDialog(HWND hParent)
  9. {
  10.         static DLGTEMPLATE dlgtmp;
  11.         dlgtmp.cdit = 0;
  12.         dlgtmp.cx = 300;
  13.         dlgtmp.cy = 200;
  14.         dlgtmp.style = WS_SYSMENU | WS_BORDER | WS_VISIBLE;
  15.         dlgtmp.dwExtendedStyle = 0;
  16.         dlgtmp.x = 10;
  17.         dlgtmp.y = 10;

  18.         return DialogBoxIndirectParam(GetModuleHandle(NULL), &dlgtmp, hParent, MyDialogProc, 0);
  19. }

  20. BOOL CALLBACK MyDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  21. {
  22.         switch (msg)
  23.         {
  24.         case WM_INITDIALOG:
  25.                 return FALSE;

  26.         case WM_PAINT:
  27.                 return FALSE;

  28.         case WM_CLOSE:
  29.                 EndDialog(hDlg, nResult);
  30.                 return FALSE;

  31.         case WM_DESTROY:
  32.                 DestroyWindow(hDlg);
  33.                 return FALSE;
  34.         }
  35.         return FALSE;
  36. }
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 22:53

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表