C++写的DLL中如何添加非模式窗体

C++写的DLL中如何添加非模式窗体,第1张

其中对终端文件进行读写 *** 作都是通过串口,所以每个 *** 作的时间比较长一点。开始我用的是win32的dll,采用windows标准库。也没有考虑加个进度指示之类的窗口。后来在自测过程中发现,客户体验实在很糟糕。因为使用者有时候根本就搞不清楚你的程序是正在等待数据的传输,还是已经死掉了。于是我用了Splash方式,在读写过程中显示一幅静态提示画面。本来有资料说可以加载动态图画的,但是我没有研究出来,所以就用的一张jpg图。有人看了后还是说,容易给人死机的感觉。看来还是不能偷懒。

但是我DLL中的接口中没有预留多次调用读、写的功能,是个一次性的接口。所以我只能在DLL中增加一个窗口来显示工作进度了。也好,正好学习一下我不熟悉的东西。经过了解当DLL是MFC的DLL时,可以十分简单的添加对话框和各种MFC支持的窗体。而当DLL是win32的DLL时,就必须调用SDK的标准函数来创建窗体了。一想到,创建窗体,添加控件都要自己一点点完成,我就退缩了。没办法,谁让我是懒人呢?于是,我把这个win32的DLL项目,改成了静态链接MFC库的DLL。另外还做了两个代码上的重要变动:一是将stdafx.h中的#include <windows.h给屏蔽了,因为MFC的标准库中已经添加了该头文件;二是将APIENTRY DllMain的主入口函数给注释了,因为主入口函数也已经有MFC给你完成了。

接下来,在项目鼠标右键的菜单中点击添加-资源,然后选择新建对话框。剩下的就和普通对话框项目一样进行。不过好像需要自己写OnInitDialog函数,并要写#include resource.h。因为我需要的是非模式窗口,动态提示当前进度。如果用DoModal的话,程序会停在这,等待用户 *** 作。所以在在窗体类中重写了

BOOLCInfoDlg::PreTranslateMessage(MSG*pMsg){//TODO:Addyourspecializedcodehereand/orcallthebaseclassif((pMsg-message==WM_KEYDOWN)||(pMsg-message==WM_KEYUP)){if(pMsg-wParam==VK_ESCAPE||pMsg-wParam==VK_RETURN){returntrue}}returnCDialog::PreTranslateMessage(pMsg)}用于处理消息。

我的进度条控件有个接口来设置当前进度条的位置:m_ProgressCtrl.SetPos(pos)开始,这一句我放在一个公共接口中。发现在使用过程中,窗体不停的刷新,感觉不爽。于是定义了一个自己的消息来处理它:

ON_MESSAGE(WM_MESSAGE_SETPOS, SetPosMessage)

LRESULT CInfoDlg::SetPosMessage(WPARAM wParam, LPARAM lParam){m_ProgressCtrl.SetPos((int)lParam)

CString str

GetDlgItem(IDC_STATIC_PERCENT)-SetWindowText(str)return 0}这个时候再运行,就只看见进度条前进,窗体没有闪烁的感觉了。哈哈搞定了!

在MDI主窗体的【属性】对话框中,将MDI主窗体的IsMdiContainer属性设为true,如下图

将Button控件从工具箱拖到窗体上,如下图

给当前项目添加windows窗体,命名Child,如下图

给Button添加Click事件,代码如下

private void button1_Click(object sender, EventArgs e)

{

Child c = new Child()

c.MdiParent = this

c.Show()

}

一、带窗体的dll创建

1、先新建 类库(testdll),在项目中添加两个窗体form1(主窗体)、form2,为了与后面的调用区分分别命名为fm1,fm2;并在fm1窗体中添加一个按钮用来调用fm2如下图

2、在fm1窗体代码中先引用fm2,    按钮代码调用fm2.如图

3、生成dll,(class1.vb中不需要写任何代码)

二、调用dll

1、新建 一个windows应用程序并添加一个按钮用来调用dll中的窗体,选 择 “项目”-“添加引用”,选择刚才创建的testdll

2、窗体代码中先引用testdll,再定义一个testdll中的fm1对象,最后执行对象的show方法

3、运行结果如下:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11217160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存