C++入门知识经典教程.docx
《C++入门知识经典教程.docx》由会员分享,可在线阅读,更多相关《C++入门知识经典教程.docx(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2010-12-15 bambooMFC入门教程Visual C+/MFC 入门教程闻怡洋第一章VC入门1.1 如何学好vc1.2 理解Windows消息机制1.3 利用Visual C+/MFC开发Windows程序的优势1.4 利用MFC进行开发的通用方法介绍1.5 MFC中常用类、宏、函数介绍第二章图形输出2.1 和GUI有关的各种对象2.2 在窗口中输出文字2.3 使用点、刷子、笔进行绘图2.4 在窗口中绘制设备相关位图、图标、设备无关位图2.5 使用各种映射方式2.6 多边形和剪贴区域第三章文档视结构3.1 文档视图框架窗口间的关系和消息传送规律3.2 接收用户输入3.3 使用菜单3
2、.4 文档、视、框架之间相互作用3.5 利用序列化进行文件读写3.6 MFC中所提供的各种视类介绍4.1 Button4.2 Static Box4.3 Edit Box4.4 Scroll Bar4.5 List Box/Check List Box4.6 Combo Box/Combo Box Ex4.7 Tree Ctrl4.8 List Ctrl4.9 Tab Ctrl4. A Tool Bar4.B Status Bar4.C Dialog Bar4.D 利用 AppWizard 创建并使用 ToolBar StatusBar Dialog Bar4.E General Window
3、4.F关于WM_NOTIFY的使用方法第五章对话框5.1 使用资源编辑器编辑对话框5.2 创建有模式对话框5.3 创建无模式对话框5.4 在对话框中进行消息映射5.5 在对话框中进行数据交换和数据检查5.6 使用属性对话框5.7 使用通用对话框5.8 建立以对话框为基础的应用5.9 使用对话框作为子窗口第六章网络通信开发6.1 WinSock 介绍6.2 利用WinSock进行无连接的通信6.3 利用WinSock建立有连接的通信派 派第一章 VC入门1.1 如何学好VC这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学 习就会起到更好的效果。万事开头难,为了帮助
4、朋友们更快的掌握VC开发,下面我将自己 的一点体会讲一下:1、需要有好的C/C+基础。正所谓“磨刀不误砍柴”,最开始接触VC时不要急于开始 Windows程序开发,而是应该进行一些字符界面程序的编写。这样做的目的主要是增加对 语言的熟悉程度,同时也训练自己的思维和熟悉些在编程中常犯的错误。更重要的是理解 并能运用C+的各种特性,这些在以后的开发中都会有很大的帮助,特别是利用MFC进行 开发的朋友对C+定要能熟练运用。2,理解Windows的消息机制,窗口句柄和其他GUI句柄的含义和用途。了解和MFC各个 类功能相近的API函数。3、一定要理解MFC中消息映射的作用。4、训练自己在编写代码时不使
5、用参考书而是使用Help Online 5、记住一些常用的消息名称和参数的意义。6、学会看别人的代码。7,多看书,少买书,买书前一定要慎重。8、闲卜来的时候就看参考书。9、多来我的主页。A0A后面几条是我个人的一点意见,你可以根据需要和自身的情况选用适用于臼己的方法。 此外我将一些我在选择参考书时的原则:对于初学者:应该选择些内容比较全面的书籍,并且书籍中的内容应该以合理的方式 安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的 书,因为这些书一般都比较易懂,而旦语言比较轻松。买书前一定要慎重如果买到不好用的 书可能会对自己的学习积极性产生打击。对于已经掌握了 V
6、C的朋友:这种程度的开发者应该加深自己对系统原理,技术要点的认识。 需要选择些对原理讲解的比较透彻的书籍,这样来会对新技术有更多的了解,最好书 中对技术的应用有一定的阐述。尽量选择示范代码必较精简的书,可以节约银子。此外最好涉猎些辅助性的书籍1.2 理解Windows消息机制Windows系统是个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难个定义 (谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。1、消息的组成:个消息由一个消息名称(UINT),和两个参数(WPARAM, LPARAM) 当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某个窗口。例如当菜
7、单 转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam)是命 令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自 定义消息来发送通知和传送数据。2、谁将收到消息:个消息必须由一个窗U接收。在窗口的过程(WNDPROC)中可以对 消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以 定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对 WM_PAINT进行处理。3、未处理的消息到那里去了: 1$为窗口编写了默认的窗口过程,这个窗口过程将负责处理 那些你不处理消息。正因为有
8、了这个默认窗口过程我们可以利用Windows的窗口进行开 发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都 可以不予理睬让系统自己去处理。4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识 个窗口,发送个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口 都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用个窗口 过程代码,你在窗上按下鼠标时消息就会通过窗的句柄被发送到窗而不是窗口 5、示例:下面有一段伪代码演示如何在窗口过程中处理消息LONG yourWndProc(HWND hWnd,UINT u
9、MessageType,WPARAM wP,LPARAM) (switch(uMessageType)(使用SWITCH语句将各种消息分开case(WM_PAINT):doYourWindow(.);在窗口需要重新绘制时进行输出break;case(WM_LBUTTONDOWN):doYourWork(.),在鼠标左键被按下时进行处理break;default:callDefaultWndProc(.);对于其它情况就让系统自己处理 break;接下来谈谈什么是消息机制:系统将会维护个或多个消息队列,所有产生的消息都回被放 入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将
10、该消息发送 给拥有该窗口的程序的消息循环。每个运行的程序都有自己的消息循环,在循环中得到属 于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控 制权交给系统所以Windows可以同时进行多个任务。下面的伪代码演示了消息循环的用法:while(l)id=getMessage(.);if(id = quit)break;translateMessage(.);)当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。图示 消息投递模式在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后可以 发送下消息到相应程序,如果个
11、程序陷如死循环或是耗时操作时系统就会得不到控制 权。这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转 换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多 任务系统。Windows95/NT就是这种系统1.3 利用Visual C+/MFC开发Windows程序的优势MFC借助C+的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard 使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了
12、 定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C+的封装功能使开发者摆 脱Windows中各种句柄的困扰,只需要面对C+中的对象,这样一来使开发更接近开发语 言而远离系统。(但我个人认为了解系统原理对开发很有帮助)正因为MFC是建立在C+的基础上,所以我强调C/C+语言基础对开发的重要性。利用 C+的封装性开发者可以更容易理解和操作各种窗口对象;利用C+的派生性开发者可以减 少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口 的活动。而且C+本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活 的代码。在MFC中对消息的处理利用了消息映射的方
13、法,该方法的基础是宏定义实现,通过宏定义 将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法。代码如下BEGIN一MESSAGE一MAP(CMainFrame, CFrameWnd)/AFX_MSG_MAP(CMainFrame)ON_WM_CREATE()/AFX_MSG_MAPON_COMMAND(ID_FONT_DROPDOWN, DoNothing)END_MESSAGE_MAP()经过编译后,代码被替换为如下形式(这只是作讲解,实际情况比这复杂得多): /BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)CMainFrame:newW
14、ndProc(.)(switch(.)(/AFX_MSG_MAP(CMainFrame)/ ON_WM_CREATE()case(WM_CREATE):OnCreate(.);break;/AFX_MSG_MAP/ ON_COMMAND(ID_FONT_DROPDOWN, DoNothing) case(WM_COMMAND):if(HIWORD(wP)=ID_FONT_DROPDOWN) (DoNothing(.);break;/END_MESSAGE_MAP() newWndProc就是窗口过程只要是该类的实例生成的窗口都使用该窗口过程。所以了解了 Windows的消息机制在加上对消息映射
15、的理解就很容易了解MFC开发的基本思 路了1.4 利用MFC进行开发的通用方法介绍以下是我在最初学习VC时所常用的开发思路和方法,希望能対初学VC的朋友有所帮助和 启发。开发需要读写文件的应用程序并且有简单的输入和输出可以利用单文档视结构开发注重交互的简单应用程序可以使用对话框为基础的窗,如果文件读写简单这可利用 CFile进行开发注重交互并且文件读写复杂的的简单应用程序可以利用以CFormView为基础视的单文 档视结构利用对话框得到用户输入的数据,在等级提髙后可使用就地输入在对多文档要求不强烈时尽量避免多文档视结构,可以利用分隔条产生单文档多视结构在要求在多个文档间传递数据时使用多文档视结
16、构学会利用子窗口,并在自定义的子窗口包含多个控件达到封装功能的目的尽量避免使用多文档多视结构不要使用多重继承并尽量减少个类中封装过多的功能1.5 MFC中常用类、宏、函数介绍常用类CRect:用来表示矩形的类,拥有四个成员变量:top left bottom right。分别表是左上角和右 下角的坐标。可以通过以下的方法构造。 CRect( int 1, int t, int r, int b);指明四个坐标 CRect( const RECT& srcRect);由 RECT 结构构造 CRect( LPCRECT IpSrcRect):由 RECT 结构构造 CRect( POINT po
17、int, SIZE size );有左上角坐标和尺寸构造 CRect( POINT topLeft, POINT bottomRight);有两点坐标构造下面介绍几个成员函数: int Width() const;得到宽度 int Height() const;得到髙度 CSize Size() const;得到尺寸 CPoint& TopLeft();得到左上角坐标 CPoint& BottomRight();得到右下角坐标 CPoint CenterPoint() const;得当中心坐标此外矩形可以和点(CPoint)相加进行位移,和另个矩形相加得到“并”操作后的矩形。 CPoint!用
18、来表示个点的坐标,有两个成员变量:xy。可以和另一个点相加。 CString:用来表示可变长度的字符串。使用CString可不指明内存大小,CString会根据 需要自行分配。下面介绍几个成员函数: GetLength得到字符串长度 GetAt得到指定位置处的字符 operator + 相当于 strcat void Format( LPCTSTR IpszFormat,.);相当于 sprintf Find查找指定字符,字符串 Compare 比较 CompareNoCase不区分大小写比较 MakeUpper改为小写 Make Lower改为大写CStringArray:用来表示可变长度的
19、字符串数组。数组中每个元素为CString对象的实例。 下面介绍几个成员函数: Add 增加 CString RemoveAt删除指定位置CString对象 RemoveAH删除数组中所有CString对象 GetAt得到指定位置的CString对象 SetAt修改指定位置的CString对象 InsertAt在某一位置插入CString对象常用宏:RGB、 TRACE ASSERT、VERIFY常用函数 CWindApp* AfxGetAppO; HINSTANCE AfxGetInstanceHandle() HINSTANCE AfxGetResourceHandle() int Afx
20、MessageBox( LPCTSTR IpszText, UINT nType = MB OK, UINT nIDHelp = 0 );用于 弹出个消息框第二章图形输出2.1 和GUI有关的各种对象2.2 在窗口中输出文字2.3 使用点、刷子、笔进行绘图2.4 在窗口中绘制设备相关位图、图标、设备无关位图2.5 使用各种映射方式2.6 多边形和剪贴区域2. I和GUI有关的各种对象在Windows中有各种GU!对象(不要和C+对象混淆),当你在进行绘图就需要利用这些 对象。而各种对象都拥有各种属性,下面分别讲述各种GUI对象和拥有的属性字体对象CFont用于输出文字时选用不同风格和大小的字体
21、。可选择的风格包括:是否 为斜体,是否为粗体,字体名称,是否有下划线等。颜色和背景色不属于字体的属性。关于 如何创建和使用字体在2.2在窗口中输出文字中会详细讲解刷子CBrush对象决定填充区域时所采用的颜色或模板。对于一个固定色的刷子来讲它 的属性为颜色,是否采用网格和网格的类型如水平的,垂直的,交叉的等。你也可以利用 8*8的位图来创建一个自定义模板的刷子,在使用这种刷子填充时系统会利用位图逐步填充 区域。关于如何创建和使用刷子在2.3使用刷子、笔进行绘图中会详细讲解画笔CPen对象在画点和画线时有用。它的属性包括颜色,宽度,线的风格,如虚线, 实线,点划线等。关于如何创建和使用画笔在2.
22、3使用刷子、笔进行绘图中会详细讲解位图CBitmap对象uj以包含一幅图像,可以保存在资源中。关于如何使用位图在2.4在 窗口中绘制设备相关位图、图标、设备无关位图中会详细讲解还有一种特殊的GU!对象是多边形,利用多边形可以很好的限制作图区域或是改变窗 口外型。关于如何创建和使用多边形在2.6多边形和剪贴区域中会详细讲解。在Windows中使用GUI对象必须遵守一定的规则。首先需要创建一个合法的对象,不同的对象创建方法不同。然后需要将该GUI对象选入DC中,同时保存DC中原来的GUI对象。如果选入一个非法的对象将会引起异常。在使用完后应该恢复原来的对象,这一点特别 重要,如果保存个临时对象在D
23、C中,而在临时对象被销毁后可能引起异常。有一点必须 注意,每个对象在重新创建前必须销毁,下面的代码演示了这种安全的使用方法。OnDraw(CDC* pDC) (CPen penl,pen2;pen 1 .CreatePen(PS_SOLID,2,RGB( 128 J 28,128);创建对象pen2.C 优 atePen(PS一SOLID,2,RGB(I28,I28,0);创建对象CPen* pPenOld=(CPen*)pDC-SelectObject(&penI);选择对象进 DCdrawWithPenl.(CPen*)pDCSelectObject(&pen2)J选择对象进 DC dra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 入门 知识 经典 教程
限制150内