2013-02-23 20 views
0

我一张有几个控件的窗口,但只有编辑控件是忽略了视觉样式。我试图找出原因,但迄今为止没有运气。这里是什么样子:为什么我的编辑控件忽略应用的视觉样式?

Edit control has old 3D style

可以看出,按钮和列表框控件具有适当的视觉风格。编辑控件,但是,不。我有适当的风格改变一串代码无关之后应用一次前几天,所以我知道这是可能的。

注意事项:

  • 我试图调用InitCommonControlsInitCommonControlsEx没有成功。
  • 我已经应用到编辑控制的WS_EX_CLIENTEDGE,并有总是有这样的扩展样式开启,即使当它被优先作业。

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

从我的TextBox类(它继承组件):

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消息有什么问题要怎样做呢?或处理字体的问题? 还是别的?因为在这一点上我完全没有想法。

+0

尝试删除包含在你的代码WS_EX_CLIENTEDGE行,看看是否有帮助。 – mfc 2013-02-24 02:13:01

+0

@mfc:我这样做了,它所做的全部都是删除边框。 WS_EX_STATICEDGE与我正在寻找的东西有点接近,但我实际上最终自己解决了这个问题。 – jvstech 2013-02-24 02:52:53

+0

如果问题只有无边框,则可以通过将WS_BORDER添加到WindowStyles来添加它。 – mfc 2013-02-24 03:56:58

回答

3

的问题是,我用着色编辑控件中的HBRUSH是,不知何故,莫名其妙地从来没有初始化,并为NULL。由于我知道其他人有这个问题,这里是我的解决方案。

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

+0

我也一样,返回FALSE编辑,不应该着色,而是我应该已经将控制返回到DefWindowProc。谢谢,哥们,救了我一段时间;) – Kitet 2015-06-20 11:12:49