更新 VisualFC 0.82 使其正确列举出所有菜单项 ID
VisualFC 一个非常不错的 WTL 编程辅助工具,能大大降低你的一些重复劳动,提高效率。
WTL ClassWizard: Message Notify Command DialogResize DDX/DDV UpdateUI DialogFont
WTL AppWizard: Generic AppWizard for WTL Project (for VS60/2003/2005/2008)
WinxGUI ClassWizard: Event Notify Command DialogResize DDX/DDV UpdateUI DialogFont
大家可以访问 http://code.google.com/p/visualfc/
How to get help?
visualfc bolg : http://blog.csdn.net/visualfc/
最近,正在学习 WTL GUI 编程,用了VisualFC 0.82, 感觉功能很实用。
但使用中发现,美中不足的是,VisualFC 0.82 不能列举出包含在弹出菜单中子弹出菜单中菜单项 ID。
如下图 Word 中 文件 菜单下 发送 子弹出菜单中 菜单项
好在 ViualFC 是开源项目,在发送求救邮件到 visualfc@gmail.com 后无回应后,我们可以自行更新源代码,改善不足。
具体修改如下:
1, ClassWizard\VFC_Core\resources\ResMenu.cpp ResMenu.h 增加如下函数
void CResMenu::ListMenuItem( CAtlArray< ResMenuItem > & arrayMenuItem ) { for( size_t i = 0; i < m_vItems.GetCount(); ++i ) { ResMenuItem newitem = m_vItems.GetAt(i); if ( ! newitem.m_ID.IsEmpty() ) { arrayMenuItem.Add( newitem ); } } for( size_t j = 0; j < m_SubMenus.GetCount(); ++j ) { CResMenu subMenu = m_SubMenus.GetAt(j); subMenu.ListMenuItem( arrayMenuItem ); } }
2,修改 ClassWizard\VFC_Core\codeparser.h 中的 class codeparser
template <typename FUNC> bool EnumResMenuItem(const CResMenu * menu, FUNC & Process) { CResMenu * pMenu = ( CResMenu * ) menu; CAtlArray< ResMenuItem > arrayMenuItem; pMenu->ListMenuItem( arrayMenuItem ); for( size_t i = 0; i < arrayMenuItem.GetCount(); ++i ) { Process( & arrayMenuItem.GetAt(i) ); } return true; }
然后重新编译(我用的是 VC2003 + WTL81 ), 用得到的新 VFC_Core.dll 替换旧的。
好了,工作正常。
我把更新后的 VisualFC 上传到 https://github.com/ywx/VisualFC 欢迎批评指正。