VC 中 非模态对话框 按钮返回值 问题 80

我在头文件中申明了2个对话框指针如下:(都是子窗口)public:CDialogGUIDE*GUIDE;CDialogCARD*CARD;我在OnInitDialog函数... 我在头文件中申明了2个对话框指针如下:(都是子窗口)
public:
CDialogGUIDE *GUIDE;
CDialogCARD *CARD;
我在OnInitDialog函数中分配空间并生产对话框,如下:
//生成界面
GUIDE=new CDialogGUIDE();
GUIDE->Create(IDD_DIALOG_GUIDE);
GUIDE->ShowWindow(SW_HIDE);

CARD=new CDialogCARD();
CARD->Create(IDD_DIALOG_CARD);
CARD->ShowWindow(SW_HIDE);
现在,我在主窗口中的菜单中单击选项,产生如下操作:(问题出在这里)
void CTechnologyCenterDlg::OnMenuitemDevice()
{
// TODO: Add your command handler code here
GUIDE->ShowWindow(SW_HIDE);
GUIDE->ShowWindow(SW_SHOW);
//数据库操作
// CARD->ShowWindow(SW_HIDE);
// CARD->ShowWindow(SW_SHOW);
}
因为我产生的是非模态对话框,所以我在非模态对话框中点击 确定 按钮没有任何反应(除了对话框隐藏之外)。
而我需要的是:当我点击按钮之后,代码能够在void CTechnologyCenterDlg::OnMenuitemDevice()中续续运行。
因为我要动态的在GUIDE中设置一些参数,所以无法把GUIDE设置成模态对话框。
所以,现在我的问题是:如何在非模态对话框中点击按钮,我在主函数的菜单项中继续操作
你好,二楼,谢谢你的回答,不过,我要说明一点是,我是主对话框调用非模态对话框。两个对话框时不同的,所以你的那个直接OnBtnOK()可能无法用
展开
 我来答
春光闪烁
2011-02-16 · TA获得超过267个赞
知道答主
回答量:46
采纳率:0%
帮助的人:52.4万
展开全部
没有办法实现
因为是既然是非模拟对话框不会停上那里, 即使你使用WaitForSingleObject可以停止在那里界面也会卡住
不过我可以推荐几种方法
1. 使用模拟对话框, 你说没办法动态进行设置, 我觉得:一可以在GUIDE对话框中添加菜单进行设置, 二若是根据消息, 你也可以转发给GUIDE对话框, 在GUIDE对话框进行根据消息进行动态设置
2. 在点击OK时向父对话框发送一个自定义消息, 在父窗口中就可以根据消息执行你的一些数据库操作
aries00219
2011-02-12 · TA获得超过431个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:289万
展开全部
当我点击按钮之后,代码能够在void CTechnologyCenterDlg::OnMenuitemDevice()中续续运行。
这句是什么意思?代码继续运行?非模态对话框不关闭?还是什么?
不是很理解你要表达的意思

大概的提示是这样的:
如果要通过修改非模态对话框中的选项来改变主函数中的某些值的话,在非模态对话框中添加函数,点击确定按钮时,函数返回一个值,然后主函数调用这个函数,判断是否修改值。例如:
if(GUIDE->OnBtnOK() == 1)//OnBtnOK()为自定义的返回函数
{
a = GUIDE.a;
...
}
-----------------------------------------------------------------
GUIDE->OnBtnOK() 是调用非模态对话框的成员函数,跟主对话框没有任何关系
OnBtnOK()是自定义的函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangtk1982
2011-02-12 · TA获得超过3742个赞
知道大有可为答主
回答量:3206
采纳率:100%
帮助的人:1444万
展开全部
既然是非模态就不能这样用
你可以让这个非模态对话框发送自定义消息到主对话框继续执行嘛

或者加一个线程 设置等待事件 这个似乎大才效用了 还是上面那种方法吧

我怎么写例子呀? 代码那么多 又很分散 你看看怎么接受自定义消息 不难的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
日晞Pisces
2011-02-17 · 超过19用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:47.3万
展开全部
我觉得主要是问题是父窗口没有获取子窗口的句柄,不可以对他进行操作;

我也做过类似的项目,我是这样做的:
设置全局变量 extern bool IsHide;//当然2个要做2个变量了哦;在父窗口的按钮事件设置IsHide值
//为true 就隐藏,false为现实;
那么,怎么对子窗口进行设置呢
1.在子窗口添加Timer()
2.添加ontimer函数
{
if(IsHide) this->ShowWindow(SW_HIDE);
else this->ShowWindow(SW_SHOW);
}

oK 了。
楼主不要忘记给分哦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
邝筱詹绮云
2019-07-29 · TA获得超过4151个赞
知道大有可为答主
回答量:3111
采纳率:33%
帮助的人:178万
展开全部
当我点击按钮之后,代码能够在void
CTechnologyCenterDlg::OnMenuitemDevice()中续续运行。
这句是什么意思?代码继续运行?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式