0

我有一个窗口,上面有几个控件,但只有编辑控件忽略了视觉样式。我试图追查原因,但到目前为止还没有运气。这是它的样子:

编辑控件具有旧的 3D 样式

正如所见,按钮和列表框控件具有正确的视觉风格。但是,编辑控件不会。几天前,我在更改了一堆与它无关的代码后应用了正确的样式,所以我知道这是可能

注意事项:

  • 我试过打电话InitCommonControlsInitCommonControlsEx没有成功。
  • 我将 WS_EX_CLIENTEDGE 应用于编辑控件,并且始终打开扩展样式,即使它之前工作也是如此。

我已经包含了尽可能多的代码来帮助追踪这个问题。

从我的 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% 没有想法。

4

1 回答 1

4

问题是我用来为编辑控件着色的 HBRUSH 莫名其妙地从未初始化过,并且是NULL. 因为我知道其他人对此有疑问,所以这是我的解决方案。

当 WM_CTLCOLOREDIT 到达消息队列时,问题就显现出来了。如果在该消息到达时返回了不正确/不正确的 HBRUSH,则编辑控件将恢复为旧的视觉样式。由于我的 HBRUSH 是NULL,所以旧的视觉风格被应用于编辑控件。

于 2013-02-24T02:57:26.843 回答