gpt4 book ai didi

c++ - ON_UPDATE_COMMAND_UI 上的资源冲突

转载 作者:行者123 更新时间:2023-11-28 08:26:36 32 4
gpt4 key购买 nike

我有一个 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 类具有 ID 为 DLL_MENU_RESOURCE 的菜单项资源。

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

每当EXE的成员exe_flag变为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 , 但没有从那里得到太多有用的评论。

最佳答案

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

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

关于c++ - ON_UPDATE_COMMAND_UI 上的资源冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877958/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com