
C++ && MFC
andkobe
这个作者很懒,什么都没留下…
展开
-
inter x86 浮点寄存器笔记
intel 80486 寄存器结构:基本寄存器、系统寄存器、调试测试寄存器、浮点寄存器。基本寄存器包括八个通用寄存器EAX, EBX, ECX, EDX, EBP, ESP, EDI, ESI;一个指令指针寄存器EIP;六个段寄存器CS, DS, ES, SS, FS和GS;一个标志寄存器EFLAGS。它们都是程序可见寄存器。EAX, EBX, ECX, EDX都可以作为32位寄存器、原创 2013-07-28 00:46:05 · 8280 阅读 · 0 评论 -
MFC 获取系统时间 CTime
CTime t1 = CTime::GetCurrentTime();CTime tm;tm.GetDay();tm.GetHour();tm.GetMinute();tm.GetSecond();原创 2011-01-22 23:07:00 · 1128 阅读 · 0 评论 -
《转》CRectTracker(橡皮筋)类的使用
CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类。你在Windows中,在桌面上用鼠标拖拽,便可以看到一个虚线的矩形框,它便是橡皮筋.它可以用做显示边界,你也可以扽它的八个角用来放大缩小,做框选使用。如何通过编程来实现这种功能呢?这就是CRectTracker类的作用;介绍橡皮筋类前,先介绍其他两个类:Cpoint 类或Point类,cpoint.x cpoint原创 2011-01-24 23:19:00 · 1011 阅读 · 0 评论 -
从文件读取字符串总结
从文件读取字符串:fscanf1.遇到空格和换行等不可见字符结束,不会读入换行符,末尾添加'/0'2.两行中间的一个空行或多个空行不会读入3.当文件末尾有一个空行或多个空行时会读一次,但不会读入任何内容,目标字符串不变,也不会添加'/0' fgets(str,n,fp)1.只有遇到换行(/x0D/x0A 和 /x0A)才结束,遇到换行时读入一个换行符'/x0A',不会读转载 2011-05-18 10:31:00 · 2495 阅读 · 0 评论 -
error C2533: ' ::{ctor}' : constructors not allowed a return type
error C2533: ' ::{ctor}' : constructors not allowed a return type出现这个错误是因为在定义的类体中,在最后少了个分号“;”class{private:public:};转载 2011-02-13 15:07:00 · 5653 阅读 · 0 评论 -
构造函数、析构函数、虚函数
首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,只有这样子类才能在构造函数里使用基类的成员,所以是创建子类时先调用基类的构造函数然后再调用自己的构造函数。通俗点说,你要用某些物品,但这些物品你没办法自己生产,自然就要等别人生产出来,你才能拿来用。转载 2011-03-06 10:54:00 · 692 阅读 · 0 评论 -
UpdateData()
一、总结UpdateData()函数UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。 当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户转载 2011-04-22 15:04:00 · 712 阅读 · 0 评论 -
CHECK BOX 用法
勾选时...做某种算法不勾选时 做另一种算法if ( BST_CHECKED == IsDlgButtonChecked( IDC_CHECK1 ) ){// 勾选}else{}IDC_CHECK1是CheckBox控件。 函数功能:该函数可以确定某个按钮控制是否有选中标志,或者三态按钮控制是否为灰色的、选中的、或两者都不是。 函数原型:UIN转载 2011-03-04 20:57:00 · 6902 阅读 · 0 评论 -
error C2146: syntax error : missing ';' before identifier 'PVOID64'
error C2146: syntax error : missing ';' before identifier 'PVOID64'由 directdraw 的升级引起在网上查了下资料,一般的解决方法是:解决方法:在winnt.h中加上以下语句#define POINTER_64 __ptr64typedef void *PVOID;转载 2011-03-10 13:12:00 · 2428 阅读 · 0 评论 -
Windows has triggered a breakpoint in xxxxx.exe.
Windows has triggered a breakpoint in xxxxx.exe.This may be due to a corruption of the heap, and indicates a bug in xxxxx.exe or any of the DLLs it has loaded.The output window may have more dia原创 2011-05-24 20:15:00 · 3435 阅读 · 2 评论 -
CFileFind类的使用总结
1、CFileFind类的声明文件保存在afx.h头文件中。2、该类的实现的功能:执行本地文件的查找(查找某个具体的文件,查找某类文件x*.x*,查找所有文件*.*)3、CFileFind类是CGopherFileFind和CFtpFileFind类的基类。4、CFileFind类的构造函数::CFileFind()和关闭函数::Close()我会成对使用。5、CFileFind类转载 2011-06-07 17:21:00 · 734 阅读 · 0 评论 -
头文件的中的namespace
又一次碰到了这个情况,明明是加了头文件的,却找不到头文件里定义的数据类型,原来是在前面加了 namespace ,要注意了,只要在引用该头文件的文件中加 using namespace ** 就行了原创 2011-01-17 15:54:00 · 1132 阅读 · 0 评论 -
重绘的两个问题
1. /*LPPOINT ptthis = new POINT; ptthis->x=0; ptthis->y=0; ClientToScreen(ptthis);*/ 在OnInitDialog 里面的结果跟在其他函数里执行的结果不一样; 在OnInitDialog 中,将对话框的非客户区作为坐标系原点,如图所示:而在其他的响应函数中,如左键双击的响应函数,则将屏幕的左上角原创 2011-01-16 16:57:00 · 669 阅读 · 0 评论 -
使用CDC的四个派生类CClientDC,CPaintDC,CWindowDC,CMetaFileD
1.首先介绍一下什么是DC(设备描述表)Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。2.CDC及其派生类CDC及其派生类转载 2009-09-21 16:25:00 · 776 阅读 · 0 评论 -
字符串的输入输出
字符串输入:gets() :char name[20]; printf("Hi,What's your name?/n");gets(name); printf("Nice name %s",name); 它使用一个地址把字符串赋予name char name[20]; char *p; printf("/nEn,What's your name?/n转载 2009-12-21 15:07:00 · 793 阅读 · 0 评论 -
va_start() and va_end()
参数在堆栈中分布位置 在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,一些黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的. 总之,函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行转载 2009-12-23 23:16:00 · 590 阅读 · 0 评论 -
K-均值算法
动态聚类方法是模式识别中一种普遍采用的方法,它具有以下3个要点: 1:选定某种距离度量作为样本间的相似性度量 2:确定某个评价聚类结果质量的准则函数 3:给定某个初始分类,然后用迭代算法找出使准则函数取极值的最好的聚类结果K-MEANS算法:输入:聚类个数k,以及包含 n个数据对象的数据库。输出:满足方差最小标准的k个聚类。处理流程: (1) 从转载 2010-04-15 16:17:00 · 3132 阅读 · 0 评论 -
MFC 使用系统时间方法
一、使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK); 二、得到系统时间日期(使用GetLocalTime) SYSTEMTIME st;转载 2010-06-25 18:37:00 · 1303 阅读 · 0 评论 -
作用域操作符 ::
作用域:变量在程序中的起作用范围简单分为:全局作用域、局部作用域、语句作用域作用域优先级: 范围越小优先级越高作用域运算符:“::”如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ,“::”称为作用域运算符 #include int avar=10; //全局变量avarvoid main(){ int ava原创 2010-07-01 17:07:00 · 5170 阅读 · 2 评论 -
MFC里CHECKBOX用法
勾选时...做某种算法不勾选时 做另一种算法if ( BST_CHECKED == IsDlgButtonChecked( IDC_CHECK1 ) ){// 勾选}else{}IDC_CHECK1是CheckBox控件。 函数功能:该函数可以确定某个按钮控制是否有选中标志,或者三态按钮控制是否为灰色的、选中的、或两者都不是。 函数原型:UIN转载 2010-07-23 12:48:00 · 1907 阅读 · 0 评论 -
MFC中Radio Button使用方法
先为对话框加上2个radio button,分别是Radio1和Radio2。 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上, 第一种: ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上 ((CB转载 2010-11-01 18:28:00 · 875 阅读 · 0 评论 -
MFC坐标转换
GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。 GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。 ClientToScreen把客转载 2011-01-09 17:36:00 · 3208 阅读 · 0 评论 -
如何清除Visual Studio开始页面(Start Page) 的最近项目Recent Projects
打开注册表,删除 HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/9.0/ProjectMRUList 的项目就行。vs2008的版本号是9.0vs2005的版本号是8.0vs2003的版本号是7.0转载 2011-01-10 10:19:00 · 2577 阅读 · 0 评论 -
释放内存出错
当新建一个指针,并指向另一个指针指向的内存空间时,当这个内存空间被释放时,新建的指针必须设为NULL, 不然很容易出错。比如: char * pBuffer = new char [256];char* pTemp = pBuffer; delete pBuffer; pBuffer = NULL; /////////////////////////////////原创 2011-07-12 10:20:37 · 814 阅读 · 0 评论 -
进程、线程优先级
Process priority classThread priority levelBase priorityIDLE_PRIORITY_CLASSTHREAD_PRIORITY_IDLE1THREAD_PRIORITY_LOWEST2THREAD_PRIORITY_BELOW转载 2011-07-28 16:19:51 · 1161 阅读 · 0 评论 -
MFC 消息映射机制剖析
MFC的类非常多,继承关系复杂,如何完成MFC巨大的类层次之间消息的传递是一个技术难点,最简单的就是采用虚函数机制,每继承一个类,就覆盖父类的函数,但问题来了,MFC有上百个类,如果使用虚函数,那么每个派生类都会生成一个巨大的虚函数表,效率低下,内存使用率高,违背了微软设计MFC的准则。微软采用了所谓的消息映射机制,来完成不同对象之间消息的传递,本文就MFC9.0源码进行分析,大致讲解MFC的消息原创 2013-03-18 19:43:12 · 5562 阅读 · 0 评论 -
CString 之 Left(),Mid(),Right()
CString Left( int nCount ) const; //从左边1开始获取前nCount 个字符CString Mid( int nFirst ) const; //从左边第nCount+1 个字符开始,获取后面所有的字符CString Mid( int nFirst, int nCount转载 2012-05-06 16:57:18 · 13390 阅读 · 1 评论 -
exit(0) 退出发生内存泄露的解决方案
exit(0) 退出是会发生内存泄露,也许内存没有自动回收,没调用到析构函数;可以使用 PostQuitMessage(0) 退出程序。原创 2012-05-06 16:56:29 · 2881 阅读 · 0 评论 -
c++ 零值比较
这是程序员面试的一道常见题,也是个C++基础问题。若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0比较吗,直接拿出来比就是了,其实非也。下文引自google搜索结果,出处不详,高手可以无视,菜菜留下,记得做好笔记。首先给个提示:题目中要求的是零值比较,而非与0进行比较,在C++里“零值”的范围可就大了,可以是0, 0.0 , FALSE或者“空指针”。1).int转载 2011-11-13 15:46:14 · 2230 阅读 · 0 评论 -
字符串Hash函数
Hash查找因为其O(1)的查找性能而著称,被对查找性能要求高的应用所广泛采用。它的基本思想是:(1) 创建一个定长的线性Hash表,一般可以初始化时指定length;(2) 设计Hash函数,将关键字key散射到Hash表中。其中hash函数设计是最为关键的,均匀分布、冲突概率小全在它;(3) 通常采用拉链方法来解决hash冲突问题,即散射到同一个hash表项的关键字,以链表形式来表转载 2011-11-06 21:01:34 · 1336 阅读 · 0 评论 -
c++内存分布,代码段、全局数据区、栈、堆
声明两点:(1)开发测试环境为VS2010+WindowsXP32位;(2)内存布局指的是虚拟内存地址,不是物理地址。1.测试代码#include using namespace std; int g_int_a; int g_int_b; void f_1() { cout"I'm f_1"} void f_2() { cout"I'm f转载 2011-11-05 10:08:56 · 3134 阅读 · 0 评论 -
结构体定义 typedef struct 用法详解
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于:若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;区别就在于使用时,是否可以省去str转载 2011-10-31 19:15:28 · 754 阅读 · 0 评论 -
程序员面试题精选100题(08)-求1+2+...+n
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。方法一: class Temp{public: Temp() { ++ N; Sum += N; } static void Reset() { N = 0; Sum = 0; } stati转载 2011-10-31 15:03:24 · 661 阅读 · 0 评论 -
程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
方法一:5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,正好是22。由此可见三步走的策略对二进制也是管用的。转载 2011-10-30 18:16:56 · 704 阅读 · 0 评论 -
C++ volatile, explicite, mutable
1. volatile 有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。 volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,转载 2011-11-14 15:44:40 · 1235 阅读 · 0 评论 -
STL中的map详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(转载 2011-10-17 13:19:04 · 541 阅读 · 0 评论 -
c++ 读写excel
想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:1. 在StdAfx.h文件中加入:include include 2. 通过ODBC直接创建Excel文件(暂定文件名:Demo.xls)//创建并写入Excel文件void转载 2012-05-10 19:34:23 · 7693 阅读 · 1 评论 -
c++ DLL
虽然能用DLL实现的东西都可以用COM来实现,但DLL的优点确实不少,它更容易创建。本文将讨论如何利用MFC来创建不同类型的DLL,以及如何使用他们。一、DLL的不同类型 使用MFC可以生成两种类型的DLL:MFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。1、MFC扩展DLL转载 2012-08-09 23:23:19 · 700 阅读 · 0 评论 -
句柄
1.句柄是什么? 在windows中,句柄是和对象一一对应的32位无符号整数值。对象可以映射到唯一的句柄,句柄也可以映射到唯一的对象。2.为什么我们需要句柄? 更准确地说,是windows需要句柄。windows需要向程序员提供必要地编程接口,在这些接口中,允许程序员访问、创建和销毁对象。但是,出于封装地考虑,windows并不想向程序员返回指针。指针包含了转载 2010-01-08 16:50:00 · 539 阅读 · 0 评论 -
vs2008 断点进不去的问题解决
昨天在调试一个vs2008程序的时候,在view类的函数设置了断点,但都进不去,而其他类的函数却可以进去,折腾了很长时间,最终解决了,方案如下:tools->options->dubugging->general->require source files to exactly match the original version ,把这一项的勾取消,即disable ,就可以了。原创 2010-06-11 11:38:00 · 11223 阅读 · 1 评论