在使用C++编程时,如何在win32中创建子窗口?

1 c++ windows winapi

我是C++以及Windows编程的新手.

我用msdn CreateWindow()函数创建了一个窗口

哪个工作正常..现在我想创建一个子窗口...父窗口应该控制子窗口...

任何帮助示例代码有关此.

提前致谢

Goo*_*ies 6

现在已经是 2018 年了..对此做了一些复古工作,我发现SetParent()很方便,以确保子窗口保留在父窗口的客户区域内。.在 SetParent() 之前,子窗口不需要注册为孩子。在 CreateWindowEx 中,父句柄一开始可以为 NULL。样式 WS_CHILD 不是必需的,但WS_CLIPSIBLINGS很方便,它可以避免闪烁。

这是我创建子窗口的代码:

    HWND hwnd = CreateWindowExA(0, "WindowOfDLL", ctitle, WS_SIZEBOX | WS_CLIPSIBLINGS, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, hMenu, inj_hModule, NULL);
    SetParent(hwnd, hwndparent);
    ShowWindow(hwnd, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)

我在 Win10 中还没有看到线程问题。下面的每个子窗口都是在管理程序集的 DLL 中创建的。创建子窗口时,DLL 会向程序集添加一个新成员并启动一个线程,该线程将为子窗口提供服务并在初始化时执行上述代码。

具有 WS_CLIPCHILDREN 的父窗口


180*_*ION 5

粗略地说,在您希望创建子项的父项的处理程序中,您调用CreateWindow,传递父项的窗口作为hwndParent- 可能,您还希望在子项上设置某些样式,例如WS_CHILD.然后,您与子窗口的交互取决于您创建的窗口的类型.某些窗口(如按钮)设计用作子窗口,因此它们会发送大量通知消息,因此您可以设置父级以侦听这些通知消息.


Rob*_*obS 5

如果您可以获得一份副本,我强烈建议您通读Charles Petzold 的“Programming Windows”。

否则,要回答您的问题,请在创建子窗口(使用 CreateWindow 或CreateWindowEx)时将父窗口的句柄作为父窗口传递:

HWND CreateWindowEx
(      
    DWORD dwExStyle,
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,      /// pass the parent window handle here
    HMENU hMenu,
    HINSTANCE hInstance,
    LPVOID lpParam
);
Run Code Online (Sandbox Code Playgroud)

..正如 1800 Info 也指出的,也许还设置 WS_CHILD 样式(更多关于Window Style s here)。这只是基本的管道,真的..

当你说“控制子窗口......”时,你能更具体一点吗?