C++写的DLL中如何添加非模式窗体
来源:互联网 发布:宁波淘宝拍照 编辑:程序博客网 时间:2024/04/29 06:09
手头上有个软件,需要管理终端的文件系统,也就是提供一个win的资源管理器之类的工具管理终端的文件。其中对终端文件进行读写操作都是通过串口,所以每个操作的时间比较长一点。开始我用的是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的话,程序会停在这,等待用户操作。所以在在窗体类中重写了
...{
// TODO: Add your specialized code here and/or call the base class
if((pMsg->message == WM_KEYDOWN)
||(pMsg->message == WM_KEYUP))
...{
if( pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)
...{
return true;
}
}
return CDialog::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;
str.Format(_T("%d%%"), (int)lParam);
GetDlgItem(IDC_STATIC_PERCENT)->SetWindowText(str); return 0;
}
这个时候再运行,就只看见进度条前进,窗体没有闪烁的感觉了。哈哈搞定了!
- C++写的DLL中如何添加非模式窗体
- C#中模式窗体和非模式窗体的区别
- 如何在C#中使用C/C++写的DLL。
- C如何写窗体程序
- delphi 在DLL中添加窗体
- 如何写DLL(C++)
- 举例说明如何在C#中使用C/C++写的DLL
- 举例说明如何在C#中使用C/C++写的DLL
- dll中创建非模式对话框的问题
- javascript中如何通过被打开的窗体在opener窗体中添加option选项
- javascript中如何通过被打开的窗体在opener窗体中添加option选项
- javascript中如何通过被打开的窗体在opener窗体中添加option选项
- javascript中如何通过被打开的窗体在opener窗体中添加option选项
- javascript中如何通过被打开的窗体在opener窗体中添加option选项javascript
- DLL文件实现窗体的模板模式
- excel VBA中调用VB6写的DLL中的窗体和过程函数
- 我的那些子窗体如何在添加了图片框的父窗体中显示?
- C# 非模式窗体show()和模式…
- 相机容易中毒
- checkbox 控制层的显示与隐藏
- 当程序员转行去做销售
- 困在了0、1之中
- Asp.net+Xml实现无数据库论坛一点即通 - lshdic的专栏 - CSDNBlog
- C++写的DLL中如何添加非模式窗体
- Ext TreePanel:根据窗口大小变化调整自身大小
- 今天 在csdn开bolg
- 北京市基本医疗保险定点医院名单
- 办公室礼仪英语:教你如何应急
- 如何才能克服害羞心理?
- 一只脚跨进门-安装Struts 2 (4)
- C#分析数据库结构,使用XSL模板自动生成代码 - 清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门 - CSDNBlog
- 奥黛丽.赫本的美丽之本