更新 VisualFC 0.82 使其正确列举出所有菜单项 ID

更新 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 欢迎批评指正。

 

posted @ 2013-04-24 21:29  javawebsoa  Views(279)  Comments(0Edit  收藏  举报