![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
VC/MFC编程
张明奇-琦玉
乐观,自信,阳光,相信明天会更好
展开
-
在Dialog中创建View[文集]
共5篇文章: 《略谈如何在对话框创建视图类画图》 《An alternative to the often asked view-in-dialog problem using a dialog bar》 《Creating a View in Dialog (An easy way). 》 《如何在没有文档的情况下使用CView及其派生类》 《浅谈:切换视时基于FormView的对话框属原创 2018-02-28 18:24:04 · 1025 阅读 · 0 评论 -
VC++中的头文件包含问题
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用(不满足继承关系,而是组合关系)。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法:编码时,我们一般会尽量避免include头文件,而是采用声明 class XXX。但有时候还是必须用Include头文件,那么,两者的划分在于什么呢?应该是很明确的原创 2013-09-15 09:21:39 · 2370 阅读 · 0 评论 -
使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作演示案例
一 编程案例介绍 本案例基于控制台工程,创建专门的演示类CDemo,实现二进制文件的读写串行化操作,具体代码如下:1 CDemo类定义:class CDemo {public: void CreateFile(); CDemo(); virtual ~CDemo(); void Serialize(CArchive &ar)原创 2014-04-22 11:42:18 · 6266 阅读 · 0 评论 -
CToolTipCtrl使用详细解说
很多的界面设计都需要有Tip提示,下面描述一下Tip的简单使用方法:1. 首先要New一个CToolTipCtrl的对象m_pContentTip2. 调用CToolTipCtrl的create函数,指定其父窗口。可以为某个控件,也可以为this。一般设为this。m_pContentTip->Create( this, TTS_ALWAYSTIP );原创 2014-04-24 17:14:11 · 4725 阅读 · 2 评论 -
VC多线程临界区
在使用多线程时,一般很少有多个线程完全独立的工作。往往是多个线程同时操作一个全局变量来获取程序的运行结果。多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题。如果是写操作,则会发生错误。这时候,我们可以通过临界区,为全局变量设置一个保护,保证同时只有一个线程可以访问此变量,其他变量进入等待状态。 临界区(Critical Section)是一段独占对某些共享资源访问原创 2014-05-12 17:20:54 · 7379 阅读 · 0 评论 -
VC中关于GlobalAlloc,GlobalLock,GlobalUnLock的用法及疑问
调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。 调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。 您可以用该指针来读写内存。 调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。 调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。Gl转载 2014-05-12 17:55:20 · 5007 阅读 · 0 评论 -
CArchive 详解
CArchive没有基类。 CArchive允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络,它可以在对象被删除时,还能永久保存。可以从永久存储中装载对象,在内存中重新构造它们。使得数据永久保留的过程就叫作“串行化”。 可以把一个归档对象看作一种二进制流。象输入/输出流一样,归档与文件有关并允许写缓冲区以及从硬盘读出或读入数据。输入/输出流处理一系列ASCII字符,但是归转载 2014-06-11 18:24:36 · 1441 阅读 · 0 评论 -
VC ON_CONTROL_RANGE多个控件响应一个方法
步骤/方法 分三个步骤在头文件中声明函数例如 afx_msg void onNum(UINT uID)在.cpp文件中添加函数体 void CCalculatorDlg::OnNum(UINT uID) { UINT index=uID-IDC_NUM_0; CString num; num.Format(_T("%d"),index); A原创 2014-07-03 18:24:28 · 4520 阅读 · 0 评论 -
CTreeCtrl的SetCheck不显示问题
一、问题的提出CTreeCtrl有个属性TVS_HASBUTTONS,如果创建控件的时候加上了这个属性,则在每个节点的左侧都有一个按钮,用来表示节点的选择状态。通过两个函数SetCheck / GetCheck来设置和获取指定节点的选择状态。但是奇怪的是,在对话框中按照常规的方法使用了SetCheck,最后CTreeCtrl并没有显示节点被选中,下面是测试例子:转载 2014-11-10 10:56:07 · 1874 阅读 · 1 评论 -
GDI+编程小结
GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选。一、原创 2013-05-24 09:24:08 · 4410 阅读 · 1 评论 -
GDI+开发环境配置
下载GDI+ SDK for Visual C++6.0下载地址:http://groups.google.com/group/tim-files/files?upload=1 名为GDIPlus.zip配置Visual C++6.0环境将GDI+下的Include文件夹添加到Visual C++6.0Tools->Options->Directorys下的的Include原创 2013-05-24 09:15:07 · 1281 阅读 · 0 评论 -
vs.net中的LNK 1201错误
LNK1201错误vs.net中,复杂的项目编译时有时会出现如下的错误“xxx fatal error LNK 1201:写入数据库“A...xxx.pdb时请检查是否是磁盘空间不足、路径无效或权限不够””上面的错误在msdn的解释如下:写入程序数据库“filename”时出错;请检查是否是磁盘空间不足、路径无效或权限不够 LINK 未能写入输出文件的程序数据库 (PD转载 2012-10-09 10:07:00 · 1226 阅读 · 0 评论 -
VC中IDE的一些使用小技巧
1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号2.查看一个宏(或变量、函数)的宏定义 把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那原创 2012-10-09 11:19:30 · 1550 阅读 · 0 评论 -
访问数组集合类CTypedPtrArray
张明奇(卡哥)集合形状集合类以它的“形状”及其元素类型为主要特性。形状是指集合组织和存储对象的方法。MFC 提供三种基本集合形状:列表、数组和映射(也称作字典)。您可以根据自己的特定编程问题选取最适合的集合形状。列表 列表类提供元素的有序、非索引列表,并作为双向链接表实现。列表有“头”和“尾”,不论是从列表头或列表尾添加或移除元素,还是在列表中间插入或删除元素,速度都非常快。数原创 2012-10-11 10:48:03 · 2971 阅读 · 0 评论 -
VC++中的字体设置
VC++中static text字体改变 窗口都有2个和字体有关的函数:CWnd::GetFont()和SetFont(CFont*, BOOL);1)CFont* pFont = m_static.GetFont();2)LOGFONT LogFont;pFont->GetLogFont(&LogFont);3)对LogFont直接操纵修改里面的字体选项//如LogFon转载 2013-04-10 10:55:20 · 2089 阅读 · 0 评论 -
(图解) SVN版本冲突解决详解
版本冲突原因: 假设 A 、 B 两个用户都在版本号为 100 的时候,更新了 kingtuns.txt 这个文件, A 用户在修改完成之后提交 kingtuns.txt 到服务器,这个时候提交成功,这个时候 kingtuns.txt 文件的版本号已经变成 101 了。同时 B 用户在版本号为 100 的 kingtuns.txt 文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的原创 2013-04-15 17:05:27 · 1396 阅读 · 0 评论 -
MFC CImageList 详解
图像列表控件(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,(可以把这些图标看成是以数组方式存储的),图像列表通常由大图标或位图构成,其中包含透明位图模式(实际上,所有的再一个图像列表中的图标都被存储在一个屏幕设备的位图中)。可以利用windows API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像邓操作。图像列表控件提供了控制图像列表额基本方转载 2013-10-10 09:36:47 · 2182 阅读 · 0 评论 -
GetKeyState 和 GetAsyncKeyState 区别
使用::GetKeyState()返回一个short型的数,short型是16位有符号的数据类型,如果要查询的键被按下,返回值最高位被置1,则这个数表示负数,所以可以用0来判断。0x8000是16进制数,用2进制表示为1000 0000 0000 0000, &是按位与同样,如果键被按下,返回值最高位为1,则1xxx xxxx xxxx xxxx & 1000 0000 0000 0000转载 2014-01-05 17:36:50 · 2773 阅读 · 0 评论 -
保存应用程序屏幕
目标保存应用程序屏幕的大小、位置和状态,包括每个工具栏或对话条的位置和大小,以便应用程序在下一次运行时能恢复它们。策略当应用程序关闭时,不仅保存主窗口的大小和位置,而且还把工具栏和状态栏的状态保存到系统的一个注册区。因此,当应用程序被再次打开时,我们将检索这些消息,并恢复窗口和工具栏等等。步骤1. 保存设置值1) 在系统注册区中定义一个位置,在该位置用一个全局包含文原创 2013-05-29 15:15:31 · 1182 阅读 · 0 评论 -
VC与JavaScript交互(四) ———— WebBrowser或CHtmlView中轻松屏蔽脚本错误(JavaScript)
1.什么是javascript脚本错误1.1 概述JavaScript脚本错误包含“运行时错误”和“语法错误”。1.2 JavaScript“语法错误”JavaScript语法错误是指当 JavaScript语句违反了 JavaScript脚本语言的一条或多条语法规则时导致的错误。JavaScript语法错误发生在程序编译阶段,在开始运行该程序之前。1.3 J转载 2014-10-11 19:01:20 · 6247 阅读 · 1 评论 -
VC与JavaScript交互(三) ———— CWebPage类调用javascript函数(给js函数传参,并取得返回值)
①需要一个别人写好的类CWebPage,将其对于的两个文件WebPage.h和WebPage.cpp添加到工程中。②添加WebBrowser控件,在视图/对话框类的头文件中#include "webbrowser2.h",增加成员变量m_webBrowser,调用Navigate()函数加载一个html页面。③在对话框或者视图的实现文件中,加入#include "WebPage原创 2014-10-11 18:56:37 · 4351 阅读 · 4 评论 -
进程间通信 - 动态链接库实现
引子前面介绍的几种用于实现进程之间通信的方法都是比较正统的方式,像剪贴板,命名管道这些都还是用得比较多的,而这里将介绍的是一种比较偏门的方法来实现进程间的通信,所谓偏门呢,自然就是用的少,能够不用就不要使用。其实这种方法就是通过动态链接库来实现进程间的通信。 动态链接库(DLL)概述转载 2015-01-12 16:49:52 · 926 阅读 · 0 评论 -
VS2010 VC++目录已被否决?
问题引入 下载了一个开源项目RTMP Server,对齐编译时提示没有找到openssl/bn.h文件。于是下载了最新的openssl(openssl-1.0.0d)后,对openssl编译。生成了头文件目录inc32还有库文件目录out32dll。 现在需要把编译好的库引入工程。 当工程比较简单的时候可以在每个项目的属性中设置include路径。但是要是这个工程原创 2014-12-08 09:50:43 · 1541 阅读 · 0 评论 -
内存泄露检测工具 Visual Leak Detector for Visual C++ 2008/2010
Visual Leak Detector是一款免费的检查内存泄露的工具。最新的2.1版本可以很好的支持VS2008/2010。点击这里下载 安装后,在VS中设置Tool->Options 选择Projects and Solutions中的VC++ Directories,将Visual Leak Detector安装路径中的include和lib路径设置Include F原创 2015-03-12 11:33:08 · 1242 阅读 · 0 评论 -
Tinyxml简单使用法
1、概要介绍一下:尝试了tinyxml,rapidxml,libxml2等3中第3方库,前两者相对较为轻量级,libxml2非常完善,强大。这是网上总结出来的优缺点:1、tinyxml当节点内容的空而使用GetText()方法时候会出错2、rapidxml编码问题不是特别好3、libxml2对内存释放要求较高,否则时常遇到core dump.TinyXML是一个原创 2015-04-10 17:57:38 · 954 阅读 · 0 评论 -
TinyXML的简单用法
TinyXML最新的发布版本是2.5.3,一直想用,今天拿出点时间用了用,现在把所掌握的初步简单用法整理一下。首先编译库文件,TinyXML有两个编译版本,取决于是否使用STL。Build之后在新程序代码中include库中的tinyxml.h即可。下面是我的代码:#include #include #include "../tinyxml.h"int main原创 2015-04-10 17:59:28 · 2082 阅读 · 0 评论 -
CTreeCtrl 控件使用总结
一 基础操作 1 插入节点1)插入根节点 [cpp] view plaincopy//插入根节点 HTREEITEM hRoot; CString str=L"ROOT" hRoot=nTreeCtrl.InsertItem(str); //相当于 hRoot=nTreeCtrl.I原创 2015-06-26 17:33:46 · 1630 阅读 · 0 评论 -
VC操作INI文件 ,INI文件操作总结,如何操作INI文件,INI文件使用方法小结
INI文件简介在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化。将一些信息写入INI文件(initialization file)中,可完成简单的持久化支持。Windows提供了API接口用于操作INI文件,其支持的INI文件格式一般如下:===============================[Sectio原创 2015-12-02 11:05:52 · 3217 阅读 · 0 评论 -
MFC中创建透明窗口
第一种 全透明 1.设置窗口透明 //Set WS_EX_LAYERED on this window ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, ::GetWindowLongPtr(GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_LAYERED); //Make this window 70原创 2018-02-28 17:46:19 · 1392 阅读 · 0 评论 -
进程间通信 - 命名管道实现
引子好,到这里呢,就需要介绍实现进程间通信的第四种方式了,也就是通过命名管道来实现,前面介绍的那三种方式呢,都是有缺陷或者说局限性太强,而这里介绍的命名管道相对来说,在这方面就做得好很多了,比如,剪贴板的话只能实现本机上进程之间的通信,而邮槽的话虽然是可以实现跨网络之间的进程的通信,但麻烦的是邮槽的服务端只能接收数据,邮槽的客户端只能发送数据,太悲剧转载 2015-01-12 16:49:16 · 1389 阅读 · 0 评论 -
进程间通信 - 剪贴板实现
引子由于在启动一个进程后,操作系统会给这个进程分配 4GB 的私有地址空间,至于为何有 4GB 这么大,那得考虑进程的私有地址空间和实际物理内存地址空间之间的映射以及页交换等等细节问题了,这里不予讨论,从名字就可以知道,既然操作系统给每一个进程分配的是私有地址空间,自然,这段地址空间也只有这个进程自己才能访问了,不然还称为私有干吗呢?既然这段私有地址空间只能转载 2015-01-12 16:42:56 · 731 阅读 · 0 评论 -
VC与JavaScript交互(二) ———— 调用JS函数
这一章,我们来动手实践VC调用JS函数。我们动手写一个HTML,其中包含这样一段JS代码:[html] view plaincopyscript type="text/javascript"> function Add(value1, value2) { return value1 +原创 2014-10-11 18:53:30 · 5676 阅读 · 4 评论 -
VC与JavaScript交互(一) ———— 如何实现
为什么要让VC与JavaScript交互?1.有时候我们需要让自己的软件打开一个网页,来获取页面上的一些数据。这时,可以用mshtml解析HTML提取出数据,也可以向HTML文档动态写入我们准备好的JS代码,用JS代码获取HTML上的数据,然后用VC调用该JS代码取得数据。2.有时候我们需要让自己的软件打开一个网页并操控该网页,填写表单,提交等动作。这时,可以用mshtml操作HT原创 2014-10-11 18:51:50 · 5185 阅读 · 0 评论 -
BROWSEINFO的结构----获取文件(夹)路径
BROWSEINFO的结构如下:typedef struct _browseinfo { HWND hwndOwner; // 父窗口句柄 LPCITEMIDLIST pidlRoot; // 要显示的文件夾的根(Root) LPTSTR p原创 2013-11-19 15:02:56 · 9443 阅读 · 0 评论 -
Visual C++线程同步技术剖析:临界区,事件,信号量,互斥量
转自:使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果原创 2015-01-28 11:14:10 · 1378 阅读 · 0 评论 -
线程句柄作WaitForSingleObject的参数是什么意思?
[cpp] view plaincopy#include #include DWORD WINAPI Fun1Proc(LPVOID lpParameter); int main() { HANDLE hThread1; hThread1 = CreateThread(NULL, 0, Fun1转载 2015-01-28 11:22:39 · 1561 阅读 · 0 评论 -
进程间通信 - 邮槽实现
引子前面的一篇博文介绍了进程之间通信的一种最为简单的方式,也就是在本地进程之间通过剪贴板来实现进程间通信,而剪贴板自有其缺陷,很显然的是,剪贴板只能在本地机器上实现,无法实现本地进程与远程服务器上的进程之间的通信,那么有没有办法实现本地进程和远程进程的通信呢?办法自然是有的,要是实在搞不出,我拿 Socket 来实现本地进程和远程进程的通信来转载 2015-01-12 16:46:08 · 897 阅读 · 0 评论 -
进程间通信 - 匿名管道实现
引子前面的两篇博文分别介绍了通过剪贴板和通过邮槽来实现进程之间的通信,其中剪贴板呢,是用来实现本地两个进程之间的通信,而邮槽则既可以实现本地两个进程之间的通信,也可以实现本地进程和服务器进程的通信,当然,上面这两种方式都是有局限性的,比如剪贴板就只能实现本地进程之间的通信,而在邮槽中,虽然是既可以实现本地进程之间的通信,又能实现本地进程和远程服务器进程的通信转载 2015-01-12 16:47:42 · 1898 阅读 · 1 评论 -
AfxGetApp() GetMainWnd()
AfxGetApp() GetMainWnd()的使用卡哥(张明奇)AfxGetApp( )是全局的。AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。比如在全局函数中要向对话框中的列表写数据。void writeString(char* pString){ CWnd* pWnd = A原创 2012-09-26 16:06:15 · 970 阅读 · 0 评论 -
托管和非托管
什么是托管代码?托管代码就是Visual Basic .NET和C#编译器编译出来的代码。编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。中间语言被封装在一个叫程序集(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的所有元数据。这个程序集是.NET世界中的一个一站式购物(译者注:就是程序集具有自描述性)部署单元。你可以拷贝这个程转载 2012-09-26 10:24:17 · 676 阅读 · 0 评论