如果我创建一个继承自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);
我得到以下结果:
这是我所希望的。但是,如果我从CSplitButton继承我的按钮,它添加了BS_SPLITBUTTON
样式,我得到以下结果:
不我希望得到的结果(我希望它看起来与CButton
完全相同)。在这种情况下,DrawItem
方法未被调用,因此系统会对BS_SPLITBUTTONS
进行不同的处理。
如何获得我想要的结果,一个具有自定义绘图的分割按钮行为的按钮?
答案 0 :(得分:1)
BS_OWNERDRAW 的says in MSDN:
创建一个所有者绘制的按钮。所有者窗口接收WM_DRAWITEM 按钮的视觉方面发生更改时的消息。 不要 将BS_OWNERDRAW样式与任何其他按钮样式结合使用。
(我的重点)。
如果你正在做自己的绘画,你必须自己所有。