更新 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.youkuaiyun.com/visualfc/
最近,正在学习 WTL GUI 编程,用了VisualFC 0.82, 感觉功能很实用。
但使用中发现,美中不足的是,VisualFC 0.82 不能列举出包含在弹出菜单中子弹出菜单中菜单项 ID。
如下图 File 菜单下 Encoding 子弹出菜单中 菜单项
好在 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 欢迎批评指正。