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

时间:2019-08-15 12:53:16

标签: c++ winapi

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

我们知道框架窗口可以通过CreateWindow函数创建,而基于对话框的窗口可以通过CreateDialog函数创建。
另外,我尝试使用GetClassName函数,但它给了我一个未知值“ ex:#32770”。

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以获得window style属性,该属性由CreateWindow用于在GetWindowLong上创建窗口,然后检查样式。

即像这样:

::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;
}

答案 1 :(得分:1)

一个dialog box has class name #32770。因此,您可以使用它来区分对话框和不是对话框的窗口。