![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MFC
MFC、wind32
土戈
软件开发
展开
-
SendMessage 注意事项与消息映射
TRACE( "The value of x is MyThreadFunction %d/n", de); 只在debug中打印,release版本中是不会输出的。绘图相关的函数,只能在创建窗口的线程中调用才会生效。在其他线程中调用需要SendMessage;SendMessage调用的消息函数运行在创建窗口的线程中。当创建窗口的线程退出时,再SendMessage就没效了。int iRet = 5; if(IsWindow(m_pDlg->G...原创 2021-06-23 11:50:58 · 568 阅读 · 0 评论 -
VS调用qt
.;"$(QTDIR)\include";"$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";..\..\include;..\..\include\xfs;"$(QTDIR)\include\ActiveQt";.\include"$(QTDIR)\lib";"$(OutDir)";..\..\Lib;"$(QTDIR)/plugins/imageformats/";.\libqtmain.lib QtCore4.l...原创 2021-06-23 11:52:19 · 885 阅读 · 0 评论 -
__declspec(dllexport)和def文件导出dll方法
一,__ declspec(dllexport):将一个函数声名为导出函数,通常它和extern“C”合用,形式如下:extern "C"{ __declspec(dllexport) void FUNCTION() { }}由于C ++存在函数重载,因此__declspec(dllexport)FUNCTION(int,int)会被装饰,例如被装饰成为function_int_int,而且不同的编译器decorate的方法不同,造成了在用GetProcAddress转载 2020-06-09 15:20:12 · 1343 阅读 · 0 评论 -
_tcschr、_tcsrchr
好处:是可以不管是用unicode 编码还是其他 ,代码都不用改.C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如:1、_tcschr代替strchr或者wcschr函数功能:查找一个字符串中首次出现的指定字符。函数原型: char *strchr(const char* _Str,int _Val)头文件:#include <string.h>功能: 查找字符串s中首次出现字符c的位置返回值:成功则返回要查找字符第一次出现的位置,失败返回...转载 2020-06-09 15:47:32 · 703 阅读 · 0 评论 -
使用_tcscpy代替strcpy、wcscpy、lstrcpy; strcpy_s
好处:是可以不管是用unicode 编码还是其他 ,代码都不用改.C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如:lstrcpy是windows API 函数,其他的都是C库函数,既能作用于ASCII又能用于UNICODE函数功能:该函数复制一个字符串到缓冲区函数原型:LPTSTR lstrcpy(LPTSTR lpString1,LPCTSTR lpString2);参数:lpString1:指向接收由参数lpString2指向字符串内容的缓冲区。缓冲.转载 2020-06-09 15:47:17 · 2103 阅读 · 0 评论 -
A2W、W2A、A2T、T2A的使用方法(_T、L)
1、A2W和W2A 在《Window核心编程》,多字节和宽字节之间转换比较麻烦的,MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。那么使用ATL的一个很好的字符串的转换宏:A2W和W2A。 (1)A2W的用法:USES_CONVERSION; CStringtmpStr; char*LineChar="fdsfdsa"; constWCHAR*cLineChar=A2W(LineChar)...转载 2020-06-09 15:46:16 · 2787 阅读 · 1 评论 -
事件EVENT,WaitForSingleObject(),WaitForMultipleObjecct()和SignalObjectAndWait() 的使用
用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法。但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力。这时,只能考虑使用内核模式。Windows提供了许多内核对象来实现线程的同步。这些内核对象有两个非常重要的状态:“已通知”状态,“未通知”状态(也有翻译为:受信状态,未受信状态)。Windows提供了几种内核对象可以处于已通知状态和未通知状态:进程、线程、作业、文件、控制台输入/输出/错误流、事件、等待定时器、信号量、互斥转载 2020-06-09 14:31:25 · 536 阅读 · 0 评论 -
GetTickCount() 函数的作用和用法
DWORDGetTickCount(void);在Release版本中,该函数从0开始计时,返回自设备启动后的毫秒数(不含系统暂停时间)。在Debug版本中,设备启动后便从计时器中减去180秒。这样方便测试使用该函数的代码的正确溢出处理。返回值:如正确,返回毫秒数。Header:Winbase.h.Link Library:Coredll.lib.2) 应用用来计算某个操作所使用的时间:Start:=GetTickCount;...//...转载 2020-06-09 10:27:33 · 567 阅读 · 0 评论 -
MFC不显示窗口接收消息(窗口过程WindowProc)
#pragma onceclass __declspec(dllexport) CSingle{private: CSingle();public: ~CSingle() { delete m_pWin; } static CSingle& instance() { static CSingle ins; return ins; } HWND GetWnd(); void CloseWindow();private: class CMWin.原创 2020-06-05 10:44:51 · 757 阅读 · 0 评论 -
Windows程序的生与死---窗口的生命周期(窗口过程WindowProc)
1)程序初始化过程中调用CreateWindow,为程序建立了一个窗口,做为程序的萤幕舞台。CreateWindow 产生窗口之后会送出WM_CREATE 直接给窗口函数,后者于是可以在此时机做些初始化动作(例如配置内存、开文件、读初始资料...)。2)程序活着的过程中,不断以GetMessage 从消息贮列中抓取消息。如果这个消息是WM_QUIT,GetMessage 会传回0 而结束while 循环,进而结束整个程序。3)DispatchMessage 透过Windows USER 模块的协助与..转载 2020-06-05 10:35:38 · 500 阅读 · 0 评论 -
win32应用程序创建流程(消息处理)(窗口过程WindowProc)
编写窗口程序的步骤: 1 定义WinMain函数 2 定义窗口处理函数–自己定义处理消息 3 注册窗口类(往OS写入数据) 4 创建窗口 (在内存中创建窗口) 5 显示窗口(根据内存中对于窗口的描述信息,在显示器中绘制窗口) 6 消息循环(提取/翻译/派发) 7 消息处理#include "stdafx.h"HINSTANCE g_hInstance = 0;//窗口处理函数LRESULT CALLBACK WndProc( HWND hW.转载 2020-06-05 11:03:22 · 1364 阅读 · 0 评论 -
MFC字符串转换(UTF8、gb2312)
class ToolBase{public: static CString UTF8ToGB2312(const char *pSrc, int iLen) { char pResult[2048] = {0}; int i = 0, j = 0; while (i < iLen) { if (pSrc[i] < 0 && i+2<iLen && pSrc[i+1] < 0 && pSrc[i+2] &l.原创 2020-06-10 16:39:05 · 1125 阅读 · 0 评论 -
MFC六大关键技术
MFC六大关键技术包括:MFC Initialization —— MFC程序的初始化过程 RTTI(Runtime Type Information)—— 运行时类型识别 Dynamic Creation —— 动态创建 Persistence ——永久保存(串行化、序列化) Message Mapping —— 消息映射 Message Routing —— 消息传递MFC程序的初始化过程首先,我们用VS2010建立一个Win32应用程序,在项目的配置属性中链接MFC库,并输入以下代转载 2020-12-31 09:01:56 · 851 阅读 · 0 评论 -
CString成员函数详解[转]
1、构造函数(常用)CString( const unsigned char* psz ); 例:char s[]="abcdef"; char* sp=s; CString csStr(sp); //csStr="abcdef" CString( LPCSTR lpsz ); 例:CString csStr("abcdef"); //csStr="abcdef"...转载 2020-12-31 09:01:10 · 412 阅读 · 0 评论 -
MFC中CString实现原理简单介绍
MFC里的关于Cstring的类的实现大部分在strcore.cpp中。Cstring里需要有一个用来存放字符串的缓冲区,并且有一个指针指向该缓冲区,该指针就是LPTSTR m_pchData。但是有些字符串操作会增建或减少字符串的长度,因此为了减少频繁的申请内存或者释放内存,Cstring会先申请一个大的内存块用来存放字符串。当增加后的字符串长度超过预先申请的内存时,Cstring先释放原先的内存,然后再重新申请一个更大的内存块。同样的,当字符串长度减少时,也不释放多出来的内存空间。而是等到积累到一定转载 2020-12-31 09:00:47 · 673 阅读 · 0 评论 -
MFC CString 操作指南
2、格式化字符串 与其用sprintf()函数或wsprintf()函数来格式化一个字符串,还不如用CString对象的Format()方法:CString s;s.Format(_T("The total is %d"), total); 用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。 我总是对我的字符串使用_T()宏,这是为了让我的代码至少有Unicode的意识,_T()宏在8位字符环境下是如下定义的:#d...转载 2020-12-31 09:00:28 · 643 阅读 · 0 评论 -
MFC中TRACE的用法
TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了1.在MFC中加入TRACE语句2.在TOOLS->MFC TRACER中选择 “ENABLE TRACING”点击OK3.进行调试运行,GO(F5)(特别注意:不是执行‘!’以前之所以不能看到TRACE内容,是因为不是调试执行,而是‘!’了,切记,切记)4.然后就会在OUTPUT中的DEBUG窗口中看到TRACE内容了,调试执行会自转载 2020-06-16 10:58:52 · 1412 阅读 · 0 评论