如何在DLL中创建窗口(不是弹出对话框)

zyx040404 2011-01-13 02:33:17
希望在DLL中创建一个窗口,做为子窗口供外部使用
并且还可以继承该窗口
就象windows的CDialog类
...全文
1298 49 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyx040404 2011-04-19
  • 打赏
  • 举报
回复
我的数据库封装代码基本上写完了,使用的是MS.NET 2003
有兴趣的可以去看看
http://topic.csdn.net/u/20110419/20/11d0ae7e-5e57-4df6-9e99-3373a7be1610.html?seed=81720230&r=72863357#r_72863357

我将来也会把base window的代码贡献出来,供大家参考
zyx040404 2011-04-08
  • 打赏
  • 举报
回复
因为这几天我在写一个数据库的软件,所以就写了一个base window去操作数据(add,delete,update等),现在没有用DLL,暂时算是实现了我部分功能

同时也写了一个database gateway去封装数据库,我几年前用delhpi写过一个,在我资源里有下载(有一些bug)

等我写好了,我会把代码放到网上
zyx040404 2011-04-07
  • 打赏
  • 举报
回复
VC是没有这个功能,我只好绕道实现了
我目前在资源文件创建了一个dialog,里面有ADD,DELETE,UPDATE等按钮
然后再创建了一些继承的类,但是没有窗口,enum指向这个基类的dialog
也能用
将来再想办法写成DLL,还有看能不能在继承的窗口中增加新的控件
枫桦沐阳 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 zyx040404 的回复:]
或者VC能不能实现一个相对简单的要求,不使用DLL
在资源文件中创建一个dialog叫dlgMy,增加几个控件
能不能再创建一个dialog,并且继承dlgMy?
这在delphi或者PB中很容易实现
[/Quote]
继承是可以的,跟继承其他的CLASS一样,但是有什么用处么?
你继承了还是得往原来的dialog里边加控件。
虽然你继承了它,但MFC是不可能帮你创建一个可见资源的COPY的。
继承了反而多了个麻烦。

如果你有些部分是窗口共通的,我建议你还是写一个继承一个CDialog的类,但是不关联资源。
所有共通的控件都在初始化的时候,动态创建,手动添加消息。
但是你想继承的东西在资源里能看见,MFC的IDE环境没提供这个功能吧?至少是我觉得不能。
枫桦沐阳 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 zyx040404 的回复:]
VC是没有这个功能,我只好绕道实现了
我目前在资源文件创建了一个dialog,里面有ADD,DELETE,UPDATE等按钮
然后再创建了一些继承的类,但是没有窗口,enum指向这个基类的dialog
也能用
将来再想办法写成DLL,还有看能不能在继承的窗口中增加新的控件
[/Quote]
呵呵,那看你自己了。
这样继承的好处就是完全一样的画面不用再做一个Dialog的resource了。
如果你觉得正好对你有用,那就先这样吧。

在继承的窗口中增加新控件的话,我觉得也只能动态创建了。
如果你实现了在资源里边添加的话,一定告诉我。
zyx040404 2011-04-05
  • 打赏
  • 举报
回复
或者VC能不能实现一个相对简单的要求,不使用DLL
在资源文件中创建一个dialog叫dlgMy,增加几个控件
能不能再创建一个dialog,并且继承dlgMy?
这在delphi或者PB中很容易实现
枫桦沐阳 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 zyx040404 的回复:]
ynb119
谢谢
[/Quote]

实在对不起,要令你失望了,没太看仔细,刚领会到这句的含义"在调用端的资源文件中可以看到此窗口"
这个有难度。真的能实现么? 我怀疑VC实现不了。
MFC扩展DLL对于其他的功能都能实现。
zyx040404 2011-03-29
  • 打赏
  • 举报
回复
ynb119
谢谢
枫桦沐阳 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 zyx040404 的回复:]
ynb119
能不能给个源代码看看?
我的邮箱zyx040404@163.com
谢谢
[/Quote]
这个比较麻烦,等我有时间给你整理一个
zyx040404 2011-03-26
  • 打赏
  • 举报
回复
ynb119
能不能给个源代码看看?
我的邮箱zyx040404@163.com
谢谢
枫桦沐阳 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 zyx040404 的回复:]
代码是否能实现我想要的功能?
1. 在DLL中创建一个窗口
2. 外部可以调用该DLL窗口,比如显示此窗口
3. 外部可以继承该DLL窗口,比如在此窗口上再增加其他控件,在调用端的资源文件中可以看到此窗口
4. 操作就象CDialog一样
[/Quote]

可以。
1、2 MFC扩展dll的职能所在。要完成后续功能,你的窗口类必须继承CDialog
3.把你exe里边的窗口直接改成继承你自己的MFC扩展dll的类就行了。
4.当然了。你只是加了一层继承关系,他还是CDialog
zyx040404 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 ynb119 的回复:]
引用 36 楼 zyx040404 的回复:
你有代码看看吗?


代码是有,但是发到网上很麻烦,因为我上网机器和开发机器分开的。
网上就很多关于MFC扩展Dll的资料,动手查一下。
[/Quote]
代码是否能实现我想要的功能?
1. 在DLL中创建一个窗口
2. 外部可以调用该DLL窗口,比如显示此窗口
3. 外部可以继承该DLL窗口,比如在此窗口上再增加其他控件,在调用端的资源文件中可以看到此窗口
4. 操作就象CDialog一样
枫桦沐阳 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 zyx040404 的回复:]
你有代码看看吗?
[/Quote]

代码是有,但是发到网上很麻烦,因为我上网机器和开发机器分开的。
网上就很多关于MFC扩展Dll的资料,动手查一下。
zyx040404 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 ynb119 的回复:]
引用 19 楼 szuzsq 的回复:
以vs2008为例
新建mfc dll
第2步选mfc extension dll
不要选默认的regular dll using shared dll


这里已经说得很清楚了。用MFC扩展DLL可以实现,生成以后基本上根MFC窗口程序差不多,哪有那么麻烦。。
[/Quote]

你有代码看看吗?
zyx040404 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 booklyn 的回复:]
给点分我就把代码贴出来哈哈
[/Quote]
给分不是问题啊
zhjq79 2011-03-21
  • 打赏
  • 举报
回复
代码在哪里呢
枫桦沐阳 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 szuzsq 的回复:]
以vs2008为例
新建mfc dll
第2步选mfc extension dll
不要选默认的regular dll using shared dll
[/Quote]

这里已经说得很清楚了。用MFC扩展DLL可以实现,生成以后基本上根MFC窗口程序差不多,哪有那么麻烦。。
booklyn 2011-03-21
  • 打赏
  • 举报
回复
给点分我就把代码贴出来哈哈
zyx040404 2011-03-18
  • 打赏
  • 举报
回复
大家看看一下网址有没有帮助
http://www.codeguru.com/cpp/w-p/dll/article.php/c107/
http://www.codeproject.com/KB/DLL/The_DLL_Hell.aspx
zyx040404 2011-03-15
  • 打赏
  • 举报
回复
在网上也找不到答案,没碰到懂的人
加载更多回复(28)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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