我是C++以及Windows编程的新手.
我用msdn CreateWindow()
函数创建了一个窗口
哪个工作正常..现在我想创建一个子窗口...父窗口应该控制子窗口...
任何帮助示例代码有关此.
提前致谢
现在已经是 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 会向程序集添加一个新成员并启动一个线程,该线程将为子窗口提供服务并在初始化时执行上述代码。
粗略地说,在您希望创建子项的父项的处理程序中,您调用CreateWindow
,传递父项的窗口作为hwndParent
- 可能,您还希望在子项上设置某些样式,例如WS_CHILD
.然后,您与子窗口的交互取决于您创建的窗口的类型.某些窗口(如按钮)设计用作子窗口,因此它们会发送大量通知消息,因此您可以设置父级以侦听这些通知消息.
如果您可以获得一份副本,我强烈建议您通读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)。这只是基本的管道,真的..
当你说“控制子窗口......”时,你能更具体一点吗?
归档时间: |
|
查看次数: |
14880 次 |
最近记录: |