VC获取对话框句柄问题
各位大虾:求教我用voidCTestDlg::OnButton1(){CTestA*NewForm=newCTestA;NewForm->Create(IDD_TestA...
各位大虾:
求教我用
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}
创建了一个非模态对话框,因为要判断窗口是否显示,需要用到 IsWindow ,然后通过 HWND 判断,请问如何获得新窗口的这个窗口句柄呢?小弟初学,十分感谢。 展开
求教我用
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}
创建了一个非模态对话框,因为要判断窗口是否显示,需要用到 IsWindow ,然后通过 HWND 判断,请问如何获得新窗口的这个窗口句柄呢?小弟初学,十分感谢。 展开
5个回答
展开全部
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();
}
然后
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();
}
展开全部
晕啊,你这个函数写的有问题。
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}
NewForm 这个指针的局部变量,当这个函数结束的时候就自动析构了,你肯定就找不到了。你把NewForm 定义成CTestDlg的成员变量就好了。
void CTestDlg::OnButton1()
{
CTestA *NewForm = new CTestA;
NewForm->Create(IDD_TestA_DIALOG,this);
NewForm->ShowWindow(SW_SHOW);
}
NewForm 这个指针的局部变量,当这个函数结束的时候就自动析构了,你肯定就找不到了。你把NewForm 定义成CTestDlg的成员变量就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
教你一个好方法:对话框也是继承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这个啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
mfc中的窗口对象都派生于CWnd类,获得窗口句柄用GetSafeHwnd() ,判断窗口是否存在用 IsWindow
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
NewForm->GetSafeHwnd()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询