但是我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}这个时候再运行,就只看见进度条前进,窗体没有闪烁的感觉了。哈哈搞定了!
一:打开腾讯电脑管家,找到工具箱-电脑诊所。二:点击软件问题专区。
三:在丢失dll文件一键修复区,找要修复的dll文件选项。
四:点击立即修复,便可以恢复正常了
第1步:在注册表编辑器中展开HKEY-LOCAL-MACHINE\SOFTWARE\Po1icies\Microsoft:\Windows\TaskScheduler5.0子键。第2步:在右侧窗口中新建或编辑名为“DragAndDrop”的DWORD键值项,将其值设置为“0”表示禁止此功能将其值设置为“1”表示启用此功能。
第3步:关闭注册表编辑器并重新启动win7系统,设置即可生效。
提示:此项设置不能防止用户用其他方式创建新任务,并且不能防止用户删除任务。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)