模态对话框问题(100分)

Doria2008 2011-09-06 11:21:17
求教:
新建一个模态对话框,我想根据不同的情况去设定模态对话框上面按钮的状态和大小,该怎么实现?
...全文
143 点赞 收藏 26
写回复
26 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gibsonboy 2011-09-06
看8楼的可以。其实就是在你的模态对话框类的构造函数传参,并通过这个参数判断然后在模态对话框的OnInitDialog初始化MoveWindow就行,假如模态对话框可拖动边缘的还要在它的OnSize里边MoveWindow。
回复
凤矶 2011-09-06
Domodal()前传参。

CDialog1 dlg;
dlg.setShowType( showType ); // 自定义
dlg.DoModal();
回复
Eleven 2011-09-06
[Quote=引用楼主 doria2008 的回复:]
求教:
新建一个模态对话框,我想根据不同的情况去设定模态对话框上面按钮的状态和大小,该怎么实现?
[/Quote]
EnableWindow(TRUE/FALSE);SetWindowPos/MoveWindow()修改控件的区域。
这些东西你可以通过对话框类的构造函数将需要的参数传递进入,当然了你需要修改你模态对话框类的构造函数
回复
jackyjkchen 2011-09-06
用sdk比较容易,重绘大小就行,MFC不知道
回复
Doria2008 2011-09-06
[Quote=引用 2 楼 allenhiman 的回复:]
在模态对话框的 OnInitDialog里面设定按钮的初始大小 以后再想设定的话 可以调用模态对话框类里 你自己写的“updatebtns” 之类的类函数
[/Quote]

"DoModal()函数首先载入对话框模板资源,接下来调用OnInitDialog()函数,并在该函数中调用UpdataData()初始化对话框上的控件."
这是我在书上看到DoModal的执行过程,也就是说我要修改模态对话框上面的控件需要在DoModal()函数执行前进行?我没做好,能否给个例子?
回复
alpha.5 2011-09-06
添加 新窗口类的对象 dlg,添加新窗口上按钮的变量名 myBtn.然后就可以 用 dlg.myBtn 操作了。
回复
quwei197874 2011-09-06
发自定义消息
回复
allenhiman 2011-09-06
在模态对话框的 OnInitDialog里面设定按钮的初始大小 以后再想设定的话 可以调用模态对话框类里 你自己写的“updatebtns” 之类的类函数
回复
罗平 2011-09-06
Onsize获取窗口大小,再设置控件位置和大小,MoveWindow(IDC_)。
回复
Doria2008 2011-09-06
谢谢大家!!所学甚多啊!! 结贴了!
回复
jeson_daniel 2011-09-06
OnInitDialog()是CDialog的虚函数,你可以根据自己的需求重新去实现的。
回复
Doria2008 2011-09-06
[Quote=引用 14 楼 jeson_daniel 的回复:]
引用 7 楼 visualeleven 的回复:

EnableWindow(TRUE/FALSE);SetWindowPos/MoveWindow()修改控件的区域。
这些东西你可以通过对话框类的构造函数将需要的参数传递进入,当然了你需要修改你模态对话框类的构造函数


引用 8 楼 shunruo 的回复:

Domodal()前传参。

CDialog1 dlg;
dl……
[/Quote]

这里的BOOL CMyDialog::OnInitDialog()
{
……
GetDlgItem(IDC_MYBUTTON)->EnableWindow(m_bBtnState);
GetDlgItem(IDC_MYBUTTON)->MoveWindow(&rectBtnSize);
……
}
在自定义的dialog类中没有OnInitDialog函数啊..
回复
jeson_daniel 2011-09-06
[Quote=引用 18 楼 shunruo 的回复:]
O...M...G
DoModal之前一切都是浮云,OKay?
SetButtonStyle只是告诉麻麻晚上我要吃红烧肉,而不现在立刻马上就吃,因为晚饭时间还没到,连生的五花肉都没有吃嘛啊?
直到晚饭时间(DoModal)麻麻做完红烧肉(CDialog::OnInitDialog )吃(Func_Chi())才是成功的。
[/Quote]

很生动,很精辟!
回复
罗平 2011-09-06
先判断,特别在OnSize中,很多控件还没有生成,就调用,会出现错误。

if(GetDlgItem(IDCANCEL)) GetDlgItem(IDCANCEL)->EnableWindow(FALSE);
回复
Doria2008 2011-09-06
[Quote=引用 18 楼 shunruo 的回复:]
O...M...G
DoModal之前一切都是浮云,OKay?
SetButtonStyle只是告诉麻麻晚上我要吃红烧肉,而不现在立刻马上就吃,因为晚饭时间还没到,连生的五花肉都没有吃嘛啊?
直到晚饭时间(DoModal)麻麻做完红烧肉(CDialog::OnInitDialog )吃(Func_Chi())才是成功的。
[/Quote]

汗..
明白了!非常感谢!!
谢谢各位!
学习好费劲啊
回复
jeson_daniel 2011-09-06
你把GetDlgItem(IDCANCEL)->EnableWindow(FALSE);放在SetButtonStyle()中,
然后在主对话框中mydlg.DoModal();前调用SetButtonStyle()的吧?
原因是IDCANCEL控件还没有被创建!

因为DoModal()时控件才会被创建,你在此之前使用GetDlgItem()当然会报错咯!
所以我才把GetDlgItem(IDCANCEL)->EnableWindow(FALSE);放在了OnInitDialog()中的。

如果你觉得这句放在SetButtonStyle()中更合理,可以使用7 楼 visualeleven的方法。
回复
Doria2008 2011-09-06
问题应该是在模态对话框上面,我往上面添加一个按钮,双击按钮添加响应函数时提示 cannot add new member,在classwizard的CMyDialog类中也看不到我添加的对象ID,提示parsing error :Idfintifier expeccted: input line: "public",OK/CANCEL也是一样情况,该怎么解决啊?纠结...
回复
凤矶 2011-09-06

O...M...G
DoModal之前一切都是浮云,OKay?
SetButtonStyle只是告诉麻麻晚上我要吃红烧肉,而不现在立刻马上就吃,因为晚饭时间还没到,连生的五花肉都没有吃嘛啊?
直到晚饭时间(DoModal)麻麻做完红烧肉(CDialog::OnInitDialog )吃(Func_Chi())才是成功的。
回复
Doria2008 2011-09-06
[Quote=引用 14 楼 jeson_daniel 的回复:]
引用 7 楼 visualeleven 的回复:

EnableWindow(TRUE/FALSE);SetWindowPos/MoveWindow()修改控件的区域。
这些东西你可以通过对话框类的构造函数将需要的参数传递进入,当然了你需要修改你模态对话框类的构造函数


引用 8 楼 shunruo 的回复:

Domodal()前传参。

CDialog1 dlg;
dl……
[/Quote]

非常感谢!
我说下我做的过程和遇到的问题,希望大家帮我解决下!
1、新建一个DlgTest的工程。
2、添加一个模态对话框资源,包含OK/CANCEL按钮,生成自己的对话框类CMyDialog;
3、在MyDialog.h中添加按钮模式处理函数void SetButtonStyle();
4、在MyDialog.cpp中添加void SetButtonStyle()函数实现;
5、在主对话框里调用SetButtonStyle()函数。

在第四步这里,我使用GetDlgItem(IDCANCEL)->EnableWindow(FALSE);函数为什么会失败?
回复
zjz800800 2011-09-06
[Quote=引用 13 楼 doria2008 的回复:]

谢谢各位!
我在模态对话框中的cpp文件中这样使用GetDlgItem(IDCANCEL)->EnableWindow(FALSE);函数为什么会失败?在主对话框中没有问题.
[/Quote]

确保GetDlgItem(IDCANCEL)的指针有效,可以ASSERT一下。
回复
加载更多回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2011-09-06 11:21
社区公告
暂无公告