VC
lidandan2016
这个作者很懒,什么都没留下…
展开
-
MFC中UpdateData()函数的使用
当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用 UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。用处:主要控制ddx_data 把控件中的值和变量进行交换 比如你有个编辑框,输入了一些值,你的程序怎么得到呢;必须转载 2016-01-19 14:00:37 · 537 阅读 · 0 评论 -
UML类图与类的关系详解
在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。下面我们结合实例理解这些关系。基本概念类图(Class Diagram): 类图是面向对象系统建模中最常用转载 2017-10-09 18:07:02 · 326 阅读 · 0 评论 -
MFC : while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
项目中用到了好多这个消息循环,很是困惑。遂百度之,难道一个窗口下可以有多个消息循环吗?百度结果都是介绍和GetMessage区别的,正经的说这个有啥作用的,少之又少。不过有一篇英文的不错,这是出处,可以参考一下http://blog.csdn.net/scofieldlau/article/details/1965517#t0奈何我的疑惑仍然为解。最后查看MSDN,清晰一二原文Un...转载 2019-01-01 22:33:51 · 2192 阅读 · 0 评论 -
MFC: DoEvent
c中DoEvent函数一般写成:MSG msg;while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) //非阻塞查看消息队列是否有消息过来,有消息返回非零进入循环//无消息返回0则跳出{TranslateMessage(&msg) ; //有消息时,虚拟键消息转换为字符消息DispatchMessage(&msg);//发送...转载 2019-01-01 23:22:41 · 1493 阅读 · 0 评论 -
PeekMessage完美解决MFC主界面无响应
一般主界面无响应的解决方案是,对于计算量过大的方法,另开工作者线程,如下: MFC支持两种线程:用户界面线程和工作者线程。(1)用户界面线程:通常用于处理用户输入,响应由用户产生的事件和消息。用户界面线程通常有窗口,有自己的消息循环。CWinApp是一个用户界面线程对象的例子,因为它是从CWinThread派生出来的,而且要处理用户产生的事件和消息。(2)工作者线程:通常用于处...转载 2019-01-01 23:41:46 · 4163 阅读 · 1 评论 -
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h
错误描述:fatal error C1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include"stdafx.h"”?错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include"stdafx.h")时,文件未预期结束。没有找到预编译指示信息的头文件"stdafx.h"。 (因为工程中的每个cpp文件属性默认都是使用预编译头(/Y...转载 2019-01-12 10:09:02 · 6662 阅读 · 1 评论 -
MFC:快速设置控件文本字体、大小、颜色、背景
以静态文本为例,分享一下怎么修改文本字体、大小、颜色、背景等参数。其他文本、控件等可参照修改。1.修改字体、大小这个很简单,首先在Dlg类中声明一个CFont类型的成员变量: 然后在类的初始化函数OnInitDialog()中添加以下两行代码: //设置静态文本字体大小 m_editFont.CreatePointFont(180, _T("宋体"));...原创 2019-01-12 23:03:43 · 22628 阅读 · 0 评论 -
在VS中添加lib库的三种方法
注意:1、每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties"->"ConfigurationProperties"->"Debugging",在"WorkingDirectory"设置dll的路径就可以了2、无论是设置DLL目录,或者是Lib目录,亦或是头文件的目录,都有release版本和debug版本的区分...转载 2019-05-15 17:43:42 · 1076 阅读 · 0 评论 -
MFC中char*,string和CString之间的转换
string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。1 string 转为 CStringCString.format("%s",string.c_str...原创 2019-05-16 11:27:30 · 19828 阅读 · 2 评论 -
关于VS2013下制作和使用静态库和动态库
关于VS2013下制作和使用静态库和动态库引言什么是库:库是写好的现有的,成熟的,可以复用的代码。 所谓静态、动态是指链接。将一个程序编译成可执行程序的步骤:静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。为什么还需要动态库?空间浪费是静态库的一个问题。 另一个问题是静态库对程序的更新、部署带来麻烦。如果...转载 2019-05-16 12:28:49 · 194 阅读 · 0 评论 -
如何解决VC编译inet_addr出现error C4996的问题
在编译过程中出现如图所示error C4996的错误,此问题在vc2013及以上版本都会出现,主要是编译器进行了安全检查,部分旧的函数限制使用。解决此问题有两种方法。方法/步骤 第一种方法是去掉SDL检查。设置项目属性,将c/c++->SDL检查设置为“否”即可跳过检查,使用旧的函数可编译成功。 std::string addr; ........ serv_add...原创 2019-05-16 14:48:33 · 854 阅读 · 0 评论 -
IP地址转换函数:inet_pton
inet_pton是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。头文件:windows下:#include <WS2tcpip.h>linux下:#include <sys/socket.h>#include <...原创 2019-05-16 15:10:17 · 12836 阅读 · 0 评论 -
main函数命令行参数的使用
总览一个程序的main()函数的可以包括两个参数第一个参数的类型为int型; 第二个参数为字符串数组。通常情况下,将第一个参数命名为argc,第二个参数为argv(当然参数名字可以换)。由于字符串数组有两种表达方式,因此,main函数存在两种书写方法:形式一: int main(int argc, char* argv[])//这里使用char* argv[]{ re...转载 2019-05-16 17:32:33 · 4795 阅读 · 1 评论 -
vs环境下 release版本调试设置
设置在Release模式下调试的方法:1.工程项目上右键 -> 属性2.c++ -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi)3.c++ -> 优化 -〉优化 选 禁止(/Od)4.连接器 -〉调试 -〉生成调试信息 选 是 (/DEBUG)...原创 2019-05-22 12:59:43 · 1067 阅读 · 0 评论 -
项目发布Debug和Release版的区别
一、Debug和Release的区别 Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息 Release:发布版本,不对源代码进行调试,编译时对应用程序的速度...转载 2019-05-22 12:51:21 · 1391 阅读 · 0 评论 -
关键字:mutable和volatile
(1)mutable 在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。1. struct ST 2. 3. { 4. 5. int a; 6. 7.原创 2017-06-23 18:13:16 · 489 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句转载 2017-06-07 16:46:40 · 335 阅读 · 0 评论 -
windows下的线程同步的方式
临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临原创 2017-05-12 16:56:37 · 360 阅读 · 0 评论 -
关于在线程中使用AfxGetMainWnd()出错的问题,终于找到了
关于在线程中使用AfxGetMainWnd()出错的问题.AfxGetMainWnd()得到的是当前线程的主窗口(如果有的话).因为主窗口是属于主线程的,所以想得到主窗口HWND值,只能在主线程中用AfxGetMainWnd(),但要不是处在主线程中,AfxGetMainWnd()可能是从当前线程查询主窗口的。但好像AfxGetMainWnd()不能跨线程,故要出错.要想在转载 2017-05-15 15:39:34 · 477 阅读 · 0 评论 -
mfc动态创建(dynamic create)实现原理
在用到MFC的文档视图构架你可能有个非常迷惑的地方.就是很多类不知道在哪里就被莫名其妙的实例化了.以单文档视图为例.代码中你能看到的的实例化的地方就只有两个一个是CWinApp的一个全局变量的实例化,另一个就是 CSingleDocTemplate 实例化.它的构造函数如下CSingleDocTemplate(UINT nIDResource, CRuntimeClass* p转载 2017-05-18 15:00:28 · 1126 阅读 · 0 评论 -
DECLARE_MESSAGE_MAP( )用法
DECLARE_MESSAGE_MAP( ) 说明: 你的程序中的每一个CCmdTarget的派生类都可以提供一个消息映射以处理消息。在你的类声明的末尾使用DECLARE_MESSAGE_MAP宏。然后,在实现了类成员函数的.CPP文件中加入BEGIN_MESSAGE_MAP宏,再加入每个消息处理函数的宏入口,最后使用END_MESSAGE_MAP宏。 注意: 如果你在DE转载 2017-05-19 16:05:59 · 691 阅读 · 0 评论 -
MFC里面RC资源编辑器不能打开的解决办法
MFC里面RC资源编辑器不能打开的解决办法 MFC的RC文件在编辑器下打不开了,提示"This file is already open in a editor.",然后显示的就是代码,对话框、菜单什么的都显示不了,解决方法: 在上面所述的情况下关闭所有打开的文件,就搞定了原创 2017-05-19 17:59:31 · 5439 阅读 · 3 评论 -
C++信号量Semaphore和MFC中的CSemaphore类使用
C++ 信号量Semaphore 和MFC 中的CSemaphore 类使用【转】信 号量(Semaphore )内核对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最 大线程数目。在用CreateSemaphore() 创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最转载 2017-06-05 15:05:58 · 958 阅读 · 0 评论 -
Visual Leak Detector (VLD)使用
Visual C++内置内存泄露检测工具,但是功能十分有限。VLD就相当强大,可以定位文件、行号,可以非常准确地找到内存泄漏的位置,而且还免费、开源!在使用的时候只要将VLD的头文件和lib文件放在工程文件中即可。也可以一次设置,新工程就不用重新设置了。只介绍在Visual Studio 2003/2005中的设置方法,VC++ 6.0类似:打开Tools -> Optio原创 2017-06-05 17:10:34 · 1014 阅读 · 0 评论 -
WaitForSingleObject与WaitForMultipleObjects用法详解
在多线程下面,有时候会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回的。那么,什么是信号呢?简单来说,Windows下创建的Object都会被赋予一个状态量。如果Object被激活了,或者正在转载 2017-06-06 11:44:02 · 792 阅读 · 0 评论 -
串口程序中函数使用WaitCommEvent、ClearCommError、GetcommMask
在串口程序中的几个函数的联合使用一、首先是利用WaitCommEvent来等待串口事件的被触发,这些事件是指在该函数被调用前,我们自己设置好的能触发串口线程的有效事件。主要包括3类事件: 1.函数SetCommMask (ceSeries->m_hComm, EV_RXCHAR |EV_CTS | EV_DSR )设置的数据接收中断 2.用户中断线程的操作。 3.转载 2017-06-06 12:11:03 · 11169 阅读 · 0 评论 -
串口的一点知识(摘抄)
第一章 背景知识1. 概述串口是计算机上I/O接口的一种,要掌握串口通信编程的相关知识,必须先了解I/O接口的相关知识。I/O接口是接口的一种。2. 什么是接口?众所周知计算机是由CPU,存储器,外部终端设备组成.接口就是用于CPU与外部设备、存储器的连接和数据交换的设备。3. 接口分类.广义的计算机接口有二种,见下表:类別 用途 电路实现复杂性存储器接转载 2017-06-06 14:36:07 · 2501 阅读 · 0 评论 -
串口流控制(flow control)
我们在串行通讯处理中,常常看到RTS/CTS和XON/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对普通RS232编程,了解一点这方面的知识是有好处的。那么,流控制在串行通讯中有何作用,在编制串行通讯程序怎样应用呢?这里我们就来谈谈这个问题。 1.流控制在串行通讯中的作用 这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时转载 2017-06-06 15:05:47 · 2717 阅读 · 0 评论 -
AfxBeginThread 传参
用MFC开发时,经常会用到多线程,它的启动方式就是通过AfxBeginThread这个方法来创建,然后启动,比如标准的方式: CWinThread *pthread = AfxBeginThread(方法名, (LPVOID) 入参, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); 入参就是传给执行方法的参数,这里只能传一个参原创 2017-06-07 11:23:14 · 1318 阅读 · 0 评论 -
【整理】Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
【整理】Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTRL表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的。转载 2017-06-07 15:50:13 · 765 阅读 · 0 评论 -
IntelliSense: 无法打开 源 文件 "stdafx.h"
VS2010中包含以前的.h/.cpp文件于现在的工程中,出现IntelliSense: 无法打开 源 文件 "stdafx.h",搜寻到一些方法都不适用,比如:设置项目属性->配置属性->C/C++->预编译头->使用 (/Yu)/创建 (/Yc)/不使用预编译头三种方式都不行。虽然提示这样的错误,但是运行程序是成功的,初始化和编译运行好像使用不同的查找路径,在低版本的V...转载 2019-05-28 17:04:13 · 1909 阅读 · 2 评论