Windows程序设计
我也不知道能坚持多久
-快乐的程序员-
这个作者很懒,什么都没留下…
展开
-
MFC动态库里封装对话框界面(Dialog)
在MFC动态库里封装弹窗,首先需要MFC创建动态库时选择“MFC Extension DLL”:创建好以后,新建一个对话框,并为对话框创建一个类与之绑定,而后对对话框的各种编码方式同MFC应用程序,在完成弹窗逻辑后,记得给头文件里class和类名之间增加一个__declspec(dllexport)将类导出,编译即可。但这种用法因为另一个应用程序使用时必须包含对话框的头文件,导致应用程序同时包含了应用程序自己使用的resource.h和动态库使用的resource.h,那么在定义资源名称时,尽量不要重复原创 2020-12-16 09:15:05 · 1621 阅读 · 0 评论 -
MFCCGridCtrl类的用法
在VC6里用CGridCtrl遇到了如果添加Custome Ctrol这个控件的话,出现的列表无法响应鼠标点击事件,所以无法修改,后经百度,发现用Picture控件可以编辑。Picture控件拖拽到界面上,定位无所谓,大小也无所谓,反正都是由程序来控制的,关键代码如下: CRect rect; GetClientRect(rect); m_gridCtrl.Create(CRect(0, 0, rect.Width(), rect.Height() - 40), this, IDC_GRID);原创 2020-11-29 10:59:18 · 1668 阅读 · 0 评论 -
VC共享内存的创建和权限问题
最近做的项目中,由用户双击启动的应用创建了共享内存,调用CreateFileMapping,按百度到的方式,发现在PHP以服务启动(运行在SYSTEM用户下)无法访问到该共享内存的内容,数值都是0.后几经百度,发现确实是有命名空间的问题,正确代码如下:CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, “Global\SharedMemName”);注意这里最关键的是"Global\SharedMemName"里原创 2020-11-27 11:31:03 · 607 阅读 · 0 评论 -
MFC对目录的递归创建、删除、拷贝和移动
直接贴代码,我在本地测试过了。注意删除文件时如果有只读文件,也会遇到权限问题而导致删除失败,还有就是递归删除目录在360等杀毒软件下会弹窗提示安全问题,毕竟是在大批量删除文件,尤其是文件夹带有游戏字样时。关于反斜杠和顺斜杠,在windows里,顺斜杠只是为了兼容,但我在windows7里使用顺斜杠移动目录,当目标目录已经存在时,发现操作系统弹窗提示目标目录不存在,是否创建,我点是或点否,都无法成功移动目录。所以建议严格用反斜杠好了,在字符串里,反斜杠要用转义符,转义符也是反斜杠,所以出现总是两个反斜杠的写原创 2020-10-18 09:42:45 · 571 阅读 · 1 评论 -
MFC使用最优编译(Maximize Speed)引起的问题
昨天,2020年10月12日,我度过了最艰难的一天,一个MFC的DLL动态库,在Debug模式下运行正常,在Release模式下运行却得不到正确的结果,不报错,但结果不正确,代码如下:if (yxValue != 0){ *lpByte |= 1 << ((ych - 1) % 8);}else{ *lpByte &= ~(1 << ((ych - 1) % 8));}没错,就这么一个if语句,在Release模式下,总是将if和else里的语句均执行。原创 2020-10-13 10:10:22 · 376 阅读 · 0 评论 -
MFC制作DLL(导出类和函数)
学了2天MFC导出DLL,发现网上描述的都不是很彻底,我这里给一个教程,希望大家能参考一次成功。我用VC6,其他版本基本雷同。首先,VC6新建项目,如下图流程:点击文件–保存工作空间,把我们的劳动成果先保存一下。然后点文件–新建:继续新建c++文件:MLib.h文件内容:#ifndef __MLIB__20200919__ // 防止重复,加上年月日,做个留念#define __MLIB__20200919__class MLib{public: __declspec(原创 2020-09-19 21:20:45 · 3034 阅读 · 0 评论 -
IOCP windows套接字使用完成端口
本文的代码源自《游戏服务端IOCP模型,自己封装的一个类,3行代码搞定服务端》,我改进过了,希望作者不要说我侵权,我声明这段代码是作者的劳动结晶,我只不过是在此基础上进行了些修改和调试。windows里有如同Linux中的epoll一般强大的套接字管理功能,即socket编程模型。我们面对服务器端编程时,往往希望一台主机能同时承接成千上万个客户端连接,只要我们的CPU和内存足够处理业务即可。但对于socket,如果使用select管理,在windows里有最多管理64个套接字的上限,毕竟都是依靠轮询来反原创 2020-09-17 16:48:39 · 414 阅读 · 0 评论 -
MFC之ODBC操作数据库
在MFC中,有CDatabase类可以操作数据库。首先要引入头文件:#include <afxdb.h>然后创建一个类:CDatabase mdb;或者CDatabase *mdb = new CDatabase;然后连接数据库,我这里有一个自己封装的现成的函数:BOOL OpenDB(CDatabase *mdb){ if (mdb->IsOpen()) { mdb->Close(); } try { BOOL result = mdb->Open(原创 2020-09-10 16:54:26 · 2159 阅读 · 0 评论 -
VC6.0++ MFC多线程运行
Windows中没有多进程的概念,只有多线程。在MFC中一般使用AfxBeginThread来启动工作者线程,用新建类,然后new这个类后调用CreateThread方法来启动界面线程。工作者线程和界面线程的区别是:界面线程比工作者线程多一个可接收windows消息的功能,也就是说,我们可以给界面线程发送自定义消息,让界面线程响应。来一份工作者线程的代码样例:// 定义工作者线程函数UINT ThreadScanSockets(LPVOID pParam){ int i = 0; while原创 2020-09-05 09:05:40 · 1767 阅读 · 0 评论 -
VC++6.0MFC防止程序重复启动
如果某个程序用于接收网络数据,那么我们一定不希望能启动多个实例,我们希望如果程序已经运行了,那么双击程序会弹窗提示,然后停止运行。我习惯在VC++6.0里写代码(没什么经验,没做过大项目),如果要防止程序重复启动,我用了如下方法:1、在左侧工作空间里的ResourceView里,根节点上点击右键–属性,去掉启用MFC特性前面的对勾:2、展开资源,双击主对话框(如果是对话框程序,即对话框只要关闭,程序就退出了),在右侧编辑窗口的主对话框上点右键,属性,填写一个唯一的类名(唯一相对于你要在操作系统里运行原创 2020-09-05 08:31:21 · 874 阅读 · 0 评论 -
bat批处理脚本替换文件里的字符串
项目中有一个需求,就是MySQL可以被安装到用户指定的任意目录,但my.ini中有basedir和datadir需要配置到指定的路径,所以,需要写一个bat脚本来替换这个路径,代码如下,可作为参考:@echo offecho ***** 设置MySQL路径 *****set appPath=%~dp0set strFilePath=%appPath%\my-default.iniset dstFilePath=%appPath%\my.iniset source_dir=D:\MySQL\se原创 2020-07-28 09:34:19 · 3462 阅读 · 0 评论 -
VBA编程之操作单元格
VBA编程经常要读取、写入单元格内容,所以总结这么一篇笔记,我只是把最常用到的功能列举出来。具体用法有疑惑可以百度。ThisWorkbook:当前工作簿,这个跟VBA代码编写位置有关系,如下图所示:ActiveWorkbook:活动工作簿,指Excel当前能看到的工作簿。激活某个工作簿:Workbooks(“Book1”). Activate保存某个工作簿:Workbooks(“Book1”).Save,同理有ActiveWorkbook.Save和ThisWorkbook.Save。注意工作簿原创 2020-07-27 09:49:51 · 2197 阅读 · 0 评论 -
VBA编程之ODBC连接数据库
下面的例子展示了在VBA中使用ODBC连接数据库并获取数据,填充工作表内容。使用前要先在sheet名字上点右键,选择查看代码,进入VBA编辑模式:第一次用的时候要在VBA编辑窗口点击工具–引用,勾选:Microsoft ActiveX Data Objects x.x Library。然后输入如下代码,即可对Excel的“名字”工作表按SQL Server中的test数据库中的user表数据进行填充。数据库可一用SQL Server,也可以用MySQL,但是使用之前,要先运行"odbcad32"原创 2020-07-25 16:24:18 · 4719 阅读 · 0 评论 -
Visual C++6.0编写Win32动态库
百度这类文章很多,但我这里给来一个直接操作版:第一步:新建项目:选择Win 32 DynamicLink Library,输入工程名称比如TestDll,点确定:这里选择一个空的DLL工程(让我们思路能更清晰)。工程创建好后,里面什么也没有。点文件–新建–C/C++Header Files,输入文件名比如TestDll.h:点击确定,在头文件里输入如下代码:#ifndef TESTDLL_H#define TESTDLL_H#define DLL_API _declspec(dll原创 2020-05-23 09:11:34 · 611 阅读 · 0 评论 -
Win32应用程序开发时输出调试信息
在学习Windows开发时,我们不免想像控制台开发那样使用printf方便的往控制台输出一些可见的,可以格式化的调试信息。可惜,Windows API并未提供,百度了很久,也没有一个能拷贝过来就能用的方法,主要是传递的参数没有满足OutputDebugString要求的宽字符串指针的类型,在界面编程时,往往我们申明了使用宽字符。经过在VS2010里用MFC编程的实践,发现直接用TRACE即可,...原创 2019-10-15 10:43:52 · 728 阅读 · 0 评论