随笔分类 -  C++ MFC

MFC
2010.7.16 多重继承、多态等的析构问题
摘要:问题描述:有一个基类,下面有N层子类,每层都存放子类的对象。当删除一个基类对象的时候,如果保证所有对象都被析构?假如有一个船,船上有许多设备,每个设备又有子设备,子设备又有子设备.....该如何设计类结构呢?设计: 1、定义一个基类 CDeviceBase。其中定义了一个MAP,用于保存每个设备的子设备2、所有设备都继承自CDeviceBase,这样每个设备都有一个map ,用于保存每个设备的子设... 阅读全文

posted @ 2010-07-16 17:09 pjh123 阅读(218) 评论(0) 推荐(0)

2010.7.15 variant ,COleVariant,_variant_t
摘要:一、variant ,COleVariant,_variant_t三者的关于、区别、转换1、variant variant是C的一个结构体 VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。 换句话说,当你要处理不同类型的数据时,不可能提起知道到底要传输的是什么类型的数据,那么都可以用variant 封装起来,到用... 阅读全文

posted @ 2010-07-15 15:58 pjh123 阅读(630) 评论(0) 推荐(0)

2010.7.14 C++编码规则
摘要:以下描述了C++的编码规则:说明: 1、所谓规则,是为了避免在C++编码过程中,由于书写问题引起的错误; 2、不紧要知道何时使用这些规则,要理解为什么要使用这些规则; 3、随时补充;1、用 free 或 delete 释放了内存之后,立即将指针设置为 NULL。 目的:防止多处重复删除指针报错&防止出现野指针 举例:CDeviceBase *itemPr=.........; itemPr... 阅读全文

posted @ 2010-07-14 10:10 pjh123 阅读(138) 评论(0) 推荐(0)

2010.7.14 sqlite的用法
摘要:本文总结sqlite的用法 阅读全文

posted @ 2010-07-14 09:57 pjh123 阅读(178) 评论(0) 推荐(0)

2010.7.13
摘要:一、如何防止文件重复编译?'class' type redefinition 在MFC项目中新建一个类,会发现在.h文件的第一行有代码:#pragma once 这行代码是什么作用呢?去掉以后,如果在两处分别引入了.h的头文件,比如: 在app 中,#include "Ctest1.h" 在View中,#include "Ctest1.h" 会报错:1>d:\vs2008c++\2\test... 阅读全文

posted @ 2010-07-13 18:04 pjh123 阅读(108) 评论(0) 推荐(0)

2010.7.12
摘要:一、MFC CString字符串的构造 1、假如用一堆变量来构造CString字符串,应用如下: CString sql; sql.format(".....=%d,.....%s,......."第一个变量,第二个变量); %后面跟什么,根据变量的类型,比如:%c 单个字符 %d 十进制整数(int) %ld 十进制整数(long) %f 十进制浮点数(float) %lf 十进制浮点数(dou... 阅读全文

posted @ 2010-07-12 15:09 pjh123 阅读(138) 评论(0) 推荐(0)

2010.7.11
摘要:一、消息的发送方式有两种:寄送和发送 1、寄送:通过消息队列。用PostMessage。 通常键盘、鼠标产生的是寄送消息。 2、发送:不通过消息队列。用SendMessage。 大部分消息都是非队列消息。 阅读全文

posted @ 2010-07-11 09:25 pjh123 阅读(105) 评论(0) 推荐(0)

2010.7.10
摘要:一、如何在项目中引入.h、.lib和dll、以及.cpp 一直搞不清楚.h、.lib和dll在工程里怎么引入,稀里糊涂的。这次使用sqlite做个试验。 目录如下: .. include lib dll 工程\注意:工程是最原是的MFC标准项目,没有对环境变量做任何修改:1、.h的引入 引入了.h才能使用类. 首先在工程中引入.h文件,然后在文件中:#include "sqlite3.h"。 编译... 阅读全文

posted @ 2010-07-10 09:19 pjh123 阅读(1097) 评论(0) 推荐(0)

2010.7.6
摘要:一、字符串操作#include "stdafx.h"#include "string"using namespace::std;//using std::string;int _tmain(int argc, _TCHAR* argv[]){ string str="接口"; string str2="hello";if (isupper(str[0])) //此处会报错,弹出警告 { //err... 阅读全文

posted @ 2010-07-07 11:53 pjh123 阅读(132) 评论(0) 推荐(0)

2010.7.5
摘要:1、文章阅读:http://blog.csdn.net/chief1985/archive/2007/11/23/1899468.aspx http://www.docin.com/p-4218188.html#2、MFC消息机制 Windows应用程序的消息来源有一下四种: 1)输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由... 阅读全文

posted @ 2010-07-05 18:10 pjh123 阅读(228) 评论(0) 推荐(0)

2010.7.2
摘要:1、如何获得当前程序工作目录: //获得当前工作目录,包括进程CString dir;GetModuleFileName(NULL,dir.GetBufferSetLength (MAX_PATH+1),MAX_PATH); 如:d:\Projects\Pioneer\Src\Debug\PnrNetCfg.exe//获得当前目录TCHAR *path = new TCHAR[MAX_PATH];... 阅读全文

posted @ 2010-07-02 16:38 pjh123 阅读(104) 评论(0) 推荐(0)

MFC 文件操作
摘要:VC:文件操作大全,打开,保存,复制,删除,查找等 各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效的代码。本文对Visual C++中有关文件操作进行了全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行了详细分析。 1. 文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC... 阅读全文

posted @ 2010-07-02 12:07 pjh123 阅读(391) 评论(0) 推荐(0)

2010.7.1
摘要:1、MFC中全局变量的定义 可以在APP中定义全局变量,比如:class CPnrNetCfgApp : public CWinAppEx{public:CPnrNetCfgApp();....public:CPnrAutoNamingOrdering* ordering;//全局变量CPnrAutoNamingReferencename* referencename;//全局变量CPnrAuto... 阅读全文

posted @ 2010-07-01 18:23 pjh123 阅读(209) 评论(0) 推荐(0)

2010.6.30
摘要:1、CTreeCtrl用法 当右键选中一个节点时,并不是真正的选择了该节点,和左键选择一个节点是不同的。取消后你会发现并没有选中。那么如何让右键选中,和左键选中一样的效果呢? 可以设置右键消息响应事件,CPoint pt;GetCursorPos(&pt);CPoint pointInTree=pt;m_deviceTree.ScreenToClient(&pt); //将屏幕坐标... 阅读全文

posted @ 2010-06-30 17:38 pjh123 阅读(140) 评论(0) 推荐(0)

2010.6.24
摘要:一、文件的类型 windows下文件有两种,文本文件和二进制文件。 文本文件:文件默认访问模式为文本文件。文本文件为ASCII文件; 二进制文件:二进制文件是“紧缩”的文件,比文本文件节省空间。 比如.txt文件,用EditPlus打开,会发现是ANSI编码。而.doc是一种二进制文件。 txt可以用Word打开,只是说明word程序提供对ANSI编码文件的读取;反过来,用... 阅读全文

posted @ 2010-06-24 15:37 pjh123 阅读(183) 评论(0) 推荐(0)

2010.6.22
摘要:1、设置CTreeCtrl的字体颜色和间距2、特殊的消息映射 CMainFrame中 ON_WM_CREATE() 对应 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){....}3、MFC框架创建流程 CScollVApp theApp;CScollVApp::CScollVApp(){...//App构造函数} CScollVA... 阅读全文

posted @ 2010-06-22 19:03 pjh123 阅读(191) 评论(0) 推荐(0)

2010.6.17
摘要:一、MFC框架的析构顺序: 1、view析构函数->view中分配的堆对象(如果该对象有继承关系,则先调用子类析构函数,然后调用基类析构函数) 2、MainFrame析够函数->MainFrame中分配的堆对象(如果该对象有继承关系,则先调用子类析构函数,然后调用基类析构函数)二、关于释放堆内存 1、凡是在堆上申请的内存块(用new申请),都需要释放。 a、如果是在函数内部申请,并且没... 阅读全文

posted @ 2010-06-17 18:06 pjh123 阅读(140) 评论(0) 推荐(0)

2010.6.15 常用数据类型转换总结
摘要:CString向int,float转换 阅读全文

posted @ 2010-06-15 16:39 pjh123 阅读(237) 评论(0) 推荐(0)

2010.6.11
摘要:一、CTreeCtrl的用法1、右键显示菜单;2、增加节点;重命名节点; 注意重命名节点是个难点。二、对MFC类库的继承:比如,如果MFC类某些功能不符合要求,可以重载,然后修改部分不合适的功能,比如CMFCOutlookBar的右键弹出菜单功能。三、多态当使用基类来操作继承类的时候,是无法操作继承类中的变量的,除非将此对象提升到基类层次。 阅读全文

posted @ 2010-06-11 17:12 pjh123 阅读(273) 评论(0) 推荐(0)

2010.6.10
摘要:1、关于指针判断为空的问题在函数中定义一个指针变量的时候,如果没有初始化,例如CBase * cBase;系统会自动分配一个地址,如下在VC Debug版本里,栈中分配的值都会先用0xCCCCCCCC来处理一下,所以大家在Debug模式下调试程序发现在引用0xCCCCCCCC这样的值,就说明在试图使用一个没有初始化的值。这时候,如果接下来要判断cBase是否为空,如:if(cBase){...},... 阅读全文

posted @ 2010-06-10 16:16 pjh123 阅读(120) 评论(0) 推荐(0)