如何为BS_SPLITBUTTON按钮覆盖DrawItem

时间:2014-07-03 07:20:48

标签: c++ mfc

如果我创建一个继承自CButton的新按钮类,指定BS_OWNERDRAW样式,并覆盖DrawItem方法,我可以控制按钮的呈现,如下所示:

void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
    CDC dc;
    dc.Attach(lpDrawItemStruct->hDC);
    RECT rect = lpDrawItemStruct->rcItem;
    dc.FillSolidRect(&rect, RGB(0, 0xFF, 0));
    dc.Detach();
}

m_button.Create(L"Foo", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, CRect(0, 150, 100, 200), this, IDC_FOO);

我得到以下结果:

enter image description here

这是我所希望的。但是,如果我从CSplitButton继承我的按钮,它添加了BS_SPLITBUTTON样式,我得到以下结果:

enter image description here

我希望得到的结果(我希望它看起来与CButton完全相同)。在这种情况下,DrawItem方法未被调用,因此系统会对BS_SPLITBUTTONS进行不同的处理。

如何获得我想要的结果,一个具有自定义绘图的分割按钮行为的按钮?

1 个答案:

答案 0 :(得分:1)

BS_OWNERDRAW says in MSDN

  

创建一个所有者绘制的按钮。所有者窗口接收WM_DRAWITEM   按钮的视觉方面发生更改时的消息。 不要   将BS_OWNERDRAW样式与任何其他按钮样式结合使用

(我的重点)。

如果你正在做自己的绘画,你必须自己所有