
VC++/MFC
Quebradawill
关注PRMLCV,希望多交流。
展开
-
令人吐血的预编译头文件(precompiled header)
使用VC的人经常遇到fatal error C1083: Cannot open precompiled header file: Debug/xxx.pch: No such file or directory,怎么rebuild all都不行,这是删除了一些中间文件的结果。所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称原创 2008-04-17 09:04:00 · 1448 阅读 · 0 评论 -
什么是回调函数(callback)?
回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。 模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让A作出相应反应。 那么我们就把foo原创 2009-03-16 22:17:00 · 3519 阅读 · 0 评论 -
类型转换
static_cast——并非强制转换(C++没有强制转换),而是相关类型转换,比如int到long,子类指针到父类的转换const_cast——常量到非常量的转换 dynamic_cast——父类到子类的转换 reinterpret_cast——不同类型之间的转换,比如void*指针转为int原创 2009-03-15 20:25:00 · 408 阅读 · 0 评论 -
MFC Spin控件出现的一些奇怪的问题——Buddy Windows的问题
对话框里Spin控件会自动吸附到TabOrder在它前一位的控件上,很多时候添加控件的顺序乱掉了,例如从别的地方拷贝,或者修改过TabOrder的顺序而没有注意到Spin控件和它的配对Edit控件的顺序时。因此会造成很多奇奇怪怪的错误。 首先一个就是无法吸附到正确的控件上,临时的解决方法就是在OnInitDialog调用CSpinButtonCtrl::SetBuddy(CWin*) 函数转载 2008-12-19 15:32:00 · 2355 阅读 · 0 评论 -
printf的格式控制的完整格式
% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。⑤l或h:l对整型指long型,对实型指转载 2009-02-28 08:42:00 · 1209 阅读 · 0 评论 -
堆、栈及静态数据区详解
内存分为代码区、全局数据区、堆区和栈区。堆一般存放动态数据,栈里一般存放局部成员。 关于堆栈和堆的概念(hangwire发表于2002-1-11 21:31:06)[问题]C++中创建本地(或者说局域)变量是在堆栈(stack)中分配内存地址,而创建全局变量则是在堆(heap)中分配内存地址。我想知道什么是堆(heap)?为什么全局变量和本地变量在分配内存地址时要分别对待,堆和原创 2009-02-26 20:58:00 · 5679 阅读 · 3 评论 -
在VC中使用自定义资源
在VC中使用自定义资源,FindResource,LoadResource一、前言在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。1. 默认的皮肤压缩包或语言包。一些支持换肤的软件特别是一些媒体播放器常常有自定义的皮肤文件(你可以尝试将Medi转载 2009-02-23 16:37:00 · 1302 阅读 · 0 评论 -
什么是static?
1、什么是static?static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 2、为什么要引入static?函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题:如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为转载 2009-02-23 08:42:00 · 1372 阅读 · 0 评论 -
C++中几个比较不常用的关键字
1、volatile关键字 volatile是c/c++中一个鲜为人知的关键字,该关键字告诉编译器不要持有变量的临时拷贝,它可以适用于基础类型。如:int,char,long……也适用于C的结构和C++的类。当对结构或者类对象使用volatile修饰的时候,结构或者类的所有成员都会被视为volatile。 使用volatile并不会否定对CRITICAL_SECTION,Mutex,E转载 2009-02-19 20:35:00 · 649 阅读 · 0 评论 -
DLL详解
DLL文件(Dynamic Linkable Library 即动态链接库文件),是一种不能单独运行的文件,它允许程序共享执行特殊任务所必需的代码和其他资源 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 EXE转载 2009-03-19 21:06:00 · 1690 阅读 · 0 评论 -
看到的一份不错的介绍“堆和栈的区别”的资料
堆和栈的区别(转贴,作者为一c++程序员,具体姓名不清楚) 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—> 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—> 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似转载 2009-03-19 21:07:00 · 595 阅读 · 0 评论 -
VC++中的回调函数,即callback类型函数的作用
C/C++中回调函数初探 简介 对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用转载 2009-03-30 16:26:00 · 14053 阅读 · 0 评论 -
常用数据类型使用转换详解
类型 定义 ------------------------------------------------------------- ATOM 原子(字符串在原子表中的参考值) BOOL转载 2009-03-22 21:17:00 · 1514 阅读 · 1 评论 -
[交流]Win32 DLL的一个调试心得
出处:http://blog.youkuaiyun.com/clever101/archive/2008/06/21/2574146.aspx 在MFC工程(包括单文档、多文档、基于对话框、MFC DLL等)调试程序时可以使用trace宏来输出相关变量的值,在Win 32工程(包括Win32 Application和Win 32DLL)只能使用OutputDebugString函数来输出相关变量值。但是我觉得转载 2009-03-19 21:10:00 · 804 阅读 · 0 评论 -
C/C++预处理 ISO/ANSI C标准译文与注解
> 内容简介:本文档完整翻译了C标准(99版)中预处理和相关章节的内容,并在许多必要之处附加了注解和程序示例,以帮助读者理解标准原文,同时制作了详细的中英文索引备查。 译者:胡彦 出处:http://blog.youkuaiyun.com/huyansoft 如果转载,请保留译者和出处信息,谢谢! 本文同时制作了CHM格式的文档,可在http://download.youkuaiyun.com/source/468852转载 2009-03-19 21:08:00 · 1658 阅读 · 0 评论 -
常用数据类型使用转换详解
读者层次:初学 刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。 我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="程"; char temp[200]; char *buf; CString str; _va转载 2009-03-19 21:04:00 · 478 阅读 · 0 评论 -
VC++获得当前系统时间的几种方案
//方案— 优点:仅使用C标准库;缺点:只能精确到秒级 #include #include int main( void ) { time_t t = time( 0 ); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天原创 2009-03-16 20:55:00 · 604 阅读 · 0 评论 -
调试方法和技巧
便于调试的代码风格:不用全局变量 所有变量都要初始化,成员变量在构造函数中初始化 尽量使用const 详尽的注释 VC++编译选项:总是使用/W4警告级别 在调试版本里总是使用/GZ编译选项,用来发现在Release版本中才有的错误 没有警告的编译:保证在编译后没有任何警告,但是在消除警告前要进行仔细检查 调试方法:1、使用 Assert(原转载 2009-03-18 20:52:00 · 523 阅读 · 0 评论 -
VC调试入门
概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要地根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。 设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的转载 2009-03-18 20:44:00 · 633 阅读 · 0 评论 -
请问用VC怎么把文字绘到图片中?就像网页上的那些验证码一样
先在内存中创建一"画布",在这块"画布"上写字,然后返回这块这块"画布",就得到写好文字的图片了C/C++ code <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//功能: 创建一位图,位图上已写好了文字转载 2009-02-21 16:16:00 · 2811 阅读 · 0 评论 -
深入理解C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类转载 2009-02-19 20:33:00 · 725 阅读 · 0 评论 -
在VC中添加响应自定义的消息的代码步骤
1. 首先定义一个消息代码#define WM_DEBUG WM_USER + 19992. 在窗口头文件中添加class CStreamServerDlg : public CDialog{// Generated message map functions//}AFX_MSGafx_msg void OnDebug(WPARAM wParam,转载 2009-01-19 21:54:00 · 675 阅读 · 0 评论 -
VC中的*.aps,*.ncb.*.opt文件分别是做什么用的???
.clw 支持ClassWizard.ncb 支持ClassView.opt 保存工作空间的配置.aps 支持ResourceView.bsc 浏览器信息文件.dsp 项目文件.dsw 工作空间文件.mak 外部的创建文件.plg 建立日志文件转载 2009-01-14 11:20:00 · 6601 阅读 · 0 评论 -
怎样在VC++中删除一个类
如何彻底删除一个类?[问题提出]我在程序里加入了其它的类,现在我不想要了,如何删除它呢? 解决方法1:1、在资源管理器中删除xxx.h xxx.cpp 2、以文本方式打开MMM.dsp,删除以下两部分,其中//xxx为你要删除的类,MMM为你的工程名称SOURCE=./XXX.cpp # End Source File #原创 2008-06-13 15:20:00 · 9551 阅读 · 0 评论 -
在状态栏添加时间显示
1.我在string tab中添加了一个New String,在此定义为ID_INDICATOR_CLOCK,将其 Caption设为00:00:00 2.在static UINT indicators[] = { ID_SEPARATOR, ID_INDICATOR_CLOCK,//添加 ID_INDICAT原创 2008-06-05 16:03:00 · 1066 阅读 · 0 评论 -
error LNK2001: unresolved external symbol _main
error LNK2001: unresolved external symbol _main解决办法2007年04月07日 星期六 11:39作者: liuhuinwpu 发表日期: 2006-05-28 复制链接 收藏解决外部符号错误:_main,_WinMain@16,__beginthreadex ) 在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数,就原创 2008-05-14 10:54:00 · 651 阅读 · 0 评论 -
VC常见LINK处理方法
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(wincrt0.obj) : error LNK2001:转载 2008-04-16 13:03:00 · 745 阅读 · 0 评论 -
VC++的链接错误LNK2001
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: un转载 2008-04-16 12:33:00 · 630 阅读 · 0 评论 -
The project cannot be built
编写VC++程序时,出现如下的错误提示: 经上网查询知应如此解决:你的工程下面出现了两个StdAfx.cpp!在工作窗口=>File View=>Source Files=>把多余的StdAfx.cpp按Del键移除即可。原创 2008-11-26 15:47:00 · 1789 阅读 · 0 评论 -
VC编程常见问题解答收集贴
1.使用ModifyStyleEx改变了控件风格无效 答:修改之后,重绘一次,如果还不行的话,再试试看调用SetWindowPos(0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_DRAWFRAME); 2.动态设置编辑框的ES_PASSWORD无效 答:修改之后,需要调用一次SetPasswordChar(*); 3.如何获取任务栏小图标? 答:有网友提出,能转载 2009-01-26 20:13:00 · 1800 阅读 · 0 评论 -
const成员函数
const在定义函数时位于函数名之后表示这个成员函数不修改任何成员变量——如果修改,编译通不过的。 const传奇原作:Rahul Singh 翻译:zhigang 简介当我自己写程序需要用到const的时候,或者是读别人的代码碰到const的时候,我常常会停下来想一会儿。许多程序员从来不用const,理由是即使没用const他们也这么过来了。本文仅对const的用法稍作探讨转载 2009-02-19 20:15:00 · 897 阅读 · 0 评论 -
VC编程经验总结
1、fatal error C1010: unexpected end of file while looking for precompiled header directive该如何解决?如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择N转载 2009-02-17 15:06:00 · 1361 阅读 · 0 评论 -
#define WINVER 0x0500有什么意思?起什么作用?
WINVER>=0X500指Win2000以上。有些API或常数只有在Win2000以上才支持。原创 2009-02-13 14:41:00 · 3472 阅读 · 0 评论 -
ComboBox为何不显示下拉框?
属性中我选DROPDOWNLIST,并已经用InsertString()加入了数据,就是点击下拉按钮是下拉框像是萎缩了,什么也没有,这是怎么回事呀?单击ComBox控件右侧的小三角,会出现一个带控点的矩形,最下边中间的控点为黑色,用鼠标拖动它可以调整LIST的大小。原创 2008-11-26 16:09:00 · 6106 阅读 · 2 评论 -
static 的作用
1、函数之外的变量就是全局变量,这个想法正确吗?答:在C中,完全正确。只不过按有没有加static修饰可以分为静态全局变量和一般全局变量两种。2、如果在全局变量的前面加上static会有什么用?答:在C中,静态全局变量意味着两个方面。一、在生命期方面,它与一般全局变量一样,是与整个程序共存亡的;二、在可见性方面,它只在定义它的那个编译单元中可见。比如说,你在testA.c中定义了一个静态全局变转载 2009-01-23 11:56:00 · 539 阅读 · 0 评论 -
如何给工程文件改名?
将工程文件夹中的所有文件都拷贝到新文件夹中,并改名,用记事本或写字板等文字编辑工具将dsp、dsw、rc、resource.h等文件中的原工程名改为现工程名,用VC打开工程,必要时在VC中修改原工程名为现工程名。原创 2009-02-01 21:48:00 · 2530 阅读 · 0 评论 -
定义VC 消息映射函数小结
消息映射机制是Windows编程的核心内容。Windows下的应用程序也都是通过消息驱动的机制来进行工作的。虽然VC开发环境自带了大量的系统消息处理函数,但我们实际的程序开发过程中总还是避免不了要写一些自定义的消息处理函数以满足所编写的软件功能的需要。那么在VC中如何定义自己的消息处理函数呢?其步骤如下: 1、在要定义消息映射函数的类的首部通过宏定义的方式定义一个用户类型的消息标识。定义方转载 2009-01-29 15:56:00 · 2218 阅读 · 2 评论 -
什么是宏?
宏语句在预编译的时候被处理,也就是在预编译时被宏体所替代。 它在某些地方与函数相似,但可省去函数调用的代价,但是代码长度会大一些。因为不管宏语句在代码中出现了多少次,每次都被完整的宏体所替代,而函数码在程序中只存在一次就可以了。 宏是一段完成特定功能的代码,和C++的内联函数相似。与函数的区别,是宏将代码复制到调用处,而函数是转去执行,如调用10次,则宏的代码被复制10次,而函数的原创 2009-01-28 21:44:00 · 2045 阅读 · 1 评论 -
VS 项目中添加 include、lib 库文件
VS 项目中添加 include、lib 库文件把 …\ege-13.04.02-full\lib\vc2013\graphics.lib 拷贝到 D:\Program Files\Microsoft Visual Studio 12.0\VC\lib 中把 …\ege-13.04.02-full\include 中所有文件拷贝到 D:\Program Files\Microsoft Visua原创 2015-04-03 16:56:58 · 6257 阅读 · 0 评论