如何判断一个对话框窗口是否已打开?

时间:2021-02-11 23:48:22
对话框类为CTest,ID为IDD_TEST,我想判断目前该对话框是否打开。
无论用
if(FindWindow("CTest",NULL)!=NULL)
还是
if(GetDlgItem(IDD_TEST)!=NULL)
都得不到正确结果。
跟踪调试,在调试窗口里,这两个函数的返回值都是 CWnd =???
请大虾解释一下

11 个解决方案

#1


if(FindWindow(NULL,"CTest")!=NULL)

#2


应该是
if(!FindWindow("CTest",NULL)
{
}

#3


倒,都不对。
我把"CTest"当作窗口标题了。
FindWindow("#32770", 窗口标题);

#4


FindWindow(....)可以的,详细看msdn

#5


to  yu_hl(卖柴火的小男孩):
FindWindow("#32770", 窗口标题);
这个"#32770", 是怎么来的?

#6


用spy++看看dialog

#7


FindWindow("#32770", 窗口标题);
这个"#32770", 是怎么来的?
"#32770"就是对话框ID
是用数字表示的对话框ID


#8


第一个参数不是类名吗?难道我用类名就不对吗?

#9


单实例的问题.若你不想用FindWindow.可以在DLG初始化时用

#define EVENT_NAME ""CTest12345""
HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,EVNET_NAME)

if(hEvent == NULL && ERROR_ALREADY_EXISTS == GetLastError())
{
hEvent = OpenEvent(EVENT_ALL_ACCESS,FALSE,EVNET_NAME);
if(hEvnet == NULL)
{
//error handler
}

}
在DLG关闭时用

CloseHandle(hEvent);
hEvent = NULL

这样如果要检测DLG是否创建.

/*
*if return TRUE,至少有一个DLG已经打开了
*/
BOOL ISDLGLoaded()
{

HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,EVNET_NAME)

if(hEvent != NULL)
{
CloseEvent(hEvent);
}
 return (hEvent==NULL);
}

}

#10


今天来收帐,爽

#11


怎么,钱多了?
谢谢
看来是问题搞定了

#1


if(FindWindow(NULL,"CTest")!=NULL)

#2


应该是
if(!FindWindow("CTest",NULL)
{
}

#3


倒,都不对。
我把"CTest"当作窗口标题了。
FindWindow("#32770", 窗口标题);

#4


FindWindow(....)可以的,详细看msdn

#5


to  yu_hl(卖柴火的小男孩):
FindWindow("#32770", 窗口标题);
这个"#32770", 是怎么来的?

#6


用spy++看看dialog

#7


FindWindow("#32770", 窗口标题);
这个"#32770", 是怎么来的?
"#32770"就是对话框ID
是用数字表示的对话框ID


#8


第一个参数不是类名吗?难道我用类名就不对吗?

#9


单实例的问题.若你不想用FindWindow.可以在DLG初始化时用

#define EVENT_NAME ""CTest12345""
HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,EVNET_NAME)

if(hEvent == NULL && ERROR_ALREADY_EXISTS == GetLastError())
{
hEvent = OpenEvent(EVENT_ALL_ACCESS,FALSE,EVNET_NAME);
if(hEvnet == NULL)
{
//error handler
}

}
在DLG关闭时用

CloseHandle(hEvent);
hEvent = NULL

这样如果要检测DLG是否创建.

/*
*if return TRUE,至少有一个DLG已经打开了
*/
BOOL ISDLGLoaded()
{

HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,EVNET_NAME)

if(hEvent != NULL)
{
CloseEvent(hEvent);
}
 return (hEvent==NULL);
}

}

#10


今天来收帐,爽

#11


怎么,钱多了?
谢谢
看来是问题搞定了