我有一个窗口,上面有几个控件,但只有编辑控件忽略了视觉样式。我试图追查原因但到目前为止没有运气。这是它的样子:
如图所示,按钮和列表框控件具有适当的视觉样式。但是,编辑控件不会。几天前,在更改了一堆与之无关的代码之后,我已经使用了一次的正确样式,所以我知道这是可能的。
注意事项:
InitCommonControls
和InitCommonControlsEx
但没有成功。我已尽可能多地提供代码以帮助追踪此问题。
从我的TextBox类(继承Component):
protected:
virtual void OnRegistering(CreationParameters& createParams)
{
// this is passed in as the lpClassName parameter in
// CreateWindowEx() and the lpszClassName parameter in WNDCLASSEX
createParams.BaseClassName = WC_EDIT;
// passed as the dwStyle parameter in CreateWindowEx()
createParams.WindowStyles |= ES_AUTOHSCROLL | ES_AUTOVSCROLL;
// passed as the dwExStyle parameter in CreateWindowEx()
createParams.WindowExStyles |= WS_EX_CLIENTEDGE;
}
处理WM_CTLCOLOREDIT或WM_ERASEBKGND消息的问题是否与此有关?还是处理字体的问题? 或其他什么?因为此时我100%没有想法。
答案 0 :(得分:3)
问题在于我用来为编辑控件着色的HBRUSH莫名其妙地从未初始化并且是NULL
。由于我知道其他人对此有疑问,因此这是我的解决方案。
当WM_CTLCOLOREDIT到达消息队列时,问题就出现了。 如果在该消息到达时返回了不正确/不正确的HBRUSH,则编辑控件将恢复为旧的视觉样式。由于我的HBRUSH为NULL
,旧的视觉样式应用于编辑控件