1

假设我HWND在 win32 c++ 编程中有一个窗口。如何以编程方式创建具有完全相同样式的另一个窗口?我知道我必须使用CreateWindowEx,但我如何找到现有窗口的所有参数传递给CreateWindowEx

4

3 回答 3

6

GetWindowInfo应该从原始窗口中检索您需要的内容。它返回一个带有以下内容的WINDOWINFO结构:

typedef struct tagWINDOWINFO {
  DWORD cbSize;
  RECT  rcWindow;
  RECT  rcClient;
  DWORD dwStyle;
  DWORD dwExStyle;
  DWORD dwWindowStatus;
  UINT  cxWindowBorders;
  UINT  cyWindowBorders;
  ATOM  atomWindowType;
  WORD  wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
于 2013-08-09T21:16:25.507 回答
3
DWORD existingStyle = (DWORD)GetWindowLongPtr(hWnd, GWL_STYLE);
DWORD existingExStyle = (DWORD)GetWindowLongPtr(hWnd, GWL_EXSTYLE);

这将获取现有样式(dwStyle参数 to CreateWindowEx)和扩展样式(dwExStyle参数CreateWindowEx)。

另请注意,您几乎不应该GetWindowLong直接调用。尽管在这种情况下它是无害的,但这不是一个好习惯,因为它不适用于 64 位 Windows 上的指针。GetWindowLongPtr被记录为您应该调用的内容。

于 2013-08-09T21:14:20.017 回答
2

用于GetWindowLong()查询 GWL_STYLE 和 GWL_EXSTYLE 标志。

于 2013-08-09T21:15:28.373 回答