c/c++/MFC
sylvia:-)
一枚程序元
展开
-
AfxGetApp()和GetSafeHwnd()
AfxGetApp()这个函数在VC当中很常见,主要是用来获取当前App的CWinApp类指针。一般情况下将其强制类型转换成你自己写的App类就可以调用里面的方法了。我通常把一些重要的工程一开始就需要初始化的并且在其它地方类中都要用到的变量或函数定义在C***App类中,然通过此函数获得这些变量或函数。如果你定义为取全局变量,只需在需要的地方用extern声名即可。如果把变量在你的转载 2013-08-22 08:46:25 · 548 阅读 · 1 评论 -
vc++6.0编辑窗口怎么才能插入而不覆盖后面的代码
你看看你编译器右下角是不是如图所示:OVR是黑色显示的。你按一下键盘上得插入(insert)看到OVR变成灰色就行了~~~转载 2013-03-27 16:27:18 · 1364 阅读 · 0 评论 -
.net 和MFC 比较
1,MFC是在API的基础上封装出来的一个类库,给C++程序员在Windows上快速开发用的。.Net类库是在Windows非托管API的基础上封装出来的一个托管类库,给程序员在各种Windows平台上跨平台开发用的。2,只是两个不同平台的编程,一个是NET平台,一个是WIN323,.net的基类是基于.net运行时库的,通过运行时库对操作系统和硬件进行转载 2013-03-22 11:41:58 · 1459 阅读 · 0 评论 -
FILETIME的使用
typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime;} FILETIME, *PFILETIME, *LPFILETIME; typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD转载 2013-03-21 11:12:14 · 1191 阅读 · 0 评论 -
__declspec(dllimport)
是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。转载 2013-03-21 10:48:26 · 963 阅读 · 0 评论 -
Json
一,Json的规格1) 并列的数据之间用逗号(",")分隔。2) 映射用冒号(":")表示。3) 并列数据的集合(数组)用方括号("[]")表示。4) 映射的集合(对象)用大括号("{}")表示。json只有这四种格式规格"北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。"这转载 2013-03-21 10:51:59 · 652 阅读 · 0 评论 -
白乔原创:VC之美化界面篇
本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:1. 大致了解MFC框架的基本运作原理;2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制;3. 熟悉OOP理论和技术;本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。 1. 美化界面之开题篇相信使用过《金山毒霸》、《转载 2013-02-28 00:50:37 · 1013 阅读 · 0 评论 -
关于WM_ERASEBKGND和WM_PAINT的深刻理解
WM_ ERASEBKGND消息 参考文章:白乔原创:VC之美化界面篇 Windows在窗口的具体绘制之前,会发送WM_ERASEBKGND消息通知该窗口檫除背景。默认情况下,会以窗口的默认背景色清除窗口。 消息响应函数为:afx_msg BOOL OnEraseBkgnd(CDC* pDC)。 以下Demo为对话框加载了一副位图背景。1、首先导入一副位图转载 2013-02-28 00:45:38 · 1109 阅读 · 0 评论 -
c++中的VERIFY具体的语法
原型:VERIFY( booleanExpression )参数:一个逻辑表达式作用:在DEBUG调试状态下,确保逻辑表达式的参数为真,否则将弹出错误提示并终止程序运行。比如:VERIFY(num==0);当程序在DEBUG调试模式运行到这里时,判断变量num是否等于0,如果是,则程序继续往后面运行;如果不是,则弹出错误,并终止程序运行。转载 2013-02-27 23:53:40 · 4707 阅读 · 0 评论 -
工具条研究手记(5)- 自定义工具条的实现
/*****************************************************************//* 工具条研究手记(5)- 自定义工具条的实现 *//*****************************************************************/一、简介转载 2013-03-28 13:15:09 · 977 阅读 · 0 评论 -
INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString
GetPrivateProfileString::WritePrivateProfileString( _T("Options"), _T("Name"), m_strName, pApp->m_szIni );INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString 在我们写的程转载 2013-05-06 17:11:46 · 636 阅读 · 0 评论 -
用VC++实现应用程序窗口的任意分割
我们在使用OutLook或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割。 那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢?要解决这个问题,在Visual C++6.0编程中就需要使用到MFC提供的CSplitterWnd类。CSplitterWnd看上去像是一种特殊的框架窗口,每个窗口都被相同的或者不同的视图所填充转载 2013-06-28 10:47:06 · 844 阅读 · 0 评论 -
VC里的"#define new DEBUG_NEW"
以下代码常常在一个类文件的开头出现,是什么意思呢?#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif先看MSDN里的解释:RemarksAssists in finding memory leaks. You can use转载 2013-06-26 12:02:56 · 529 阅读 · 0 评论 -
GDI GDI+ 双缓冲解决闪烁
最近工作遇到绘制控件的问题,该控件会不断刷新,其所在的view可能贴图,也可能用纯色的画刷刷。这样就产生了问题了,控件狂闪,特别是有背景图的时候。该控件绘制的时候用的是GDI,过程中考虑到圆滑处理等又用到了GDI+。现在用双缓冲解决闪烁问题。 一 、GDI 双缓冲这样做: CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象原创 2013-06-06 11:08:54 · 4183 阅读 · 0 评论 -
一个程序只运行一个实例
我们在使用《金山词霸》时发现,在《金山词霸》已经运行了的情况下,再次点击《金山词霸》的图标,那么它不会再运行另外一个《金山词霸》,而是将已有的《金山词霸》给激活,始终只能运行一个《金山词霸》的实例。在我们的程序当中如果要实现类似《金山词霸》的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实例激活,同时退出第二个应用程序实例。对于第一个问题,我们可以通过设置转载 2013-06-09 10:11:22 · 716 阅读 · 1 评论 -
调用约定
在windows平台上的C++编程中经常会看到一些__stdcall, __cdecl, WINAPI, CALLBACK等等关键字在函数前面,在.NET中还有__clrcall, __thiscall等关键字,有时加不加它们都可以,但是有时必须加上,不然编译不过。本文要讨论的就是这些关键字:调用约定(Calling Convention),有时也叫做“函数调用约定”或者“调用规范”。本文采用MS转载 2013-06-05 10:16:57 · 465 阅读 · 0 评论 -
UpdateData、Invalidate、InvalidateRect和UpdateWindow及RedrawWindow
原文地址:UpdateData、Invalidate、InvalidateRect和UpdateWindow及RedrawWindow作者: 蒋佩钊(jk-3126)Invalidate和UpdateWindow的区别按引:Invalidate在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。而UpdateWindow直接发送一个WM_PAINT消息,其无效区范围转载 2013-06-03 17:20:39 · 581 阅读 · 0 评论 -
CArchive 原理
CArchive 原理FMD(http://www.fmdstudio.net) MFC 提供CArchive类实现数据的缓冲区读写,同时定义了类对象的存储与读取方案。 以下对CArchvie 的内部实现作分析。 1.概述 2.内部数据 3.基本数据读写 4.缓冲区的更新 5.指定长度数据段落的读写 6.字符串的读写 7.CObject派生对象的转载 2013-05-06 17:25:03 · 511 阅读 · 0 评论 -
GetMessage和PeekMessage的区别
在Win32中使用GetMessage和PeekMessage都可以获取对应该程序产生的消息。他们有什么区别呢?GetMessage的一般用法是GetMessage(&msg,NULL,0,0);这样可以接受所有的消息,GetMessage在没有产生消息的时候并不返回,而是一直在等待,直到一个消息返回;当消息不是WM_QUIT时,返回一个非零值,也就是说,当是WM_QUIT转载 2013-02-27 21:50:06 · 386 阅读 · 0 评论 -
CToolTipCtrl使用详细解说
很多的界面设计都需要有Tip提示,下面描述一下Tip的简单使用方法:1. 首先要New一个CToolTipCtrl的对象m_pContentTip2. 调用CToolTipCtrl的create函数,指定其父窗口。可以为某个控件,也可以为this。一般设为this。m_pContentTip->Create( this, TTS_ALWAYSTIP );3. Add转载 2013-02-27 21:34:44 · 389 阅读 · 0 评论 -
VC++无闪烁刷屏技术
VC++无闪烁刷屏技术 在实现绘图的过程中,显示的图形总是会闪烁,笔者曾经被这个问题折磨了好久,通过向高手请教,搜索资料,问题基本解决,现将文档整理出来以供大家参考.1.显示的图形为什么会闪烁 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用O转载 2013-02-27 23:50:55 · 540 阅读 · 0 评论 -
CreateCompatibleDC用法
CreateCompatibleDCCreates a memory device context that is compatible with the device specified by pDC. 假如需要对屏幕进行比较多的gdi函数操作,如果每一步操作都直接对屏幕dc进行操作,那出现的大多数可能性都是屏幕的闪烁。一个很好的解决方法就是使用内存dc,将这些操作全部先转载 2013-02-25 19:58:29 · 468 阅读 · 0 评论 -
int与CString,char*与CString,float与CString之间的相互转化
作运算时需要使用int,float等的类型,但是显示时需要CString类型。所以实现int与CString,char*与CString,float与CString之间的转化是一个很重要的问题1.int与CString(1),int到CStringint i;CString str;str.Format("%d",n);(2),CString到intCString转载 2013-02-25 19:57:47 · 314 阅读 · 0 评论 -
堆和栈的定义与区别
一、 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区 1、栈区(stack): 由编译器在需要的时候自动分配释放 ,在不需要的时候自动清楚的变量的存储区。存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap): 一般由程序员分配释放,他们的释放编译器不去管, 若程序员不释放,程序结束时转载 2013-02-25 19:53:06 · 280 阅读 · 0 评论 -
窗口重画ONPaint
WM_PAINT源头:第一次创建窗口,窗口最大、最小化,窗口大小改变、窗口移动,无效区等动作,以及调用Invalidate、InvalidateRect或InvalidateRgn、Updateindow等函数。 每个窗口(HWND)实例,在windows操作系统中,都有个上下文记录区,其中记录着当前窗口的无效区域数据。系统内核利用空闲时间检查所有窗口的无效区,如果非空,就产生一个W转载 2013-02-25 19:52:15 · 515 阅读 · 0 评论 -
C/C++/MFC
数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long l转载 2013-02-25 19:57:03 · 280 阅读 · 0 评论 -
面试总结与分析(一)
一,找出程序中的错误int set(char*strDest,const char*str){ char string[10]; char* str1 = "0123456789"; strcpy(string,str1);}这个属于数组越界的错误数组越界错误,主要表现在这几个方面:1,分配数组没有以/0结尾,计算数组大小时,导转载 2013-02-25 19:55:27 · 311 阅读 · 0 评论 -
OnCreate
OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用产生的的。 在view类中,Create 是虚函数由框架调用,是用来“生成一个窗口的子窗口”。 而OnCreate 函数是用来“表示一个窗口正在生成”。 一个窗口创建(Create)之后,会向操作系统发送WM转载 2013-03-04 21:14:02 · 492 阅读 · 0 评论 -
precreatewindow
在现有应用程序中更改窗口属性若要更改框架应用程序(用应用程序向导创建的)所使用的默认窗口属性,请重写窗口的 PreCreateWindow 虚拟成员函数。PreCreateWindow 允许应用程序访问通常由 CDocTemplate 类内部管理的创建进程。框架在即将创建窗口前调用 PreCreateWindow。通过修改传递给 PreCreateWindow 的结构 CREATE原创 2013-03-04 20:57:56 · 407 阅读 · 0 评论 -
c++的隐式转换和强制转换
问:下列哪种方法使B隐式转化为A?A) class B : public A { ……}B公有继承自A,并且可是间接继承;这样B类对象可以转化成A类对象;B) class B { operator A( ); }B实现了隐式转化为A的转化,转换函数,不能有返回值和参数,并且为非静态,非有元函数;这样当遇到语句A=B的时候,B就调用poerator A()方法转换成A类型;转载 2013-02-26 08:58:15 · 762 阅读 · 0 评论 -
MFC之序列化
序列化是指对象将其状态保存在一个字节流中,并用该字节流重建对象。实例化实现了文档数据的保存和装入的幕后工作,MFC通过序列化实现了应用程序的文档读写功能。序列化的基本思想是:一个类应该能够对自己的成员变量的数据进行读写操作,对象可以通过读操作而重新创建。即对象可以将其当前状态(由其成员变量的值表示)写入永久性存储体(通常指磁盘)中,以后可以从永久性存储体中读取(载入)对象的状态,从而重建对原创 2013-02-26 09:25:03 · 590 阅读 · 0 评论 -
有关(int&)和(int)的区别
[cpp] view plaincopy#include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { float a = 1.0f; coutint)a cout转载 2013-02-26 09:35:15 · 291 阅读 · 0 评论 -
WM_CTLCOLOR消息
参考文章:白乔原创:VC之美化界面篇 在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOLOR通告消息,在该消息的处理函数中,可以设置控件显示文本的前景色、背景色以及字体。该消息处理函数还要求返回一个画刷的句柄,用于在控件具体的绘制之前擦除其客户区。 WM_CTLCOLOR映射消息处理函数为afx_msg HBRUSH OnCtlColor(CD转载 2013-02-28 00:46:22 · 709 阅读 · 0 评论 -
#pragma pack(n) 对齐用法详解
什么是对齐,以及为什么要对齐: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其转载 2013-02-27 20:55:54 · 301 阅读 · 0 评论 -
BSCMAKE: error BK1513 : nonincremental update requires all .SBR files
BSCMAKE: warning BK4502 : truncated .SBR file './Debug/BCMenu.sbr' not in Debug/HelpTip.bsc BSCMAKE: error BK1513 : nonincremental update requires all .SBR files 解决方案:1.删掉debug文件夹后再编译2.bui转载 2013-02-27 23:48:26 · 1622 阅读 · 0 评论 -
预编译(来自百度百科)
预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等就是为编译做的预备工作的阶段主要处理#开始的预编译指令预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。常见的预编译指令有:(1)#include 指令该指令指示编译器将xxx.xx转载 2013-02-26 20:51:54 · 297 阅读 · 0 评论 -
二叉树相关问题
复习下二叉树,创建二叉树,分别以先序,中序,后续三种遍历访问二叉树,输出二叉树的叶子节点及叶子节点的个数,并输出二叉树的高度[cpp]#include #include #include #include using namespace std; typedef struct BiTNode { char data; struct转载 2013-02-26 20:04:48 · 359 阅读 · 0 评论 -
面试总结与分析(二)
1.char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc";const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "a原创 2013-02-26 09:23:28 · 348 阅读 · 0 评论 -
Exit()函数
先放这 ,有空得整理在C语言的main函数中我们通常使用return (0);这样的方式返回一个值。 但这是限定在非void情况下的,也就是void main()这样的形式。 exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳出操作系统。 exit(0) 表示程序正常退出, exit(1)/exit(-1)表示程序异常退出。 ex转载 2013-02-25 19:51:28 · 261 阅读 · 0 评论 -
写一个函数,完成内存之间的拷贝。[考虑问题是否全面](转)
在网上找了个题目如题目,本来以为就跟字符串的复制一样,一个while就行了,看了答案才知道,内存处理没有那么简单,因为我们时刻要小心内存处理问题。但是看了代码,想了半天才想同原理,真是惭愧啊!本来打算准备用个坐标轴来描述这个原理的,只是我个人比较懒的去画,就简单的说下,以明示自己下次不能犯这样的错误了。方法一:void* mymemcpy( void *dest,转载 2013-02-26 09:38:18 · 609 阅读 · 0 评论