是不是每个非模态对话框必须要一一对应一个对话框资源?因为要用同一个模块处理不同的数据。如果复制资源并分别建两个相同内容的类,只是资源名和类名不一样,这样太繁琐了。我想基于同一个资源两个非模态对话框去处理。如果我基于一个资源创建两个非模态对话框,如下:
CManagModifyDlg *dlg1=new CManagModifyDlg;
dlg1->Create(IDD_DIALOG_MODIFY_MANAGE,this);
dlg1->ShowWindow(SW_SHOW); CManagModifyDlg *dlg1=new CManagModifyDlg;
dlg1->Create(IDD_DIALOG_MODIFY_MANAGE,this);
dlg1->ShowWindow(SW_SHOW); 弹出两个非模态对话框,都使用资源IDD_DIALOG_MODIFY_MANAGE。这两个非模态对话框是相互独立的吗?
而IDD_DIALOG_MODIFY_MANAGE资源上的按钮该怎么分别针对两个非模态对话框进行处理。或者说,程序如何处理消息响应函数才能区别用户按的是dlg1上的按钮,还是dlg2上的按钮呢?
请明白人指点,感激不尽!
CManagModifyDlg *dlg1=new CManagModifyDlg;
dlg1->Create(IDD_DIALOG_MODIFY_MANAGE,this);
dlg1->ShowWindow(SW_SHOW); CManagModifyDlg *dlg1=new CManagModifyDlg;
dlg1->Create(IDD_DIALOG_MODIFY_MANAGE,this);
dlg1->ShowWindow(SW_SHOW); 弹出两个非模态对话框,都使用资源IDD_DIALOG_MODIFY_MANAGE。这两个非模态对话框是相互独立的吗?
而IDD_DIALOG_MODIFY_MANAGE资源上的按钮该怎么分别针对两个非模态对话框进行处理。或者说,程序如何处理消息响应函数才能区别用户按的是dlg1上的按钮,还是dlg2上的按钮呢?
请明白人指点,感激不尽!
=============
是独立的,不过他们对事件的处理还不是一样的。IDD_DIALOG_MODIFY_MANAGE资源上的按钮该怎么分别针对两个非模态对话框进行处理。或者说,程序如何处理消息响应函数才能区别用户按的是dlg1上的按钮,还是dlg2上的按钮呢?
=================
这两个对话框的HWND应该是不一样的。我只能想到这一点了。
有两个定义这样的 dlg1在同一个地方,难道不会报错吗?
使用相同的资源是可以建立两个对话框,两个对话框的句柄是不一样的。
如果你要区别两个按钮,最好是用一个变量,在Create之前先将值传过去。然后在按钮上根据值来做区别处理。
楼主你可以 遍历一遍z序上的窗口,找到第一个与你这个无模式对话框对应的句柄,通过句柄传递一个标志到这个对话框的控件,继续查找下一个窗口,找到下一个与你这个无模式对话框对应的句柄,再作一个标志传进该对话框,不知道行不行
楼主你可以 遍历一遍z序上的窗口,找到第一个与你这个无模式对话框对应的句柄,通过句柄传递一个标志到这个对话框的控件,继续查找下一个窗口,找到下一个与你这个无模式对话框对应的句柄,再作一个标志传进该对话框,不知道行不行
楼主你可以 遍历一遍z序上的窗口,找到第一个与你这个无模式对话框对应的句柄,通过句柄传递一个标志到这个对话框的控件,继续查找下一个窗口,找到下一个与你这个无模式对话框对应的句柄,再作一个标志传进该对话框,不知道行不行
如果说我要在按键响应函数里区别用户按了哪个对话框的按键
void CManagModifyDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
MessageBox(L"你选择了左边对话框");//这里在dlg1和dlg2中显示都一样的,怎么区分呢?
}
应该是
应该是
CManagModifyDlg *dlg1=new CManagModifyDlg;
dlg1->Create(IDD_DIALOG_MODIFY_MANAGE,this);
dlg1->ShowWindow(SW_SHOW); CManagModifyDlg *dlg2=new CManagModifyDlg;
dlg2->Create(IDD_DIALOG_MODIFY_MANAGE,this);
dlg2->ShowWindow(SW_SHOW); 如果说我要在按键响应函数里区别用户按了哪个对话框的按键
void CManagModifyDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
MessageBox(L"你选择了左边对话框");//这里在dlg1和dlg2中显示都一样的
}
那么,需要设置个标志位,然后用switch来区别处理?
============
是没有问题而IDD_DIALOG_MODIFY_MANAGE资源上的按钮该怎么分别针对两个非模态对话框进行处理。或者说,程序如何处理消息响应函数才能区别用户按的是dlg1上的按钮,还是dlg2上的按钮呢?
==============
这两个对话框是独立处理消息的
这个问题我觉得要看你的需求
有可能你多虑了
比如QQ
所有的聊天窗口都可以用同一个对话框类
但是我们使用的时候也不用特意去区分啊
类似的东西我做过
没有问题
你可以试一试
有道理,你邮箱多少,我想把一个简单的TestModeless程序给你看看,谢谢啦!
有道理,你邮箱多少,我想把一个简单的TestModeless程序给你看看,谢谢啦!
[email protected]
你看看效果
void CModelessDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString str;
str.Format("这个对话框的句柄是 %d", GetSafeHwnd()); MessageBox(str);
}
Thank you all the same!!