永发信息网

VC获取对话框句柄问题

答案:5  悬赏:60  手机版
解决时间 2021-11-21 00:28
  • 提问者网友:美人性情
  • 2021-11-20 15:17
VC获取对话框句柄问题
最佳答案
  • 五星知识达人网友:旧脸谱
  • 2021-11-20 15:30
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();
}
全部回答
  • 1楼网友:七十二街
  • 2021-11-20 18:59
NewForm->GetSafeHwnd()
  • 2楼网友:春色三分
  • 2021-11-20 18:51
mfc中的窗口对象都派生于CWnd类,获得窗口句柄用GetSafeHwnd() ,判断窗口是否存在用 IsWindow
  • 3楼网友:煞尾
  • 2021-11-20 17:39
教你一个好方法:对话框也是继承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
  • 4楼网友:人间朝暮
  • 2021-11-20 16:48
晕啊,你这个函数写的有问题。
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}
NewForm 这个指针的局部变量,当这个函数结束的时候就自动析构了,你肯定就找不到了。你把NewForm 定义成CTestDlg的成员变量就好了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯