更新 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 中 文件 菜单下 发送 子弹出菜单中 菜单项

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


好在 ViualFC 是开源项目,在发送求救邮件到 [email protected] 后无回应后,我们可以自行更新源代码,改善不足。

具体修改如下:

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

 

你可能感兴趣的:(vi)