更新 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。


如下圖  File 菜單下 Encoding 子彈出菜單中 菜單項


好在 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 歡迎批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章