我们需要更改按钮/控件的颜色。我在资源文件中定义了控件。我们尝试了多种方法1)使用CMFCButton对象时出现定义模糊错误2)使用CBUTton CDC* pdcWindow 1 = m_Button.GetWindowDC();选择矩形1;获取客户端矩形(&rect1);pdcWindow 1-〉填充立体矩形(&rect1,(RGB(0,0,255)));
对按钮颜色没有影响,也没有错误。
到目前为止我所得到的投入:我们已经使用了ATL控件,而要给按钮上色,我们需要MFC函数,这里ATL和MFC库不能共存,因为它们具有相同的函数定义,所以会导致歧义错误。
没有MFC函数的情况下,是否有可能为ATL控件着色?唯一的解决方案是--https:jeffpar.github.io/kbarchive/kb/173/Q173974/??
1条答案
按热度按时间bxjv4tth1#
标准Windows GDI按钮的外观是根据按钮颜色消息自定义的:
在绘制按钮之前,系统会向按钮的父窗口发送一条
WM_CTLCOLORBTN
消息。此消息包含按钮设备上下文的句柄和子窗口的句柄。父窗口可以使用这些句柄来更改按钮的文本和背景颜色。但是,只有所有者绘制的按钮才会响应处理消息的父窗口。在ATL项目中,您可以在父窗口类中处理此通知消息,也可以使用更复杂的消息转发(反射)将此消息反射到按钮类。
无论哪种方式,你都不用真的绘制(
FillSolidRect
),你可以在消息处理程序中更新颜色,还要注意只有所有者描述的按钮才公开这个功能。另请参阅:Owner-drawn button, WM_CTLCOLORBTN and WM_DRAWITEM (clearing an HDC)