VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 2369|回复: 9

[求助] MFC 规则DLL中创建非模态对话框

[复制链接]
66_avatar_middle
在线会员 发表于 2017-2-9 10:58:50 | 显示全部楼层 |阅读模式
100驿站币
我建立了一个MFC 规则的DLL,然后加入了一个对话框资源,并且建立了CMyDialog:public CDialog一个类
然后导出一个函数
        gpDlg=new CMyDialog();
        gpDlg->Create(IDD_DLG);
        gpDlg->ShowWindow(SW_SHOW);


有谁能在MFC 规则的DLL实现一个非模态的对话框,请帮忙一下,附带上源码工程最好
要求:
        1.能够在控制台调用这个DLL,并且显示出非模态对话框
网上提示:
从CFrameWnd派生出一个新的类CmyFrameWnd类,因为我们仅仅是需要产生一个不显示的窗口,所以一切动作采用默认的操作就可以了。
class CMyFrame:public CFrameWnd
{
public:
    CMyFrame();
DECLARE_MESSAGE_MAP()
};
3:从CDialog派生一个新的CMyDialog类。
4:因为CWinApp的InitInstance()是用来对应用程序进行初始化动作的。所以我们在CMyWinApp的InitInstance方法中加入如下代码:
    m_pMainWnd = new CMyFrame();
       





上一篇:VS2013
下一篇:Program Manager 问题咨询
47_avatar_middle
在线会员 发表于 2017-2-9 11:40:48 | 显示全部楼层
dll  里面 create 个非莫,在 dll 导出个接口,调用这个非莫
66_avatar_middle
ico_lz  楼主| 发表于 2017-2-9 12:08:39 | 显示全部楼层
softcheng 发表于 2017-2-9 11:40
dll  里面 create 个非莫,在 dll 导出个接口,调用这个非莫

不行滴MFC 规则DLL中创建非模态对话框
51_avatar_middle
online_admins 发表于 2017-2-9 12:45:21 | 显示全部楼层

是不是没进行资源的切换?
默认找对话框资源是从EXE中,而非当前的DLL,所以导致没弹出来
66_avatar_middle
ico_lz  楼主| 发表于 2017-2-9 13:50:54 | 显示全部楼层
Syc 发表于 2017-2-9 12:45
是不是没进行资源的切换?
默认找对话框资源是从EXE中,而非当前的DLL,所以导致没弹出来

资源进行了切换,我看了一下MFC 的框架,是启用MFC的消息循环CWinApp:Run,所以有一定难度的和需要对MFC框架很了解才行
51_avatar_middle
online_admins 发表于 2017-2-9 14:59:19 | 显示全部楼层
xiaoji 发表于 2017-2-9 13:50
资源进行了切换,我看了一下MFC 的框架,是启用MFC的消息循环CWinApp:Run,所以有一定难度的和需要对MFC框架 ...

在 InitInstance 初始化函数中调用以下代码创建一个非模态对话框之后,如果不让代码“停”住肯定不行的,主线程退出了,自然对话框也就没办法显示了。

gpDlg=new CMyDialog();
gpDlg->Create(IDD_DLG);
gpDlg->ShowWindow(SW_SHOW);

加上这句试试:gpDlg->RunModalLoop();
66_avatar_middle
ico_lz  楼主| 发表于 2017-2-9 15:51:07 | 显示全部楼层
Syc 发表于 2017-2-9 14:59
在 InitInstance 初始化函数中调用以下代码创建一个非模态对话框之后,如果不让代码“停”住肯定不行的, ...

我试了,和我猜想的一样,是不行的
如果要停止这个代码我直接DoModal( )模态显示即可,何必要做那么麻烦呢?
非模态是因为有需求才这样子的
51_avatar_middle
online_admins 发表于 2017-2-9 15:55:01 | 显示全部楼层
xiaoji 发表于 2017-2-9 15:51
我试了,和我猜想的一样,是不行的
如果要停止这个代码我直接DoModal( )模态显示即可,何必要做那么麻烦呢? ...

那我这边暂时没有办法了。。。MFC 规则DLL中创建非模态对话框
04_avatar_middle
online_vip 发表于 2017-2-10 08:33:38 | 显示全部楼层
测试了下,非模态窗口可以创建成功并显示出来,但是由于你要用控制台程序调用DLL来创建非模态窗口的话那这个非模态窗口的父窗口就只能是桌面窗口,不知道是什么原因创建出来的非模态窗口一直处于卡死状态,不能用。建议还是用个UI线程来做吧,效果和非模态窗口也没什么区别
47_avatar_middle
在线会员 发表于 2017-2-10 14:10:40 | 显示全部楼层
怎么可能不行,我以前 在 ocx 里面就这么搞过 ,ocx  和 dll 有什么不同,都一样
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-9-23 07:30

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表