非模态对话框

haidei709885067 2011-03-24 10:08:09
偶还是菜鸟,求教一个问题。
怎么创建和销毁一个非模态对话框(已有父窗口)
想实现的功能是在CListCtrl中右键弹出选择行记录属性对话框,在不关闭对话框的情况下选择另一行记录,刷新选择记录属性到对话框,跪求实现啊
...全文
66 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
向立天 2011-03-24
创建就是通过new和create
销毁通过DestroyWindow和Delete
这篇文章中的Tab选项页就是通过非模态对话框实现的
你可以参考一下
http://blog.csdn.net/xianglitian/archive/2010/05/23/5618814.aspx
回复
haidei709885067 2011-03-24
3楼的方法会出现一闪而过的现象,应该还需要加入消息循环吧。
我是在主窗口创建的对话框对象 ,在子对话框(非模态对话框类)中重载PostNcDestroy()和OnCancel()函数时,delete this 出了错误。
回复
singwhatiwanna 2011-03-24
[Quote=引用 3 楼 ulfsaar 的回复:]
假设C_XXXDialog是一个与resource关联好了的Class
C_XXXDialog* pDlg = new C_XXXDialog();
pDlg->Create(IDD_DIALOG_XXX,this);
pDlg->ShowWindow(SW_SHOW);

这样创建的就是非模态对话框了,pDlg->ShowWindow(SW_SHOW)是为了让该对话框show出来
[/Quote]
楼上说的是如何创建非模态对话框。创建后要把句柄给保存下,当你选择另一行的时候,根据窗体的句柄更新内容。
另外就是非模态对话框的销毁问题,重载其PostNcDestroy和OnCancel函数。参见网上非模态对话框的销毁。
void CSGChatDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CDialog::PostNcDestroy();
delete this;
}

void CSGChatDlg::OnCancel()
{
DestroyWindow();
}
回复
Ulfsaar 2011-03-24
销毁的话用pDlg。DestroyWindow()就好了
楼上的两位都说的有道理,应该从基础学起
回复
Ulfsaar 2011-03-24
假设C_XXXDialog是一个与resource关联好了的Class
C_XXXDialog* pDlg = new C_XXXDialog();
pDlg->Create(IDD_DIALOG_XXX,this);
pDlg->ShowWindow(SW_SHOW);

这样创建的就是非模态对话框了,pDlg->ShowWindow(SW_SHOW)是为了让该对话框show出来
回复
一名程序员 2011-03-24
《Visual C++技术内幕》
回复
I_NBFA 2011-03-24
看书吧,新手更应该踏实看书不是么?基础的基础
回复
Wang471981125 2011-03-24
[Quote=引用 10 楼 visualeleven 的回复:]
C/C++ code
CXXDlg* pDlg = new CXXDlg;
pDlg->Create(...);
pDlg->ShowWindow(SW_SHOW);

...

pDlg->DestroyWindow();
delete pDlg;
pDlg = NULL;
[/Quote]
确实
以前用的方法
回复
Eleven 2011-03-24
CXXDlg* pDlg = new CXXDlg;
pDlg->Create(...);
pDlg->ShowWindow(SW_SHOW);

...

pDlg->DestroyWindow();
delete pDlg;
pDlg = NULL;
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2011-03-24 10:08
社区公告
暂无公告