有没有办法知道父窗口的类型(基于框架或对话框)?

is there a way to know the type of parent window (frame or dialog-based)?

本文关键字:于框架 框架 对话框 类型 窗口 有没有      更新时间:2023-10-16

我想知道父窗口类型是框架窗口还是基于对话框的窗口。

众所周知,框架窗口可以通过CreateWindow函数创建,基于对话框的窗口可以通过CreateDialog函数创建。
另外,我尝试使用GetClassName函数,但它给了我一个未知值"例如:#32770"。

WCHAR clsName[50];
GetClassName(hWnd, clsName, 50);
MessageBox(hWnd, clsName, L"", MB_OK);

如果是基于对话框的窗口,则给我#32770,但在框架窗口的情况下,给我项目名称,而不是框架窗口的类名。

是否可以知道父窗口的类型以及如何知道?

您可以通过 GetWindowLong 获取 CreateWindow 用于创建窗口的窗口样式属性,然后检查样式。

即像这样:

::DWORD style = static_cast<DWORD>( ::GetWindowLong(hWnd, GWL_STYLE) );
if( WS_OVERLAPPEDWINDOW == (style & WS_OVERLAPPEDWINDOW) ) {
std::cout<< "Frame" << std::endl;
} else if( WS_DLGFRAME == (style & WS_DLGFRAME) ) {
std::cout<< "Dialog" << std::endl;
}

对话框的类名为 #32770。因此,您可以使用它来区分对话框和非对话框的窗口。