VC/MFC如何使用CreateEx()创建自己的对话框资源

摘自:http://blog.sina.com.cn/s/blog_46e7a06c0100dw9x.html

创建非模态对话框是调用的是Create(),第一个参数是对话框模板指针,第二个是父窗口指针,默认NULL。
BOOL CDialog::Create(LPCTSTR lpsztemplatename,CWnd* pparentwnd)
{在这里面会调用
return CreateIndirect(htemplate,pparentwnd,hinst);
}
很多代码,写不清了,你还是在非模态对话框的创建函数那里,即create()这里设置断点跟踪下去查看吧,createex()函数是创建窗口函数,CDialog没有重载它,你不能直接使用的。你使用的那个create()是从CWnd重载过来的。从断点处跟踪查看,就可以看到底层代码的调用了。
(CreateEx(...)创建自己资源ID对话框)一定不可以


Create()方法创建的是非模态对话框。非模态对话框显示使用dlg.ShowWindow(SW_SHOW);dlg.UpdateWindow();
模态对话框显示使用dlg.DoModal();注意了。
CreateEx()是CWnd的函数,不能使用这个函数通过对话框资源建立对话框,所以你说的(通过用CreateEx()创建时改变他的windows style 就是是原本我在资源编辑器中的style为child 现在在CreateEx()中 修改为 WS_POPUP )那是不可能的。
使用Create()创建对话框的话,此时对话框是非模态的,此时的对话框应该是全局的,它和主程序同时并存。
我给你的方法是
dlg.Create(IDD_ABOUTBOX);
::SetWindowLong(dlg.m_hWnd,GWL_STYLE,::GetWindowLong(dlg.m_hWnd,GWL_STYLE)& ~WS_MAXIMIZEBOX);
dlg.ShowWindow(SW_SHOW);
dlg.UpdateWindow();
===============================
解释:CAboutDlg dlg;这里定义一个全局的,或者说生命期和主程序一样长的一个变量。WS_MAXIMIZEBOX这就是窗口的属性,你可以随便修改。
对于你的问题,我还有个想法,你没搞清楚什么是模态对话框,什么是非模态对话框。一般使用模态对话框就可以了,如:CAboutDlg dlg;dlg.DoModal();
就会显示对话框,直到这个对话框关闭,不然程序一直停留在dlg.DoModal();这里。此时dlg可以是局部变量

::SetWindowLong(dlg.m_hWnd,

GWL_STYLE,::GetWindowLong(dlg.m_hWnd,GWL_STYLE)& ~WS_CHILD | WS_POPUP);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值