brent's hut

对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

posted on 2006-07-17 11:03 brent 阅读(498) 评论(0)  编辑 收藏 引用 所属分类: wxWidgets


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理