对wxWidgets中wxMenuItem的修改

对wxWidgets中wxMenuItem的修改

问题:
用DialogBlocks设计了一个菜单,菜单中的图标大小为16X16,并在DialogBlocks自动生成的代码CreateControls()函数的后面设置所有菜单项的颜色为红色。运行后效果如图。
wxMenuOld.jpg
两个菜单项:Page Setup和Exit不但没有显示红色,而且与其它菜单项无法对齐。

原因:
查看了一下源代码,发现menu item的ownerdraw属性是在wxMenu::Append()时决定的。在调用wxMenu::Append()之后的代码中对wxMenuItem的修改不会影响到实际物理菜单的ownerdraw属性。

解决:
把所有非separator的所有菜单设置为owndraw。
修改wxWidgets目录下的 \src\msw\menu.cpp文件:
bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
{
#if wxUSE_ACCEL
    UpdateAccel(pItem);
#endif // wxUSE_ACCEL

 pItem->SetOwnerDrawn(!pItem->IsSeparator()); //Brent
 ...
}

效果:
mywxMenu.jpg

你可能感兴趣的:(对wxWidgets中wxMenuItem的修改)