首页 > 解决方案 > 如何在主窗口外创建窗口子窗口

问题描述

我已经学会了如何在父窗口中创建一个子窗口,但我想在程序的主窗口之外创建一个窗口。如果我没记错的话,主窗口之外的窗口仍然是子窗口,对吧?它有自己的需要注册的类吗?我试着制作另一个窗口,但改变了参数。我得到了一些有趣的结果,但不是一个单独的窗口。

标签: winapichildwindow

解决方案


  1. 只需使用WS_POPUP以下代码中的样式创建它。
  2. 不,子窗口不能在父窗口之外,WS_POPUP 窗口可以(此样式与 WS_CHILD 样式不兼容)。
  3. 同时它会有指向父节点的指针,并在被询问时返回它。
  4. 是的,它应该有自己的要注册的类。

编码:

WNDCLASS wc;
  wc.style = CS_DBLCLKS;
  wc.lpfnWndProc = (WNDPROC) WindowProc;
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hInstance = hInstance;
  wc.hIcon = ::LoadIcon(hInstance, IDI_APPLICATION);
  wc.hCursor = ::LoadCursor(hInstance, IDC_ARROW);
  wc.hbrBackground = 0;
  wc.lpszMenuName = 0;
  wc.lpszClassName = L"DebugConsoleWindowClass";
  if (::RegisterClass(&wc) == NULL) return false;

::CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW,
  L"DebugConsoleWindowClass",
  L"DebugConsole",
  WS_POPUP | WS_OVERLAPPED | WS_CAPTION,
  0, 0, 400, 200,
  hParentWnd,
  (HMENU)NULL,
  hInstance,
  (LPVOID)this);

(所有名称和变量都是虚构的)hParentWndhInstance


推荐阅读