随笔分类 - Visual C++
vc开发
摘要:0 为什么需要iostream我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用。 iost...
阅读全文
摘要:1、C文件操作2、c++文件操作3、MFC文件操作:CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件、内存文件和socket文件。Visual C++处理的文件通常分为两种:文本文件:只可被任意文本编辑器读取ASCII文本。二进制文件:指对包含任...
阅读全文
摘要:Const CSIDL_ADMINTOOLS As Long = &H30 '(用户)\开始菜单\程序\系统管理工具Const CSIDL_ALTSTARTUP As Long = &H1D '未本地化的启动Const CSIDL_APPDATA As Long = &H1A '(用户)\应用程序的...
阅读全文
摘要:1、使用OnEraseBkgnd函数实现对话框位图背景BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC) { CRect rect; GetClientRect(&rect); CBitmap m_pBmp; BITMAP bm; CDC dcMem; m_pBmp.LoadBitmap(IDB_BITMAP1); m_pBmp.GetBitmap(&bm);//得到位图尺寸 dcMem.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = dcMem.SelectObject(&a
阅读全文
摘要:重绘导致原因:UpdateData、Invalidate、InvalidateRect和UpdateWindow函数。1.UpdateData重绘控件函数UpdateData(TRUE)——刷新控件的值到对应的变量。(外部输入值交给内部变量)即:控件的值—>变量。UpdateData(FALSE) —— 拷贝变量值到控件显示。(变量的最终运算结果值交给外部输出显示)即:变量值—>控件显示。2. Invalidate() 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时
阅读全文
摘要:视图的背景一般来说是白色的,在缺省情况下,它和系统定义的颜色COLOR_WINDOW是一致的。设计者一般会希望自己的程序可以让用户轻松地改变窗口背景颜色,或是用漂亮的图片来充填背景。我们可以用Windows函数SetSysColors来重新指定COLOR_WINDOW所对应的实际颜色,来达到改变视图背景颜色的目的。但这样会同时改变其他应用程序的视图窗口背景,使得整个Windows系统的颜色设置产生混乱。另外,我们可能会用以下方法来设置视图的背景颜色,即在CView的OnDraw函数中添写如下一段程序代码:void CTestView::OnDraw(CDC* pDC) { CTestDoc..
阅读全文
摘要:参考文献:http://technet.microsoft.com/zh-cn/library/t078xe4f(v=vs.85).aspxMFC中异常处理的语法和语义构建在标准C++异常处理语法和语义的基础之上,其解决方案为:MFC异常处理 = MFC 异常处理类 + 宏1 宏: MFC定义了TRY、CATCH(及AND_CATCH、END_CATCH)和THROW(及THROW_LAST)等用于异常处理的宏,其本质上也是标准C++的try、catch和throw的进一步强化,由这些宏的定义可知:#ifndef _AFX_OLD_EXCEPTI...
阅读全文
摘要:1. 列举几种进程的同步机制,并比较其优缺点。 原子操作 信号量机制 自旋锁 管程,会合,分布式系统2. 进程之间通信的途径共享存储系统 消息传递系统 管道:以文件系统为基础3. 进程死锁的原因资源竞争及进程推进顺序非法4. 死锁的4个必要条件互斥、请求保持、不可剥夺、环路5. 死锁的处理鸵鸟策略、预防策略、避免策略、检测与解除死锁6. 操作系统中进程调度策略有哪几种?FCFS(先来先服务),优先级,时间片轮转,多级反馈 MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问...
阅读全文
摘要:对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例(注:抽象类即有纯虚函数
阅读全文
摘要:1 重载与覆盖 成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。令人迷惑的隐藏规则本来仅仅区别重载与覆盖并不算困难,但是C++的隐藏规则使问题复杂性陡然增加。这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)
阅读全文
摘要:要学习好网路编程,主要看以下几个方面:1、掌握概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等。2、在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。3、在异步非阻塞模式下的通信,要借助于多线程来开发。4、许多文章都曾经介绍过用VC++进行Socket编程的方法,直接利用动态连接库wsock32.dll进行操作,实现比较繁琐。但实际上网络编程概括为三种套接字方法:流式套接字(SOCK_STREAM)和数据报式套接字(SOCK_DGRAM)和原始套接字。流式套接字
阅读全文
摘要:(1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。当你定义一个内联函数时,在函数定义前加上 inline 关键字,并且将定义放入头文件:inline voidf(inti,charc){// ...}任何在类的说明部分定义的函数都会被自动的认为是内联函数。内联函数必须是和函数体申明在一起,才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。Inline tablefunction(intI) {returnI*I};这样我们才算定义了一个内联函数。我们可以把它作为
阅读全文
摘要:友元函数:说明: 在类型声明中将原型放入并在原型声明前加上关键字friend,但不要在定义时加上关键字friend,它的访问权限与类的成员函数的访问权限相同<声明而已为private,public,protect>作用: 把其他类中函数作为自己的友员成员函数,让特定的类成员成为另一个类的友元函数,而不必让整个类成为友元,但在使用时,必须小心排列各种声明和定义顺序(且需用到向前声明)向前声明格式:class 类名 ;//向前声明本类class 所用到的友员成员函数的类的类名 {....};//友元函数类的定义class 类名 {…}//本类的定义注意: 友元函数不要在类的内部定义,不
阅读全文
摘要:编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(const String &other); // 赋值函数private:char *m_data; // 用于保存字符串};// String的普通构造函数 String::String(const char
阅读全文
摘要:Windows消息机制的流程: A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中 B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。 C. 应用程序调用DispatchMessage,将消息回传给操作系统。 D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。PreTranslateMessage作用和使用方法PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数...
阅读全文
摘要:1、命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突。最典型的例子就是std命名空间,C++标准库中所有标识符都包含在该命名空间中。 如果确信在程序中引用某个或者某些程序库不会引起命名冲突(即库中的标识符不会在程序中代表其他函数名称),那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std;那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。 <iostream>和<ios
阅读全文
摘要:因为使用模板可以使程序员建立具有通用类型的函数库和类库。模板也是C++语言支持参数化多态性的工具。函数模板 函数模板能以同样的程序代码对不同类型的数据进行处理,其关键是将所处理的数据类型说明为参数,即类型参数化。 定义函数模板的一般形式是: template<class类型参数名1 ,class类型参数名2,…> 函数返回值类型 函数名(形参表) { 函数体 }说明: (1)这里的类型参数名就是代表形形色色数据类型的通用参数名,它可以代表基本数据类型,也可以代表类。 (2)编写函数模板的方法是:step 1:定义一个普通的函数,数据类型采用具体的普通的数据类型,仍以打印数...
阅读全文
摘要:#include "stdafx.h"#include <iostream> using namespace std; class Vehicle { public: Vehicle(float speed,int total) { Vehicle::speed=speed; Vehicle::total=total; } virtual void ShowMember() { cout<<speed<<"|"<<total<<endl; } virtual ~Vehi...
阅读全文
摘要:一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为:#ifdef 标识符程序段1#else程序段2#endif它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。其中#else部分也可以没有,即:#ifdef程序段1#denif在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。如你在头文件aaa.h中定义..
阅读全文
摘要:1、利用IPicture接口加载、显示图片IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口是IPicture和IPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSDN,一般创建图片对象可以用OleLoadPicture函数,它简化了基于流内容创建图片对象。IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitm
阅读全文

浙公网安备 33010602011771号