永发信息网

VC获取对话框句柄问题

答案:5  悬赏:60  手机版
解决时间 2021-11-21 00:28
VC获取对话框句柄问题
最佳答案
CTestDlg 类中 声明 CTestA *NewForm;
然后
void CTestDlg::OnButton1()
{
NewForm=new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}

然后
void CTestDlg::OnButton2()
{
if(::IsWindow(NewForm->GetSafeHwnd()))
{
if(::IsWindowVisible(NewForm->GetSafeHwnd()))
{
AfxMessageBox("窗体存在");
}
else
{
AfxMessageBox("窗体不存在");
}
}
}

最后别忘了在新窗口中重载
void CTestADlg::PostNcDestroy()
{
delete this;
CDialog::PostNcDestroy();
}
全部回答
NewForm->GetSafeHwnd()
mfc中的窗口对象都派生于CWnd类,获得窗口句柄用GetSafeHwnd() ,判断窗口是否存在用 IsWindow
教你一个好方法:对话框也是继承CWnd类的,所以他也有个成员变量m_hWnd,所以选取新窗口的句柄只需要打个.调用(如果是指针就->)
好好学吧!追问大哥,非常感谢,我在类的 Public 中 添加了 HWND hWnd;然后
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
hWnd=NewForm->m_hWnd; //添加了此处
}
如上,建立了对话框后得到了 hWnd ,可新对话框关闭后这个 hWnd 值还是存在,如何解决?我不希望用的全局变量,谢谢指导。追答不懂你要用个变量hWnd=NewForm->m_hWnd; 保存它做什么?既然你不希望关闭对话框后这个 hWnd 值还是存在,那你直接用的时候就用NewForm->m_hWnd这个啊。追问大哥,我想用这个 hWnd 使用 IsWindow 判断新窗口是否存在,因为窗口 A 最小化了,如果窗口 B 存在点击托盘图标就没反应,如果窗口 B不存在点托盘图标就显示窗口 A
晕啊,你这个函数写的有问题。
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}
NewForm 这个指针的局部变量,当这个函数结束的时候就自动析构了,你肯定就找不到了。你把NewForm 定义成CTestDlg的成员变量就好了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
古典油画里常用的“酱油色”是怎么调出来的?
青岛浪淘沙首席水岸还有吗??是不是拆迁了?
按规律填数9,18,27,36
解释低档劣质商品的收入效应
据说白醋的作用很多 请问它都能怎么用,都有
小学语文五年级上册词语大全
2018年重庆市一年消耗大米多少吨?
中国的法律,有人持刀入室行凶,我为保护家人
网上陌生女孩让我逛街,买衣服让我付钱,怎么
如何加盟易酒批区域代理
我想知道为什么各项配置不如国产的合资车价钱
我给别人买十条烟可以随便送吗
德众金融怎么样
44+()一24=58
TM的成员介绍
推荐资讯
gt神双子圣衣和万代素体通用么
如何用纯牛奶做奶油?
近亲第一代到底是谁
关于澳洲乳牛优酪多的问题
五个月的猫拉稀很臭,5个月左右的猫咪反复拉
如何在群里@所有人
为什么一瓶550ml呃康师傅矿物质水装进600ml的
请问460的锡柴好还是潍柴好
SMT里,红胶工艺中0603/IC原件推力要求是
迈腾1.8T领先版裸车上路分别是多少钱啊,苏
有谁知道这种钢材叫什么,
3658的慧赚宝怎么样啊?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?