VC/MFC基础知识
文章平均质量分 74
wangjiwei2010
这个作者很懒,什么都没留下…
展开
-
CString,string,char*的综合比较
CString,string,char*的综合比较 (一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用转载 2007-05-22 20:23:00 · 1108 阅读 · 0 评论 -
一个图形爱好者的书架.-也来介绍一下我的藏书.
早几天看到有人把自己在大学四年的书列了出来.招来一顿怀疑.我是开发图形程序的.我现在也把我的书列出来.不怕大家怀疑吧.希望能有点启示作用.绿色的是我看完了的。红色的是没怎么看的。黄色的是看了一半以上的。首先是基础部分:语言类:C++ Programming Language (Special Edition).C++的圣经级别的书.我只看原文的。不看翻译的.对球教授的翻译表示一定的保留转载 2007-04-11 22:01:00 · 1006 阅读 · 0 评论 -
指针函数和函数指针有什么区别
1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示: 返回类型标识符 *返回名称(形式参数表) { 函数体 } 返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址, 该地址相当于转载 2007-04-11 20:35:00 · 751 阅读 · 0 评论 -
判断一个指针是否为空,abort()、assert、抛出异常的使用、ASSERT与VERIFY宏的区别
判断一个指针是否为空//vs20051. abort()#include//...if(!ptr) abort();2. assert#include//....assert(ptr!=0);//assert(xx);当xx为非零值时,无异常,当xx为零食异常中断3. 抛出一个异常if(!ptr) throw "Panic: prt ==0";4.ASSERT与VERIFY宏的区别原创 2007-04-10 11:22:00 · 3717 阅读 · 0 评论 -
函数指针数组的妙用
函数指针数组的妙用 笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。我的任务是必须对每一种可能出现的数据类型都转载 2007-04-05 11:17:00 · 746 阅读 · 0 评论 -
c/c++中指针参数如何传递内存
c/c++中指针参数如何传递内存来自林锐的《高质量c++编程指南》指针参数是如何传递内存的? 7-4-1Test数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, i转载 2007-04-05 11:24:00 · 1497 阅读 · 0 评论 -
成员初始化列表和构造函数体中的区别
成员初始化列表和构造函数体中的区别 论坛中回答一个别人问题C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值。请问这里的初始化数据成员与对数据成员赋值的含义是什么?有什么区别?转载 2007-04-05 11:18:00 · 1425 阅读 · 0 评论 -
你应当如何学习C++(以及编程)
Javascript是世界上最受误解的语言,其实C++何尝不是。坊间流传的错误的C++学习方法一抓就是一大把。我自己在学习C++的过程中也走了许多弯路,浪费了不少时间。 为什么会存在这么多错误认识?原因主要有三个,一是C++语言的细节太多。二是一些著名的C++书籍总在(不管有意还是无意)暗示语言细节的重要性和有趣。三是现代C++库的开发哲学必须用到一些犄角旮旯的语言细节(但注意,是库设计,转载 2007-06-21 21:07:00 · 1643 阅读 · 0 评论 -
关于 int *p = NULL; char *p = NULL; 的问题:
问题:void main() { int *p = NULL; cout cout } 输出结果为: 0x00000000 0x0012FF7C void main() { char *p = NULL; cout cout原创 2007-03-22 17:18:00 · 4276 阅读 · 1 评论 -
VC6.0编译器参数设置
VC6.0编译器参数的设置主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/Writ转载 2007-02-07 16:14:00 · 2011 阅读 · 0 评论 -
MFC CObject浅析
FMD开发文集 -- MFC CObject浅析作者:冯明德CObject是大部分的MFC类的基类 为了完成MFC类的判断、动态生成、序列化等特殊功能,CObject中添加了特定的处理。 为了进一步增强对MFC类对象的理解,在此对CObject源码及相关宏定义进行分析。 (所附代码并非原始代码,为说明问题而作了删减。) 主要介绍了以下几方面内容:1.CObject简要声明2.CRuntimeC转载 2006-08-14 09:39:00 · 860 阅读 · 0 评论 -
C++资源之不完全导引
C++资源之不完全导引 [上] 撰文/ 曾毅陶文 最后更新:2004年6月11日转载 2007-04-12 17:52:00 · 1594 阅读 · 9 评论 -
剖析 const用法
const主要是为了程序的健壮型,减少程序出错.最基本的用法:const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100)int const b=100; //和上面作用一样 const指针和引用一般用在函数的参数中int* m = &a; //出错,常量只能用常指针int c= 1;const int*pc = &c;//常指针转载 2007-04-19 17:59:00 · 858 阅读 · 1 评论 -
C、C++天下平分
一、#include “filename.h”和#include#include “filename.h”是指编译器将从当前工作目录上开始查找此文件#include 二、头文件的作用加强安全检测通过头文件可能方便地调用库功能,而不必关心其实现方式三、* , &修饰符的位置对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名四、if语句不要将布转载 2007-04-17 23:13:00 · 1515 阅读 · 5 评论 -
C++中的临时变量
C++的临时变量 它们是被神所遗弃的孩子,没有人见过它们,更没有人知道它们的名字.它们命中注定徘徊于命运边缘高耸的悬崖和幽深的深渊之间,用自己短暂的生命抚平了生与死之间的缝隙.譬如朝露,却与阳光无缘.是该为它们立一座丰碑的时候了,墓铭志上写着:我来了,我走了,我快乐过. 许多人对临时变量的理解仅仅限于: string temp; 其实,从C++的观点来看,这根本就不是临时变量,而是局部变量.转载 2007-05-25 15:34:00 · 6184 阅读 · 0 评论 -
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。
3.1 static_cast用法:static_cast ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类转载 2007-05-24 21:09:00 · 1356 阅读 · 0 评论 -
void类型及void指针
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一原创 2007-05-24 20:22:00 · 5805 阅读 · 2 评论 -
VC小技巧(1)---禁止同一应用程序同时运行 2,3,4,5,6..
防止同一应用程序被打开两个实例有时候为了避免不必要的错误,应防止同一应用程序被打开两个实例以下一个函数可以达到此项目的,挺有用的!BOOL C××App::AlreadyRunning(){ BOOL bFound = FALSE; // Try to create a mutex with the apps name HANDLE hMutexOneIns转载 2007-05-22 00:32:00 · 1132 阅读 · 0 评论 -
准备的华为面试题
整理归纳者:六子 网址:http://blog.csdn.net/wangjiwei2010触发器的作用?主要功能:维护数据完整。 主要用途:1;维护超出了简单参照完整性的数据完整性原则。 2,保持合计值的更新。 3,保持计算列值的更新 4,实现参照动作,例如级联删除。 5,维护关于关于变化情况的审核记录。 6,激发一个外部动作。 --原创 2007-04-22 23:10:00 · 1441 阅读 · 0 评论 -
剖析 C++中的结构体与sizeof
提问的帖子:#includeclass Base{public:int x;int y;int h[2];char a;char b[3];char c[1];};void main(){Base dd;cout }为什么结果输出为24?帖子地址:http://community.csdn.net/Expert/topic/5478/5478106.xml?temp=.6268732/原创 2007-04-20 13:48:00 · 1061 阅读 · 0 评论 -
volatile关键字的用义和用法(一)
c++ volatile用法(转) 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-auto转载 2007-04-19 10:58:00 · 1350 阅读 · 0 评论 -
各知名企业笔试题笔经大全
微软亚洲研究院笔试题微软研究院(亚洲)的网址是:http://research.microsoft.com/asia/1.改错#include #include class CBuffer{ char * m_pBuffer; int m_size; public: CBuffer() { m_pBuffer=NULL; } ~CBuffer()转载 2007-04-23 16:23:00 · 5071 阅读 · 3 评论 -
typeid的用法
#include iostream>#includetypeinfo.h>using namespace std;class A...{private: int x,y; char b[3];public: A()...{ x = 9; y = 8;} int Add()...{return x + y;} //virtual print()const{ cout转载 2007-04-19 15:15:00 · 1408 阅读 · 0 评论 -
剖析 C++ 引用
C++引用2006-10-19 17:05 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理转载 2007-04-19 13:15:00 · 941 阅读 · 0 评论 -
C++的多态性实现机制剖析(即VC视频第3课this指针讲解)
C++的多态性实现机制剖析(即VC视频第3课this指针讲解)C++的多态性实现机制剖析――即VC++视频第三课this指针详细说明作者:孙鑫 时间:2006年1月12日星期四1. 多态性和虚函数我们先看一个例子:例1- 1#include class animal{public: void sleep() { cout } void breathe() { co转载 2006-08-10 17:51:00 · 2246 阅读 · 0 评论 -
在VC6.0中虚函数的实现方法
在VC6.0中虚函数的实现方法虚函数?!虚拟+函数?!听起来很恐怖的样子。如果你知道使用微波炉煎鸡蛋和使用煤气炉煎鸡蛋的方法和步骤绝对不一样的话,就应该知道为什么需要虚拟函数和在什么情况下使用虚拟函数,这些都是课堂上的内容,相信大家已经滚瓜烂熟,我也就不罗嗦了。我在这里是要和大家讨论虚拟函数的技术内幕——后期联编(Late binding),但是,如果你对以上我所提到的还没有完全的领悟的话转载 2006-08-10 17:42:00 · 2536 阅读 · 0 评论 -
对句柄本质的探讨
对句柄的认识 之前在编写MFC程序的时候,有时会碰到句柄这一概念,由于对它一直不是很重视,所以并没有主动去了解它.随着不断深入学习MFC,特别是看完候先生的>后,对句柄的实质产生了很大的兴趣,于是到处收集资料,现在总结一下. handle的中文意思主要有多种,一种是作为名词:柄,把柄;一种是作为动词:处理.硬要从中文意思来说的话,这两种中文意思都可以用来勉强解释句柄.例如一个锅的手柄,你只要抓住了转载 2006-11-24 17:05:00 · 1866 阅读 · 0 评论 -
一般性编程问题
一般性编程问题 4目录:原文网址:http://www.caocao.cn/VCstudy.htmC++、MFC 4如何让两个对话框的同时显示 4无模式对话框参数传递的一个示例 6如何让两个对话框相互调用 11创建无模对话框 12Button加入Icon 12自绘制CButton 12对话框背景自绘 16实现转载 2006-09-22 13:15:00 · 1451 阅读 · 2 评论 -
Windows消息大全
Windows消息目录1. WM_NULL=$0000:2. WM_CREATE=$0001: 应用程序创建一个窗口3. WM_DESTROY=$0002: 一个窗口被销毁4. WM_MOVE=$0003: 移动一个窗口5. WM_SIZE=$0005:改变一个窗口的大小6. WM_ACTIVATE=$0006: 一个窗口被激活或失去激活状态;7. WM_SETFOCUS=$0007:转载 2006-09-26 15:59:00 · 865 阅读 · 0 评论 -
PostMessage, SendMessage 之区别
PostMessage马上返回而 SendMessage等待发送消息的被处理后才返回 ----------------------------------------------------------- Paul DiLascia Download the原创 2006-09-26 13:40:00 · 2640 阅读 · 0 评论 -
Visual C++ MFC 中常用宏的含义
AND_CATCHAND_CATCH AND_CATCH(exception_class,exception _object_point_name) 说明: 定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。在AND_CATC转载 2006-09-22 12:37:00 · 958 阅读 · 0 评论 -
手把手教你手工添加消息的方法
手把手教你手工添加消息的方法1)新建工程Test(MFC),建立基于对话框(Dialog based)的工程,Finish.2)在TestDlg.h文件中,添加 ///////////////////////////////////////////////////////////////////////////// // CTestDlg dialog #define WM_TEST WM_US原创 2006-09-30 16:07:00 · 1327 阅读 · 1 评论 -
MFC 教程 作者:李久进
MFC 教程作者:李久进 作者序----------- 我曾写一本关于MFC的书,分析了MFC的结构和设计(《MFC深入浅出》),华中理工大学出版。书的内容建立在对MSDN和MFC SOURCE CODE的大量分析上,该书对于希望学习MFC的人来说,是较有价值的。可惜出版社好象只在几个转载 2006-09-22 12:44:00 · 1725 阅读 · 0 评论 -
在MFC中应用CTreeCtrl控件的技巧
在MFC中应用CTreeCtrl控件的技巧作者:阿宽 下载源代码 首先,我们要创建一个基本对话框的MFC工程MFC_TreeCRTL(名字随便给一个)。然后在资源视图中插入两个Dialog,ID分别为IDD_DIALOG11和IDD_DIALOG211,都更改Style属性为Chil转载 2006-09-22 16:01:00 · 1350 阅读 · 0 评论 -
VC++使用过程中的技巧及问题
1、在数据库操作时,将系统自动生成的CTime替换成COleDateTime。 2、在操作ACCESS数据库时,字符串的标识是:单引号;日期/时间类型的标识是:# 3、将 DDX_FieldDateTimeCtrl(pDX, IDC_PUBLISHDATE, m_pSet->m_publishDate,m_pSet); 替换成: DDX_DateTimeCtrl(pDX转载 2006-09-22 12:30:00 · 1163 阅读 · 0 评论 -
最常见的20种VC++编译错误信息
最常见的20种VC++编译错误信息1、fatal error C1010: unexpected end of file while looking for precompiled header directive。寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h") 2、fatal error C1083: Cannot open include f转载 2006-09-19 16:13:00 · 1789 阅读 · 1 评论 -
#pragma 预处理指令详解
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para 其中para为参数转载 2006-09-16 04:44:00 · 843 阅读 · 0 评论 -
互联网分销模式拯救困境中的应用软件产业
互联网分销模式拯救困境中的应用软件产业 对共享软件业者而言,没有比共享软件遭遇破解更加糟糕的事了。 以“破解超级兔子”为关键词“google”一下,会出现31万个结果。与解密者的较量令《超级兔子魔法设置》软件的作者蔡旋疲惫不堪,长期以来,和蔡一样的共享软件作者都身陷“不断加密、不断被破解”的恶性循环之中。 在中国的共享软件行业,靠出售Foxmail版权获取1200万元的张小转载 2006-09-22 18:07:00 · 1250 阅读 · 0 评论 -
WPARAM与LPARAM 之区别
WPARAM与LPARAM 之区别 在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别。因为地址通常是32位的,所以LPARAM被用来传递地址,这个习惯在Win32 API中仍然能够看到。在Win32 API中,WPARAM和LPARAM都是32位,所以没有什么本质的区别。Windows的消息必须参考帮助文件才能知道具体的含义。如果是你定义的消息,愿意怎么原创 2006-10-08 11:20:00 · 1300 阅读 · 0 评论 -
常用控件Radio Button的常用用法
常用控件Radio Button的常用用法 作者:zuilang先为对话框加上2个radio button,分别是Radio1和Radio2。问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,第一种:((CButton *)GetDlgItem(IDC_RADIO1))->Set转载 2006-10-09 11:45:00 · 1865 阅读 · 0 评论