随笔分类 -  Visual C++

vc开发
摘要:对象也可以作为函数的参数传递给函数,其转递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。值传递:是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;地址传递:调用该函数的对象与参数对象共用同一个地址,所以,函数对参数对象的任何修改都会影响调用该函数的对象本身。注意:在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”) 1) 一个对象作为函数参数,以值传递的方式传入函数体 2) 一个对象作为函数返回值,以值传递的方式从函数返回 3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化) 当用引用变量做参数时... 阅读全文
posted @ 2012-12-29 20:26 任智康 阅读(11272) 评论(0) 推荐(4)
摘要:前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU、内存、网络利用率等)和读取服务器的硬件配置参数的接口供项目组使用,就是一个类似于鲁大师之类的东东吧...当然第一想法肯定是利用Windows提供的系统标准API函数来完成所需的功能,当然这也应该是当前最理想最有效率的选择了。但是如果你对API编程不是很熟练的话...那就相当蛋疼了!你知道用API可以做到但是不知道用哪个API,好啊,可以查MSDN。问题是你连API名字都不知道...当然,如果你们公司允许你们上国内局域网的话那就好办多了,因为有无数强大的网友会帮你找到答案。使用API编程的另一个问题是如果你仍旧对API不熟悉的话调用起 阅读全文
posted @ 2012-12-29 14:14 任智康 阅读(32302) 评论(2) 推荐(1)
摘要:有时我们希望某些常量只在类中有效。由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。不能在类声明中初始化const数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道SIZE的值是什么。class A{…const int SIZE = 100;// 错误,企图在类声明中初始化const数据成员int array[SIZE].. 阅读全文
posted @ 2012-12-28 13:22 任智康 阅读(356) 评论(0) 推荐(0)
摘要:1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.2 void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间,返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型... 阅读全文
posted @ 2012-12-27 13:22 任智康 阅读(211) 评论(0) 推荐(0)
摘要:对话条是工具栏和无模式对话框相结合的产物,对话条和对话框类似,包含有标准的Windows控件,并且可以通过创建对话框模板来表示对话条。伸缩条功能很强大,我们可以在伸缩条中直接增加CToolBar,CStatusBar和CDialogBar等类创建的控制条,如下:CReBar rb;rb.Create(....);CToolBar tb;tb.Create(...);tb.LoadToolBar(...);//将工具栏加入到伸缩条rb.AddBar(&tb,...);如果需要在伸缩条的段中包含其他的窗口类型(例如动画控件),仅需要将该控件放进对话框模板中,创建对话条,然后利用CReBar 阅读全文
posted @ 2012-12-26 15:13 任智康 阅读(1017) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/fjiale/article/details/5556708第一部分:五个命令ID: 处理函数ID_FILE_NEW CWinApp::OnFileNewID_FILE_OPEN CWinApp::OnFileOpenID_FILE_SAVE CDocument::OnFileSaveID_FILE_SAVEAS CDocument::OnFileSaveAsID_FILE_CLOSE CDocument::OnFileClose1.ID_FILE_NEWCWinApp::OnFileNew调用CDocManager::OnFileNew。|CDocM 阅读全文
posted @ 2012-12-26 15:07 任智康 阅读(901) 评论(0) 推荐(0)
摘要:用Delphi、VB、Windows Form(Visual C#)等称之为RAD(Rapid Application Development)的开发工具进行项目开发的都会很满足这些工具和平台提供的快速界面开发的功效:你可以很容易就可以实现一个MIS系统的管理界面,提供一个主框架,点击主框架上的某一个菜单项就打开一个处理事务的窗口,这些窗口可以重叠,可以最大/小化,一切看起来都像那么回事。但是当你在VC中进行开发的时候,发现整个世界都变了,虽然VC提供了MDI支持多文档视图的框架,但是每次你点击“打开”/“新建”菜单项的时候,你会发现新打开的窗口千孔一面,都是同一个样式,根本就不能满足项目.. 阅读全文
posted @ 2012-12-26 14:38 任智康 阅读(5470) 评论(1) 推荐(1)
摘要:http://database.51cto.com/art/201105/263910.htm首先你正确安装了MYSQL的数据库驱动程序(mysql-connector-odbc-5.1.6-win32.msi)1.在桌面上新建一个空的文本文件mysql.txt,重命名为mysql.udl;2.双击这个mysql.udl文件,打开“数据库连接属性”对话框,在“提供程序”页选择”Micrsoft Ole DB Provider for ODBC Drivers“, 点击下一步;3.在“连接”页的,"指定数据源"选择"使用连接字符串";4.点击“编译”,弹出 阅读全文
posted @ 2012-12-18 16:11 任智康 阅读(1556) 评论(0) 推荐(0)
摘要:指向对象的指针与对象指针的区别:指向对象的指针就是:类对象的指针class persion;persion apersion;persion* pa=&apersion; //指向类persion对象的指针 类对象是在内存中为这个类的分配一块内存,指针就是指这块一块内存的开始!对象只能事先定义好,只能在定义的区域内使用,生命周期有限,而指针可以在使用时创建,使用的范围为全局,可以保存只到你不在使用他时再删除。指针就是一个整数,这个整数就是一个地址,这个地址是某个数据块的地址,通过它,可以访问那块内存,总之,指针就是地址了。类的对象:用的是内存栈,是个局部的临时变... 阅读全文
posted @ 2012-12-12 22:00 任智康 阅读(2022) 评论(0) 推荐(0)
摘要:对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: 1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! 2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应发生冲突; 3、对于CWnd相关的类,即使传入窗口句柄,有时操作也会引起异常(ASSERT异常):通过句柄获取窗口对象并且调用其成员函数或者成员变量!因为该对象是临时对象,访问其成员变量没有意义,访问其成员函数可能会抛出异常! 不能在线 阅读全文
posted @ 2012-12-12 20:54 任智康 阅读(5274) 评论(0) 推荐(1)
摘要:MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员,可以这样实现:1)全局函数。如 UINT MyThread(LPVOID p)2)类的静态成员函数。如 static UINT MyView::MyThread(LPVOID p) 线程函数是可以带参数的,比如static__stdcallworkthread(LPVOIDlpParam)你可以在创建这个线程的时候,把对象指针传递到lpParam,然后使用这个指针就可以在线程函数里调用非静态成员变量... 阅读全文
posted @ 2012-12-12 11:51 任智康 阅读(15989) 评论(2) 推荐(1)
摘要:调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。 在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)有多个用法,而不会打破现有的基于C的链接器。这项技术通常被称为名称改编(Name Mangling)或者名称修饰(Name Decoration)。许多C++编译器厂商选择了自己的名称修饰方案。 因此,为了使其它语言编写的... 阅读全文
posted @ 2012-12-03 16:46 任智康 阅读(926) 评论(0) 推荐(0)
摘要:1、Windows API现在windows.h头文件中申明。其函数的实现,由操作系统提供的。 Win32 Console Application只能运行命令行程序 入口点: 一个是main Win32 Application是基于消息响应机制的,可以运行图形化的C++程序 入口点: 一个是Winmain Win 32程序编写步骤: (1)、WinMain函数的定义 (2)、创建一个窗口 (3)、进行消息的循环 (4)、编写窗口过程函数2、Windows程序中,有各种各样的资源(窗口、图标、光标),系统在创建这些资源的时候会为他们分配内存,并返回标识这些资源的标识... 阅读全文
posted @ 2012-11-27 20:59 任智康 阅读(272) 评论(0) 推荐(0)
摘要:typedef unsigned int UINT typedef UINT WPARAM typedef LONG LPARAM typedef LONG LRESULT 到了Win32API中,原来的16位变量也被扩展为32位,因此此时wParam和lParam的大小完全相同。WPARAM常常代表一些控件的ID或者高位底位组合起来分别表示鼠标的位置,如果消息的发送者需要将某种结构的指针或者是某种类型的句柄时,习惯上用LPARAM来传递。 理论上在使用自定义消息时,WPARAM、LPARAM的含义可以程序员任意指定的,但是最好遵从MFC中的习惯。在调用SendMessage()... 阅读全文
posted @ 2012-11-26 15:06 任智康 阅读(2866) 评论(0) 推荐(1)
摘要:Windows程序中,有各种各样的资源(窗口、图标、光标),系统在创建这些资源的时候会为他们分配内存,并返回标识这些资源的标识号,即句柄HANDLE(ID)。图标句柄(HICON)、光标句柄(HCURSOR)、画刷句柄(HBRUSH)。 为什么有个窗口对象还要窗口句柄呢?还有什么线程句柄,甚至还有控件ID和进程ID呢?MFC中的对象,比如应用程序对象,视图对象等,是对象就会占用内存空间,我们就可以用指针指向此对象进行访问,但windows还提供了句柄访问,初看好像有点多余,实则不然。如果我们一个进程想访问另一个进程,根据对象指针访问就不行了。我们现在的Windows是一个完全保护的系统,... 阅读全文
posted @ 2012-11-07 10:22 任智康 阅读(9591) 评论(2) 推荐(1)
摘要:在MFC中引入了文档-视结构的概念,文档相当于数据容器,视相当于查看数据的窗口或是和数据发生交互的窗口。因此一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDocument文档类,CView视类。 在程序运行时CWinApp将创建一个CFrameWnd框架窗口实例,而框架窗口将创建文档模板,然后有文档模板创建文档实例和视实例,并将两者关联。一般来讲我们只需对文档和视进行操作,框架的各种行为已经被MFC安排好了而不需人为干预,这也是M$设计文档-视结构的本意,让我们将注意力放在完成任务上而从界面编写中解放出来。 在应用中一个视对应一个文档,但一个文档... 阅读全文
posted @ 2012-10-31 10:13 任智康 阅读(3154) 评论(0) 推荐(0)
摘要:一、怎么样在MDI程序里面切换不同的视图我在MDI里面建立了两个视图和两个文档,怎样从一个 视图切换到另外一个视图? CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CVideoConferenceDoc), RUNTIME_CLASS(CVideoConferenceChildFrame), // custom MDI child frame RUNTIME_CLASS(CVideoConferenceView1)); Afx... 阅读全文
posted @ 2012-10-30 17:17 任智康 阅读(1613) 评论(0) 推荐(0)
摘要:1. 什么是窗口 MSDN: In a graphical Win32-based application, a window is a rectangular area of the screen where the application displays output and receives input from the user. Therefore, one of the first tasks of a graphical Win32-based application is to create a window. 大意:窗口就是一个矩形区域,应用程序可以用它来显示输出,或者.. 阅读全文
posted @ 2012-10-30 15:14 任智康 阅读(18838) 评论(0) 推荐(1)
摘要:InvalidateRect(HWND) 使无效 ValidateRect(HWND)使有效 区别在重绘 InvalidateRect(HWND) 使窗口无效 产生消息WM_PAINT; ValidateRect(HWND)使窗口有效 清除消息队列中的WM_PAINT消息Invalidate() -- RedrawWindow() -- UpdateWindow()三个函数有什么异同? Invalidate()是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate()只是通知系统,此 时的窗口已经变为无效。强制系统调用WM_PAINT,而这个消息只是Post(寄... 阅读全文
posted @ 2012-10-30 11:38 任智康 阅读(665) 评论(0) 推荐(0)
摘要:Java的const和C++的一样吗?怎么实现的?const和goto只是Java的保留字,没有被使用实现。它们的区别在下面:(1)final在java中定义常量,可作用于基本类型或者类类型,若是作用于类类型,则此类类型不能作为父类被继承,也就是说它的下面不能有子类,这样的类叫做原子类。 C++中的const定义常量(2)Java中的final如果是对于基本类型,那和C++里面const是一样的,如果是是对对象而言,就不同了(3)final表示这个句柄是不可改变的 final Object obj=(Object)new String("a"); obj=(Object)n 阅读全文
posted @ 2012-09-21 20:11 任智康 阅读(242) 评论(0) 推荐(0)