带有子控件的 Win32 自定义控件

Posted

技术标签:

【中文标题】带有子控件的 Win32 自定义控件【英文标题】:Win32 custom control with child controls 【发布时间】:2012-07-27 13:32:35 【问题描述】:

我创建了一个包含子控件的自定义容器控件(所有者绘制等)。 不幸的是,这些子控件永远不会更新(它们不会收到 WM_PAINT)

您知道问题出在哪里吗? 创建窗口

    hwnd = CreateWindowEx(
             WS_EX_CONTROLPARENT  , 
             _T("PopupControl"),
             _T("Popup Control"),
              WS_OVERLAPPED | WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
             100,100,420,220  ,
             NULL,
             NULL, GetModuleHandle(0), NULL
           );

创建子控件

CreateWindowEx(0, L"button", TEXT("Type here"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
200,15,100,20, 
hwnd, NULL, GetModuleHandle(0), NULL);

感谢和问候,

【问题讨论】:

显示容器和子元素的样式、styleEx 和类样式。 这不应该编译,GetModuleHandle() 返回错误的句柄类型。不要乱用 STRICT。 你建议用什么来代替 GetModuleHandle() ? @AP:该参数是可选的,你可以在那里传递NULL。 【参考方案1】:

WS_CLIPCHILDREN|WS_CLIPSIBLINGS 样式添加到容器控件。

【讨论】:

感谢您的建议,不幸的是问题仍然存在。 您创建“按钮”?你为什么认为,他们没有收到 WM_PAINT?你重写了类过程??? 使用 Spy++ 我可以看到他们收到了消息,但没有收到 WM_PAINT。 其实有很多可能的原因。例如,您可以在 WM_PAINT 之前验证它们......没有完整的代码不能说更多

以上是关于带有子控件的 Win32 自定义控件的主要内容,如果未能解决你的问题,请参考以下文章

自定义编辑控件win32

带有自定义控件的 MPMoviePlayerController

duilib开发基础:创建自定义控件的过程

自定义绘制 CProgressBarCtrl win32

如何在 MFC 自定义控件类中挂钩控件关闭

转发控件的所有属性