如何在两个工程中使用同一个对话框?

Pixie 2002-04-16 03:23:34
在一个Workspace中有三个project.
其中两个是可执行程序,另一个是静态连接库。
这两个可执行程序有一个相同的对话框,我想把这个对话框的实现写在那个静态连接库中,但问题是这个对话框的资源放哪儿??我已经为它头痛N长时间了。
请各位大虾不吝指教。谢谢!
...全文
129 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mousubin 2002-05-17
  • 打赏
  • 举报
回复
放在DLL里面,关于资源ID会重复的问题,可以按以下解决:
例如你的DLL库叫MYDLL.DLL
在Dllmain文件里面加个如下样子的类
CExtDllStatus
{
HINSTANCE hOldInstance;
public:
CExtDllStatus()
{
hOldInstance=AfxSetResourceHandle(MYDLLDLL);
}
~CExtDllStatus()
{
AfxSetResourceHandle(hOldInstance);
}
}
然后在DoModal或Create的时候在函数开始加上
CExtDllStatus status; 即可
Q_O 2002-05-17
  • 打赏
  • 举报
回复
写成一个类呀包起来
蒋晟 2002-05-16
  • 打赏
  • 举报
回复
据说可以在内存里面建立对话框模版的……没有试过
zf925 2002-05-16
  • 打赏
  • 举报
回复
烤过去~!!!!!!!!
烤过去~!!!!!!!!
烤过去~!!!!!!!!
akiy 2002-05-16
  • 打赏
  • 举报
回复
是不是可以把*.rc打开找到描述对话框的一部分 复制了它
是不是还可以在把对话定义成一个类
然后把类加到新工程中
JeasonZhao 2002-05-16
  • 打赏
  • 举报
回复
简单啊
在工程里面的class浏览中点击对话框类,然后选中快捷菜单中的add to gallary
在新工程中add to project -> Component and control
找到了吗?呵呵
Pixie 2002-05-16
  • 打赏
  • 举报
回复
我找到一个方法解决这个问题,但是不知道好不好。请各位指正。
假设工程A, B要共用部分资源。

-创建一个资源,resourc_C.rc 和resource_C.h (建议头文件不是resource.h, 可能会和VC其他工程中的混淆)。

-打开工程A的资源,在ResourceView中右击资源->resource includes…

-在Compile-time directives:中加入 #include “resource_C.rc”

-project->settings, 选中工程A, ->resources, 在Additional resource include directories中加入resourc_C.rc和resource_C.h 所在的目录。(至于resourc_C.rc 和resource_C.h, 爱放哪儿就放哪儿。)

-在工程B中做同样的事情。



这样A,B工程就可以共用resourc_C中的资源了。


但目前还存在些问题:
-当Resource_C更新是,工程A和B不会自动发现,需要手动删除A, B工程生成的res文件,这样在Resource_C中的更改才有用。

-resource_C.h的ID数值问题,要手工控制这些ID和工程A,B中的不产生冲突。

谢谢大家。
蒋晟 2002-04-17
  • 打赏
  • 举报
回复
下一个ID的编号
www.codeguru.com上面的addin/macro区有个宏可以改资源ID的,去看看
Pixie 2002-04-17
  • 打赏
  • 举报
回复
我现在做的是单语言版本,但却要提供两个可执行文件。
我的两个程序都有相同的对话框,因此我不想在不同的地方维护相同的内容。
是不是一个资源可以Include另一个资源,
有什么好的办法解决ID冲突问题。为每一个模块分配ID区域是一个好办法,但是这能不能自动完成。
在VC生成的Resource.h文件中有这样的内容,

#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 131
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 101
#endif

请问是什么含义?
蒋晟 2002-04-17
  • 打赏
  • 举报
回复
〉当动态链接库里的对话框使用和主程序(.exe)文件中同样的对话框 ID 时,会出现大问题!会装入主程序中的对话框资源!
微软的建议是为每个模块分配一定的ID区域
>只为资源件一个连接库不划算
要是要开发支持多种语言的程序,建议使用资源动态连接库

doghead 2002-04-16
  • 打赏
  • 举报
回复
你用静态连接库不能使你的可执行程序大小减少,只为资源件一个连接库不划算,也不可行,连接库是功能模块的单元。
doghead 2002-04-16
  • 打赏
  • 举报
回复
做两份,用复制,粘贴,保持同时更新最好。
项目是源程序资源的最大单位,不要共享,
除非是项目的输出文件
dou_ya 2002-04-16
  • 打赏
  • 举报
回复
放在动态连接库里!

但是有一个技术问题!!当动态链接库里的对话框使用和主程序(.exe)文件中同样的对话框 ID 时,会出现大问题!会装入主程序中的对话框资源!

哪位高手能解决此问题??
load 2002-04-16
  • 打赏
  • 举报
回复
放在DLL里

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧