ON_UPDATE_COMMAND_UI上的资源冲突

时间:2010-10-07 00:50:46

标签: c++ mfc

我有一个EXE类,其中包含ID为EXE_BUTTON_RESOURCE

的按钮资源
ON_UPDATE_COMMAND_UI(EXE_BUTTON_RESOURCE, OnUpdateExeButtonResource)

void EXE::OnUpdateExeButtonResource(CCmdUI* pCmdUI)
{
        pCmdUI->Enable(exe_flag);

}

此EXE应用程序将加载另一个DLL类。

DLL类有一个标识为DLL_MENU_RESOURCE的菜单项资源。

不幸的是,EXE_BUTTON_RESOURCEDLL_MENU_RESOURCE具有相同的资源ID。为了避免它们,冲突ID非常困难,因为它们是两个独立的项目。

每当exe_flag(EXE的成员)变为false时,这也会影响DLL中的菜单。单击DLL_MENU_RESOURCE菜单将完全没有效果。

如何避免这个陷阱?对他们的resource.h文件进行手动检查不是我的选择,因为它们是2个独立的项目,由2个独立的团队管理。

有一次,我认为这可能是资源冲突的问题。因此,在显示右键菜单的DLL代码中,我有以下代码加载DLL资源,并在完成后还原EXE资源。

void DLL::OnContextMenu(CWnd* pWnd, CPoint point) 
{
    RestoreDLLState ext;
        ...
}

RestoreDLLState将加载全局DLL资源,并在完成后加载其原始资源。

RestoreDLLState::RestoreDLLState()
{
    m_hInstOld = AfxGetResourceHandle();
    AfxSetResourceHandle(g_hDLLResource);
}

RestoreDLLState::~RestoreDLLState()
{
    AfxSetResourceHandle(m_hInstOld);
}

这不起作用。我的猜测是,启用/禁用具有特定ID的资源的操作将从EXE传播到DLL,无论当前正在加载什么是默认资源。

说实话,我已将相似的问题发布到Code Projectmicrosoft.public.vc.mfc,但没有从那里得到很多有用的评论。

1 个答案:

答案 0 :(得分:1)

检查一下这个很酷的工具:
http://www.codeproject.com/KB/macros/resorg.aspx-

另一个有用的帖子:
MFC resource.h command/message IDs