首页 vs2005入门

vs2005入门

举报
开通vip

vs2005入门vs2005入门 附录4 使用Visual Studio 2005录录Visual C++录用程序 本书中的程序书例都是使用书书的书用程序~本章书书书书书模式的将Visual Studio 2005Visual C++ 基书知书书行介书。由于篇幅所限~本章不介书将的基本书法~需要了解的书者可以书书相书书Visual C++ 籍和书料。 t4.1 Visual Studio 2005书书书境 是一套完整的书书工具集~可以用于生成书用程序、面书用程序桌Visual StudioASP.NET Web 和移书书用程序...

vs2005入门
vs2005入门 附录4 使用Visual Studio 2005录录Visual C++录用程序 本 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 中的程序书例都是使用书书的书用程序~本章书书书书书模式的将Visual Studio 2005Visual C++ 基书知书书行介书。由于篇幅所限~本章不介书将的基本书法~需要了解的书者可以书书相书书Visual C++ 籍和书料。 t4.1 Visual Studio 2005书书书境 是一套完整的书书工具集~可以用于生成书用程序、面书用程序桌Visual StudioASP.NET Web 和移书书用程序等。集成它、、和等多书书书书言~全面并Visual C++Visual C#Visual BasicVisual J# 支持。本书通书一小例子介书个来的书书书境~使书者书Microsoft .NET FrameworkVisual Studio 2005其有一初步的了解。个 t4.1.1 书启Visual Studio 2005 在“书始”菜书中依次书书“程序”/“Microsoft Visual Studio 2005”/“Microsoft Visual Studio ~书启窗口~如书所示。2005”Microsoft Visual Studio 2005t4.1 最新打书的书目 书书书建新书目 书主口窗t4.1 Visual Studio 2005 在始书中可以书看到最近打书的启个称书目~书书书目名可以打书书书目。6 54 Windows书书程网书典书用程教 4.1.2 书建书目 在“起始书”中书书“书建”书书后面的“书目”超书接;或者在菜书中书书“文件”新建”书/“/“目”,~打书“新建书目”书书~如书框所示。t4.2 书新建工程”书书框t4.2 “ 在书书左书的“书目书型”列表中书书框~在右书可以看到已书安的书目模板。在列装Visual C++ 表中书书“控制台书用程序”~然后书入书目的名~书书保存书目的目书。默书目书书称Win32C:\Documents ;在不同操作系书下默书目书的and Settings\Administrator\My Documents\Visual Studio 2005\Projects 位置有差书,。配置完成后~书书“定”按书~打书书建会确书用程序向书~如书所示。Win32t4.3 书书用程序向书t4.3 Win32 书书“下一步”按书~打书书用程序书置口~如书窗所示。t4.4 55 附书1 使用Visual Studio 2005书始Visual C++书用程序 书书书书用程序书型t4.4 用书可以书书前书目的书型~包括当书用程序、控制台书用程序、和书书等。书书静WindowsDLL“控制台书用程序”书书按书~然后书书“完成”按书~完成书建书目的操作。默书的控制台书用程序的主文件中包含一主函个数~代书如下,_tmain() int _tmain(int argc, _TCHAR* argv[]) { return 0; } 在行控制台书用程序书~首先书用运将函。函中包含~数数两个参数参数表示_tmain()argc命令行的量;其中包含书用程序名本身,~参数数参数表示包含命令行的书。参数数argv t4.1.3 书用程序的书书界面 在中书书控制台书用程序书目的界面如书所示。Visual Studio 2005Win32t4.5 在窗窗体决属窗口中包括菜书、工具书、书书及代书书书器、解 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 书源管理器和性Visual Studio 口。菜书和工具书中书大多数书用程序都支持的部件~书里就不做书书介书了。Windows 1,窗体及代器录录录录录录录录 窗体书书及代书书书器位于窗体它的核心位置~是程序书书书界面和书书代书的主要工Visual Studio 作。在书书区书用程序书~可以在书域中书书书书的界面~书书书书中的代书。区框并写窗体MFC 2,解决方案源管理器录录录录录 在解方案书源管理器中~以书书书示前解方案中包含的书目、以及每书书目中包含的决状构当决个 书文件、源文件和书源文件列表。 在解方案书源管理器中~可以向解方案中添加书目、书除书目、向书目中增加书、书源、书书决决 框等。 56 Windows书书程网书典书用程教 解方案书源管理决器窗体书书及代书书书器 属窗性口 书在中书书书目的界面t4.5 Visual Studio 2005MFC 书于解方案书源管理器的具使用方法在后面章书中书合具情介书。决体将体况 3,属性窗口 在性口中~可以书示和书置书书中控件的性。在解方案书源管理器中~书书一文件属窗框属决个~在性口中也书示其性信息~如书属窗会属所示。t4.6 在解方案书源管理器口决窗中书书一文件个 在性口中书看书书文件的属窗属性信息 书中一性~在下面书示个属将属性的描述信息 书书看文件的性属t4.6 57 附书1 使用Visual Studio 2005书始Visual C++书用程序 4.1.4 一控制台书用程序的小书例个 本书通书一书书的书例介书如何书书将个来控制台书用程序书目。Visual C++ 参照小书介书的方法书建一个控制台书用程序工程~书目名书称。书目4.1.2Win32HelloWorld的主文件书。HelloWorld.cpp HelloWorld.cpp1,的默代录录录 中包含的默书代书如下,HelloWorld.cpp #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } Stdafx.h的英文全书称Standard Application Frame Extend~用于书书书文件书书书。书文件书提示书书是指把一书目中使用的一些书准书文件;例如个Windows.H和Afxwin.H,书先书书~以 后书工程书书书~不再书书书部分书文件~书书使用书书书的书果。书书可以加快书书速度~书省书书。默书情下~况函中只包含一书句~返回函书数条即数。_tmain()0 2,在_tmain()函中添加代书数 要在书目中书书指定的功能~就需要在主函数中添加相书的代书。本书例只书书一书书个_tmain() 的功能~在控制台口中书出“即窗字符串~函的代书如下,数Hello World!”_tmain () #include "stdafx.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* argv[]) { printf("Hello World!\r\n"); system("pause"); return 0; } 在控制台书用程序中~函用于书出据。数数表示回书书行符~在printf()\r\nsystem("pause")中明~其功能是使书用程序书于等待据的书~以便用书书看控制台口中的书出信息。声数状窗当stdlib.h 用书按下任意书后~书用程序书束。将 C++是大小敏感的~写system和System表示的含书不同。提示 58 Windows书书程网书典书用程教 3,行程序运 在菜书中书书“书书”启启书书书”~或在工具书中书书“书书书”按书可以行前的书目~如书运当/“ 所示。t4.7 书书目的行界面运t4.7 HelloWorld 可以看到~在控制台口中书示了窗方法中书出的字符串“。按下任_tmain()Hello World!” 意书后~书用程序书束。将 4,在程序中添加注书 书秀的程序书书人书不书代书得好~而且在代书中适地添加注书~而增加程序的可书性写会当从。 书书器不书理程序中的注书信息~因此在程序中增加注书信息不影程序的书行效率。会会响Visual C++ 支持下面书书型的注书方式。两Visual C++ ;,注书符1// 注书符后面的容被书书注书信息。内将可以代书位于同一行~也可以书占用一行~例与独////如, // 文件名,HelloWorld.cpp // 描述,主程序文件 // 作者,明星启 // 日期,2009-12-18 …… int a = 0; // 声个明一整型书量a~初始书书0 在最后一行代书中~是有效的代书~而其后面的容书注书信息。内int a = 0; ;,注书符2/*…*/ 注书符的使用很灵与另活~可以要书行的代书书于同一行~也可起一行~甚至可以在/* ... */ 有效代书的部。书始注书符;内从,到书束注书符;,之书的全部容内均书书注书部分。书于多行注书~/**/必书使用书始注书符;,书始注书~使用书束注书符;,书束注书。注书行上不书出书其他注书字符。下/**/面是使用注书符的示例代书,/*…*/ /* 文件名,HelloWorld.cpp 描述,主程序文件 作者,明星启 日期,2010-03-18 */ …… int a = 0; /* 声个明一整型书量a~初始书书0 */ int b /*书量b*/ = 0; 4.1.5 配置书用程序 在中可以书置书目的性~包括属属属常书性、书书性、属Visual Studio 2005Visual C++C/C++ 性、书接器性等。在菜书中依次书书“书目”属书目名属属框性”~可以打书书目性书书~如书/“<> 59 附书1 使用Visual Studio 2005书始Visual C++书用程序 所示。工程名指前打书的书目名。不同书型的书目~其性配置界面也不相同。书里以当称属4.8<> 控制台书用程序书目书例书行介书。 书书目的行界面运T4.8 HelloWorld 在左书书书中书书“构属常书”~可以书置常书性~如书所示。t4.9 书配置常书性属t4.9 在常书性书面中属常用的配置书如下, , 书出目书~指定书出文件目书的相书路径~其中可以包含书境书量。 , 配置书型~指定生成文件的书型。控制台书用程序书目的默书配置书型书“书用程序~其他(.exe)” 书书包括“书书书、“书书静和“书用工具”。.dll”.lib” , 60 Windows书书程网书典书用程教 的使用~指定使用的方式~包括“使用书准书”;不使用即MFCMFCWindows ,、“在书书中使用静和“在共享中使用。MFCMFC”DLLMFC”, 字符集~通知书书器使用指定的字符集~可以帮决助解本地化书书~包括“未书置”、“使用 字符集”和“使用多字书字符集”等书书。Unicode 在左书书书中书书“书书”~可以书置书书性~如书构属所示。t4.10 书配置书书性属t4.10 在书书性书面中属常用的配置书如下, , 命令~指定书用程序的命令行。参数参数 , 工作目书~指定书用程序的工作目书~默书情下书包含书目文件的目书。况 书书“常书”~可以书置的常书配置性~如书属所示。C/C++”/“C/C++t4.11 书配置常书性属t4.11 C/C++ 61 附书1 使用Visual Studio 2005书始Visual C++书用程序 在书里比书常用的配置书是“附加包含目书”~系书可以在指定的目书下书书目中包含的书文件找 ;文件,。.h 书书“书接器”书入”~可以书置书接器的书入配置性~如书属所示。/“t4.12 在书里比书常用的配置书是“附加依书书”~用于指定要添加到书接行的附加书~通它常指.lib文件~例如。kernel32.lib 可以书置的配置书书书多~书里就不一一列书了。书者在书书书用程序书~可以书合具情书和很体况学 了解。 书配置书接器书入性属t4.12 4.1.6 书书书用程序 提供了好的书书书境~能书很帮迅速地助用书书书和定位书用程序中的书书。Visual Studio 2005 在书书书用程序的书候~可以书书书主要的书书器配置模式~两即;书书,模式和DebugRelease;书行版,模式。在模式下~书书的可书行程序中包含了书多书书信息~因此程序相书比书大~但Debug 比书易于书程序书行书书~在模式下~书书的可书行Release 程序比书小~书书速度快~但不便于书程序书行书书。 版本的程序通常是最后提交书用书使用的。Release 在的工具书中可以书书书书器配置Visual Studio 2005 模式~如书所示。t4.13书t4.13 书书书书器配置模式 用书可以书书和~也可以书书“配置DebugRelease 管理器…”~打书“配置管理器”书书~书书书目书置书书框个 器配置模式~如书所示。t4.14 62 Windows书书程网书典书用程教 书配置管理器t4.14 下面介书书书书用程序的具方法。体 1,书置断点 断运断将断点是程序中的一行代书~程序在行到点书中~用书可以书看书量的书~书步书书程序~书 程序的行情书行分运况析。 在代书口中~书书一行代书左书的窗区断断灰色域~可以在书行代书上书置点。点的表书是在代书行 前面书示一书个色的书点~如书所示。t4.15 断点 书书置断点t4.15 在模式下行程序~程序行到运当运断会断会点书书停~此书表示点的书色书点书书中出书一Debug 个黄色的箭书~如所示。t4.16 63 附书1 使用Visual Studio 2005书始Visual C++书用程序 书停在断点 书书书书用程序书书停在断点位置t4.16 在程序书于中书下~右书书书一书量~在书出菜书中书书“快速书书”~可以打书快速书书书书~书断状个框 看书书书量的书~如书所示。r4.17 将会窗并当鼠书移至书量上~书出书浮口~在其中书示前书量的书~如书所示。t4.18 书浮窗口 书在快速书书口中书看书量的书 书窗在书浮窗口中书看书量的书t4.17 t4.18 2,书书口窗 在书书程序书~代书口的下面窗即窗自书书示出局部书量、书书、书用堆书和书口等书口。窗Visual 书提供一些其他的书书口~书书菜书“书书”窗窗窗口”~可以打书指定的书书口~如书所示。Studio/“4.19 64 Windows书书程网书典书用程教 书打书书书口窗4.19 其中常用书书口的具功能如下,窗体 , 局部书量口~窗书示书于前当来数上下文或范书书位于本地的书量。通常指正在书行的书程或函中 的书量。在书里可以书看书量的书。 , 自书口~书示在前代书行和窗当上一代书行中使用的书量。 , 书书口~可以添加要书书其书的书量。书中一书量~书书窗个将鼠书右书~书书“添加书书”~可以书中的书 量添加到书书口中。例如~明一整型书量窗声个~其书书书并将~在书书口中书看窗a10 其容的界面如书内所示。4.20 , 书用堆书口~窗可以书看书用堆书上的函名、书型和书。数参数参数 , 即窗达即窗书口~用于指定一些命令~比如书算表式的书、书行书句和打印书量等。在书书口中书入 下面的命令~可以书看书量的书~如书所示。at4.21 ?a 65 附书1 使用Visual Studio 2005书始Visual C++书用程序 书书书口 书窗在书书口中书看书量即窗的书t4.20 t4.21 a 3,书步书行 当断状程序书于中书书~按下书可以逐书程地书步书行程序~在书行函书不书入函书即数会数体F10 步书行其中的书句~而是直接书行完函~返回书果~按下数并书可以逐书句地书步书行程序~在书即F11 行函书书入函~书步书行函中的书句。在函中书书程序书~可以按数会数体数体数体按跳出函Shift+F11数体~书书书书程序。 4,书除断点 在代书口中书书窗断当断点书书~可以书除前的点。在菜书中书书“书书”书除所有断点”~可以书/“ 除前书目中的所有当断点。 t4.2 MFC书程基书 本书中所有书例都使用作书书书工具。书了考书兼容性~书例中有并没涉及Visual Studio 2005.Net 技书~而是使用书书的书程框即架。书书~使书者使用作书书书工具~FrameworkMFCVisual Studio 6.0也可以方便地书书和行本书中的书例。很运 t4.2.1 MFC基本概念 是的书~是写微书提供的在操作系书中使用MFCMircrosoft Foundation ClassWindowsC++书书用程序的写框架和引擎。框架定书了书书书用程序的书廓~且提并供了书书用书接口MFCWindows 的书准方法~程序书只要根据书定书的接口把具书用程序的体个特性化的代书添加到书书廓中。例如~程序书可以借助提供的书书工具直接书建一个书书~或者向书书中添加文本框框框、Visual StudioWindows 列表、书书和按书等控件~而不需要框框它当框考书书的定书代书。然~程序书可以向书书中添加代书~完成书用程序的具功能。体 框架由书书书成~其中封装了大量的书用程序书程接口。因此可以MFCMFCWin32MFC很方便地书用~书书书用程序。书大大地书化了书书书用程序的书程。Windows APIWindowsWindows 中集成了~的主要它特性包括,Visual Studio 2005MFC 8.0 , 提供书一些通用书的支持~例如列表、书、集合、字符串书、书书数日期书、文件书书书等。 , 支持丰档富的用书界面~包括书文书书;,书、多文书书;构档,书、书书、菜书、构框常SDIMDI 用控件、打印书书和打印等。 , 可以方便地书书书书书接书书用程序。DLL , 支持多书据书书书数技书~包括、、、和等。ODBC APIMFC ODBCDAOOLEDBADO , 使用;书网服书接口,、以及封装的接口~使书书程网ISAPIWindows SocketWin32 Internet 更加书松便捷。 , 66 Windows书书程网书典书用程教 支持书象嵌入、书象书接和自书化的服书器和容器。OLE , 可以方便地生成和使用控件。ActiveX 以上只是书书介书了框将架的基本功能和特性~本书在后面的小书中介书书书的书书MFCMFC 次和一些常用书的使用方法。MFC 如果要在控制台书用程序中使用MFC~书需要在书建书目书的书用程序书置界面提示中书中MFC书书~如书框t4.22所示。 书在控制台书用程序书目中支持t4.22 MFC t4.2.2 MFC的书书次 提供了丰帮数构异富的书书~可以助用书书书基书据书、界面书书、文件服书、常书理等各书功MFC 能。 书书的分书书次书如书构所示。MFCt4.23 67 附书1 使用Visual Studio 2005书始Visual C++书用程序 书书书的分书书次书书构t4.23 MFC 是书书中的基书~多很书都是从派生的。书可以提CObjectMFCMFCCObjectCObject供一些基书的服书~包括支持序列化、提供运断行书书的信息、书象书书出等~的派生书也都书CObject承了书些特性。书不支持多重书承~也就是书~的派生书只能有书一个CObjectCObjectCObject基书。 t4.2.3 书用程序书书构 书用程序书书;构,提供了书用程序的几乎所有通用功能~Application ArchitectureWindows 是成构书用程序的主要框从构架。在书书书用程序书~可以书用程序书书书建派生书~重书书有的函Windows 数数从构框或者添加新的成书函~而造书用程序的架。 1,书用程序书程支持书 书程是操作系书中程序行的基本书运运个从元~书用程序中可以同书行多书程~而提高书用程序的书书理能并力。 支持多书程~书是所有书程的基书~的它体派生书可以书书书程的具功能。MFCCWinThread 支持书书程书型~工作者书程和用书界面书程。两即CWinThread 工作者书程有没个收书消息的功能~例如在书描一包括个地址的书子书~可以同书网254IPC启书个个个工作者书程~在每书程中书行书一地址的操作~书书其是否在书。254IPping 用书界面书程;也书称书程,具有收书消息的功能~可以书理系书从收到的消息。UICWinApp及其派生书就是用书界面书程的例子。书是的书用程序书~书书书用程序的CWinAppMFCWindows初始化、行和书运框个从止。基于架生成的书用程序必书有且书有一派生的书的书象~在书CWinApp建口窗构之前就需要先造书书象。是的派生书~因此也可以把看作是书用它CWinAppCWinThread 程序的主书程。 书于多书程书程的方法在将小书中介书。Visual C++t4.7 2,文书档 文书用于档装数封书用程序的据管理。书是文书的基书~提档它档供了文书基本的函CDocument 68 Windows书书程网书典书用程教 数档档数功能~例如书建文、打书文和保存据等。 3,文模板书档 文模板书文、书书及书口相档将档框窗来档档框窗互书系起~在书建新文或书书书书书文、书书及书口的书建。 是抽象书~不能直接使用~通常使用提供的书两派生CDocTemplateMFCCDocTemplate书之一~即和。用于书文档CSingleDocTemplateCMultiDocTemplateCSingleDocTemplate;,模板~用于多文;档,。SDICMultiDocTemplateMDI 4,消息映射书 操作系书采用消息 机制 综治信访维稳工作机制反恐怖工作机制企业员工晋升机制公司员工晋升机制员工晋升机制图 通知书用程序书生了什书书的事情。例如~书书鼠书、按下书书上的Windows 一书、打书一口等~都使个个窗会向书用程序书送消息。消息中包含消息书型和消息的具体Windows 内容等信息~例如书书鼠书所书生的消息中包含了书书鼠书书的坐书。 消息映射把命令或消息引书至用书书其书的书函写响数上~书书书用程序就可以书各书消息Windows做出相书的书理了。书是书书中消息映射体个从系的一基书~接收消息的书必书CCmdTargetMFC 书派生。书在书书书次书中的位置如书构所示。CCmdTargetCCmdTargetMFCt4.24 书书在书书书次书中的位置构t4.24 CCmdTargetMFC 可以看到~前面介书的书程基书、文基书档和文模板档抽象书CWinThreadCDocument 都是书的派生书~因此书都具书它消息书理的能力。CDocTemplateCCmdTarget 5,CCmdUI书 书有基书~提没它状数当供更新用书界面书象书的函。例如~用书书书书用程序的下拉菜书CCmdUI 书~要定每菜书书的书示书~包括是确个状否有效和是否被书中等。书在一个派CCmdUICCmdTarget生书的书理程序中使用~菜书下当框个拉书~架搜索每ON_UPDATE_COMMAND_UI 书理程序~书置菜书书的书。状ON_UPDATE_COMMAND_UI t4.2.4 口书窗 窗框窗框属口书主要包括架口书、书书书、书书书、控件书、控件书书和性书书。在书中可以看到~4.24 书是所有口书的基书~是窗它的派生书~因此可以接收和书理口相书的与窗消息。CWndCCmdTarget 1,框窗架口书 框窗档架口书提供书文书书书的构框窗档架口支持。文书书书是构中据存书和书示相数//MFC分的一书书。离构 主口通窗常是书用程序中第个窗接收消息的口。是书文书书书用程序的主档窗1CFrameWnd口的基书~书多文书书书用程序提档框窗供主架口~书多文书书书用档CMDIFrameWndCMDIChildWnd 69 附书1 使用Visual Studio 2005书始Visual C++书用程序 程序提供子口。窗 2,书书书 书书书书文提档个个窗窗框窗区与供一或多口~书书管理子口和程序架口的用书域~书书用书之书的交互功能。是所有书书书的基书~其他常用的书书书包括书书书书书、书书书窗体CViewCScrollView 、控件书书书、文件书书书书书和书形控件书书书等。CFormViewCCtrlViewCEditViewCTreeView 3,书书书框 是书书基书~可以提框它框与供书书的界面~以方便、友好的界面书格用书书行交互。CDialog 书书包括模式书书和框框框两框窗框非模式书书书书型。模式书书在书书其他口之前必书书书~无模式书书允书用书在不取消书书的情下书书其框况窗他口。 书封装了一书的派生书~书书的公共书书。例如~文件书书框框MFCCDialogWindows 、书色书书框、字书书书体框、打印书书框以及书CFileDialogCColorDialogCFontDialogCPrintDialog找框和替书书书等。CFindReplaceDialog 4,通用控件书 通用控件书从书派生~封装了书准的控件以及高书的控件~包括静CWndWindowsWindows书文本、可书书文本、书书按书、书书、按书、列表、书合、列表控件和书框框框框框形控件等。 5,控件书书 控件书书书书用程序提供了工具书、书书和书书。状条书是所有控件书书的基书~CControlBar 书用于书建和书书工具书~书用于书建和书书书书~状书用于书建和书书书书。条CToolBarCStatusBarCDialogBar书书是书书和工具书的条框它个框靠框窗混合书物~书示一书书模板~可以像工具书一书浮书和依在主架书口中 6,性书属 属性书通书和两个属属减框书提供书性书的支持。性书可以少书书CPropertySheetCPropertyPage 的量、使性书按书次数属个框放在一书书书中。 7,文档/书书书构 在中~可以采用文档书书书书用程序中据的存书和书示分书。“文书”可以构将数离来档MFC/ 看作是一书用程序的据个数数窗元素的集合~“书书”是据的用书界面~可以通书口书示~也可以通书打印机打印出。书书可以书用书提来与档数供文中据书行交互的功能。 一般情下~况档采用文书书书的书用程序构至少书由以下书象书成,/ , 书用程序是的派生书象~它当个充整书用程序的容器。CWinApp , 框窗架口是派生书象。CFrameWnd , 文是档派生书象~存书书用程序的据~把书些信息提它数并供书书用程序的其他部分。CDocument , 书书是的派生书象~其它与框窗区它并父架口用书书书~可以接受用书书书用程序的书入~书CView 示相书书的文据。档数 4.2.5 书书书书型书 书书书书型书封装了已有的书型和书型~例如和书。书些书除了提构C++Windowschar*RECT供被封装的接口以外~书增加了一些书展的特性。常用的书书书书型书如表所示。C++t4.1 70 Windows书书程网书典书用程教 表常用的书书书书型书t4.1 书名书明 封装个一可书的字符序列~而且提供了一些高书特性~包括字符串操作;比如CString反书和书接等,、字符串搜索、操作符重书;包括+、-、==等,、格式化书出等 用于管理日期和书书CTime和COleDateTime 用于管理书书段~书书即两个之书的书隔CTimeSpan和COleDateTimeSpan CPoint与Windows的POINT书书构个似~包括一点的x和y坐书书~以及书理CPointe书象和POINT书的成书函构数 CRect与Windows的RECT书书构区似~用于存放矩形域~书包括书理CRect书象和RECT书的成书函构数 CSize和Windows的SIZE书书构似~用于管理相书坐书或位置CImageList提供了书Windows书像列表操作的支持。保存了一套相同大小的书书或位书~可以通书索引书书。CImageList书常和列表控件CListCtrl、书形控件CTreeCtrl书合使用~从而在控件中书示书书。 COleVariant封装了OLE自书化书型的VARIANT~可以存取多书书型的据数COleCurrency封装了OLE自书化书型的CURRENCY~是固定浮点书型的据数 下面演示书和书的基本使用方法。CStringCTime 1,CString书 声明书象的方法如下,CString CString str1; 也可以在明声书象书用字符串常量或者已书明的声书象书其书书~例如,CStringCString CString str2("This is a string."); 或者在明声书象书使用书书运算符“书书象书书~例如,CString=” CString str3 = str2; CString str4 = "This is a string."; 可以使用函和数函书书数书象中的书字符~例如,个GetAt()SetAt()CString str2.SetAt(0, 't');// str2将书成"this is a string." char c = sr2.GetAt(0);// 字符书量c的书书't' 书可以像书书书数运元素一书~使用算符;,书书书字符的书~个从索引书书始~例如,[]0 str2[0] = 't';// str2将书成"this is a string." char c = sr2[0];// 字符书量c的书书't' 使用运算符和可以书书字符串的串书操作。++= 【例】演示字符串之书的串书操作~代书如下,t4.1 71 附书1 使用Visual Studio 2005书始Visual C++书用程序 CString str1 = "This"; CString str2 = str1 + " "; str2 += "is"; CString str3("a string."); str2 += " "; str2 += str3; printf(str2); 上面程序的书出书果如下, This is a string. 使用比书运算符可以根据书书书字符串书行比书~比书运算符包括、、、、ASCII<<=>=>和等。如果比书件成条达立~书字符串比书表式返回~否书返回。==!=10【例】演示使用比书运算符书字符串书行比书操作~代书如下,t4.2 CString str1 = "boy"; CString str2 = "girl"; int value = str1 == str2; // 因书str1和str2不相等~所以value的书书0value = str1 != str2;// 因书str1和str2不相等~所以value的书书1value = str1 < str2;// 因书str1的书小于str2~所以value的书书1书可以使用书的函和数函书字符串书行数比书。CStringCompare()CompareNoCase() 的函数原型如下,Compare() int Compare( LPCTSTR lpsz ) const;如果字符串相等~书返回两个~如果书象的书小于参数~书返回~如果0CStringlpsz-1 书象的书大于参数~书返回。CStringlpsz1 的函数与原型函相数它区写似~但在比书字符串书不分大小。CompareNoCase()Compare() 【例】演示使用函和数函书字符串书行数比书操作的方法~t4.3Compare()CompareNoCase() 代书如下, CString str1 = "boy"; CString str2 = "Boy"; // 因书Compare()函分大小~所以数区写value的书书-1 int value = str1.Compare(str2); //因书CompareNoCase()函分不分大小~所以数区区写value的书书0value = str1.CompareNoCase(str2); 书提供一书成书函~用于数体截取字符串的一部分子串~具如下,CString , 函可以数从书象中书取从指定位置书始的个字符。Mid()CStringn , 函可以书数取书象左书的部分字符串。Left()CString 72 Windows书书程网书典书用程教 , 函可以书数取书象右书的部分字符串。Right()CString 【例】演示使用函、数函和数函书字符串书行数截取子串操作的方t4.4Mid()Left()Right()法~代书如下, CString str1 = "hello"; printf("\n%s", str1.Mid(1,2)); printf("\n%s", str1.Left(3)); printf("\n%s", str1.Right(2)); 运行书果如下, el hel lo 书书提供一书成书函~用于书行字符串的书书操作~具如下,数体CString , 函可以数从书象的指定索引书书指定的子串或字符~返回子串或字符的找并Find()CString 起始索引位置。 , 函可以数从书象的尾部书指定的字符~返回字符所在的找并索引书。ReverseFind()CString , 函可以数从书象中书是找内并否有包含在指定字符集的字符~返回书FindOneOf()CString 象中第个字符的索引书。1 【例】演示使用函、数函和数函书字符串书行书书操数t4.5Find()ReverseFind()FindOneOf()作的方法~代书如下, CString str1 = "hello"; printf("\n%d", str1.Find("l")); printf("\n%d", str1.ReverseFind('l')); printf("\n%d", str1.FindOneOf("abcl")); 运行书果如下, 2 3 2 函书书字符串“数中的字符串“的位置~因此返回书果书;第个字符的索Find()hello”l”21引书书~因此第个字符的索引书书,~函数从尾部书书字符串“中的字符032ReverseFind()hello”“位置~因此返回书果书~函书书字符串“数中包含字符集“中任意l”3FindOneOf()hello”abcl”字符的第个位置~因书“中不包含字符“、“和“~所以返回书果书~即第个1hello”a”b”c”21 73 附书1 使用Visual Studio 2005书始Visual C++书用程序 “字符出书的位置索引。l” 2,CTime书 书用于管理日期和书书。每个书象都和一个书型的据相书书。书书数上~CTimeCTimetime_t就是书型~因此每个书象表示的书书都书书一书整型据。个数书可以和time_tlongCTimeCTime 书书合使用~代表两个书象的书书书隔。CTimeSpanCTimeSpanCTime 书可以方便地书理日期和书书~主要包括以下操作。CTime ;,书象的书建和书书1CTime 提供了多个构数个造函~因此书建一书象的方法也多。最书书的书建很书CTimeCTimeCTime 象的方法如下, CTime time1; 可以使用函前系书数将当日期和书书书书到书象中~代书如下,GetCurrentTime()CTimetime1 = CTime::GetCurrentTime(); 在书建书象书~可以在后面的括中使用号书象书其书书~例如,CTimeCTime CTime time2(time1); 也可以在书建书象书在后面的括中使用号年、月、日、书、分、秒的书书其书书~例如,CTime CTime time2(2010, 2, 14, 12, 00, 00);因书每个书象都和一个数据书型相书书~所以可以利用数据书书CTimetime_ttime_tCTime 象书书~例如, CTime time1 = CTime::GetCurrentTime();time_t tt = time1.GetTime(); CTime time4(tt); ;,书象的格式书出2CTime 书了方便书取书书信息~可以利用函数构造书象的文本字符串~例如,Format()CTime CTime time1 = CTime::GetCurrentTime();CString str = time1.Format("%Y-%m-%d %H:%M:%S");printf("%s\n", str.GetBuffer()); 表示位年份~表示月份~表示日期中天的部分~表示小书~表示%Y4%m%d%H%M 分书~表示秒。%S ;,书取书书和日期的具信息体3 可以利用的成书函书数体取书书和日期的具信息~包括年、月、日、书、分、秒或者星CTime 74 Windows书书程网书典书用程教 期中的一哪体天~具书明如下, , ~书取书象中的年份数字。GetYearCTime , ~书取书象中的月份数字。GetMonthCTime , ~书取书象日期中天的部分书书的字。数GetDayCTime , ~书取书象中小书的字。数GetHourCTime , ~书取书象中分书的字。数GetMinuteCTime , ~书取书象中秒的字。数GetSecondCTime , ~书取书象中星期书书的字。数GetDayOfWeekCTime 【例】演示书取当体前系书日期和书书的具信息的方法~代书如下,t4.6 CTime time1 = CTime::GetCurrentTime();CString str = time1.Format("%Y-%m-%d %H:%M:%S");str.Format("%d年-%d月-%d日%d书:%d分:%d秒星期%d", time1.GetYear(), time1.GetMonth(), time1.GetDay(), time1.GetHour(), time1.GetMinute(), time1.GetSecond(), time1.GetDayOfWeek()); printf(str.GetBuffer()); 运行书果如下, 2010年2月18日 22书56分54秒 星期5 ;,使用书书理书书段信息4CTimeSpan 书表示两个书象的书书书隔~相于当两个书象的差。书象CTimeSpanCTimeCTimeCTimeSpan 使用天数数数数来个、小书、分书和秒描述书书书隔~定书一书象的方式如下,CTimeSpanCTimeSpan span1(2, 1, 2, 0); // 书置2天1小书2分书的书书书隔CTimeSpan span1(0, 2, 0, 10); // 书置2小书零10秒的书书书隔 书书象和书象书行操作~可以在书象上增加指定的书书书隔~书两个CTimeCTimeSpan+CTime书象书行操作~可以书算日期两个和书书之书的书书书隔。CTime- 【例】演示利用运算符;、、,操作书和书象。t4.7+=+-CTimeCTimeSpanCTime time1 = CTime::GetCurrentTime();CString strDateTime = time1.Format("%Y-%m-%d %H:%M:%S"); printf("%s\n", strDateTime.GetBuffer());CTimeSpan span1(0, 1, 2, 0);// 书置小书分书的书书书隔 75 附书1 使用Visual Studio 2005书始Visual C++书用程序 time1 += span1;// 在time1上加上小书分书的书书书隔strDateTime = time1.Format("%Y-%m-%d %H:%M:%S");printf("%s\n", strDateTime.GetBuffer());CTime time2 = CTime::GetCurrentTime();CTimeSpan span2 = time1 - time2; printf("time1和time2的书书书隔书: %d\n", span2.GetTotalSeconds());运行书果如下, 2010-02-19 10:43:45 2010-02-19 11:45:45 time1和time2的书书书隔书: 3720 t4.2.6 集合书 提供了书用存书集合据的来数数构数抽象据书~分书书书;,、书表;,和MFC3ArrayList 影射表;,。Map 书及其派生书提供了书书象数数内书的支持。书书象在存中是书书存放的~可直接通书索引CArray 书行书书。书可以书书增加或减数少书大小。中书包含的一些派生书~可以书书书CArrayMFCCArray 型安全的据书书~例如数、、等。CByteArrayCDWordArrayCStringArray 书及其派生书提供了书书象书表的支持。书表中的据书数内数象在存中不是书书存放的~但CList 据书象可以支持向书接~便于前后双数搜索据。中书包含的一些派生书~可以书书书型安MFCCList 全的据书书~例如数、和等。CPtrListCObListCStringList 下面以书和书书例~分书介书书和书表书的使用方法。数CStringArrayCStringList 1,CStringArray书 是书集合书~是数书的派生书~因此书有书它数象书的一切特性。CStringArrayCArray 书保存了一书书书存放的书象~而书象是可书书度的。CStringArrayCStringCString ;,书建书象1CStringArray 书建书象的方法如下,CStringArray CStringArray strArr; 可以使用函书书数来书象中的书数运元素~也可以使用算符来数书取书元GetAt()CStringArray[] 素字符串~索引书从书始。CString0 ;,在书象末尾添加元素2 使用函可以在数书象数个书的末尾添加一新的书象。Add()CStringArrayCString【例】演示使用函在数书象数书末尾添加新元素的方法。t4.8Add()CStringArray CStringArray strArr; CString str1("white"); CString str2("yellow"); strArr.Add(str1); strArr.Add(str2); for(int i=0; iSetWindowText(_T("Visual C++")); 是一个它宏~的作用是书书用程序支持书书。_T("")Unicode t4.4.3 按书控件 切书到书书的书书界面~“工具框从箱”中控件到书书框框上~可以向书书上添加按书控件~Button如书所示。t4.45 95 附书1 使用Visual Studio 2005书始Visual C++书用程序 书向书书中添加按书控件框t4.45 按书控件通常也被书命令按书~因书书书按书书向系书书称会个送一命令。如果添加了书书按书的消息书 理函~书可以在程序中书理书书书按书的数事件。 在书书的书书界面中书中一按书~可以在性口中书置的性。框个属窗它属 按书控件的重要性及其书明如表属所示。r4.9 表按书控件的重要性属t4.9 属 性书 明 指定在按书控件中书示位书~而不是文本Bitmap 指定按书控件中书示的文本Caption 指定控件是书书的默书命令按书框Default Button 指定最初禁用按书控件Disabled 指定按书控件的外书是二书的Flat 指定在按书控件中书示书书~而不是文本Icon 如果控件文本书于控件的书度而言太书~书文本书示书多行将Multiline 书书提供了书管理按书控件~来况但通常情下~只需要书理按书控件的MFCCButton 消息~书书书按书书的书理程序就可以了。书中一按书控件~在性口中书书“控件写个属窗BN_CLICKED 事件”书书~可以书看和书置控件事件~如书所示。t4.46 在后面的下拉框中书书“添加书~可以切书到书书代书BN_CLICKED<>OnBnClickedButton1” 的口~可以在其中书书窗函的代书~如书数所示。OnBnClickedButton1()t4.47 96 Windows书书程网书典书用程教 书书置控件事件 书添加事件书理代书t4.46 t4.47 【例】在书书中添加一按书~照框个参上面介书的方法书书按书添加书书事件的书理程序~代书4.17 如下, void CMfcAppDlg::OnBnClickedButton1() { AfxMessageBox("ClickMe"); } 要使上面程序通书书书~需要修改书目默书的字符集。在的系书菜书中书书“书目”Visual Studio属属框属性”~打书书目性书书。在左书的列表中书书“配置性”常书”~在右书字符集将修改书/“/““未书置”~如书所示。配置完成后~书书“定”按书。确t4.48 运会行书目~书书新建的按书~书出如书所示的书书。框t4.49 书书置书目默书的字符集 书书书按书书出的书书框t4.48 t4.49 t4.4.4 书书按书控件 切书到书书的书书界面~“工具框从箱”中控件到书书框框上~可以向书书上添加书书Radio Button按书控件~如书所示。t4.50 97 附书1 使用Visual Studio 2005书始Visual C++书用程序 书向书书中添加书书按书控件框t4.50 书书按书用于在多书书中书书其中的一书。书中一书书按书控件~可以在性口中书置的性个个属窗它属。书书按书控件的重要性及其书明如表属所示。t4.10 表书书按书控件的重要性属t4.10 属 性书 明 指定控件书示的文本Caption 指定书书按书分书一书Group 如果控件文本书控件的书度而言太书~书文本以多行书示将MultiLine 指定控件的外书和行书与普通按书一书Push Like 书书提供了书管理书书按书控件。在书书的书书界面中右书一书书按书控件~在快来框个MFCCButton 捷菜书中书书“添加书量”~打书“添加成书书量向书”书书~如书框所示。t4.51 书书文本书书添加书量框t4.51 只有将Group属性书置书True的书书按书控件才能添加成书书量~否书书书按书控 98 Windows书书程网书典书用程教 提示件的ID将会不出书在控件ID书合。框 默书情下~书量的书书书况~书量书型书。书入书量名~建书以书书。如果不ControlCButtonm_书控件的性书行书书~只是书置和书属将取控件的书~也可以书书书书书~此书书量书型可以书书书~ValueBOOL即表明书书书按书控件是否被书中。配置完成后~书书“完成”按书。 4.4.5 书书控件框 切书到书书的书书界面~“工具框从箱”中控件到书书框框框上~可以向书书上添加书书Check Box 控件~如书所示。t4.52 书向书书中添加书书控件框框t4.52 书中一书书控件~可以在性口中书置的性。书书控件的性书书按书相个框属窗它属框属与参似~书书照理解。 与框个书书按书控件相同~可以书书书控件添加一书象或者书型的书量。CButtonBOOL 4.4.6 列表控件框 切书到书书的书书界面~“工具框从箱”中控件到书书框框框上~可以向书书上添加列表List Box 控件~如书所示。t4.53 99 附书1 使用Visual Studio 2005书始Visual C++书用程序 书向书书中添加列表控件框框t4.53 列表可以书示一书字符串据。在书书的书书界面中书中一列表控件~可以在性口框数框个框属窗 中书置的性。其中它属属重要的性及其书明如表所示。t4.11 表列表控件的框属重要性t4.11 属性书明 指定水平书书的多列列表框MultiColumn Selection指定列表中的列表书如何被书框取~可书书书Single;书书,、Multiple;多书,、Extended;书展,和None;无, 书添加到列表的字符串书行框自书排序Sort Want Key Input指定如果在列表具有框个框将焦点书按下某书书~列表的所有者收到WM_VKEYTOITEM消息 书书提供了书管理列表控件。在书书的书书界面中右书一列表控件~在来框框个框MFCCListBox 快捷菜书中书书“添加书量”~打书“添加成书书量向书”书书~如书框所示。t4.54 书书列表添加书量框t4.54 100 Windows书书程网书典书用程教 默书情下~书量的书书书况~书量书型书。书入书量名~建书以书书。如果不ControlCListBoxm_ 书控件的性书行书书~只是书置和书属将取控件的书~也可以书书书书书~此书书量书型可以书书书ValueCString 或其他书书据书型。配置完成后~书书“完成”按书。数 书的常用函如表数所示。CListBoxt4.12 表书的常用函数t4.12CListBox 函 数书 明Create书建一个CListBox控件 书取列表中字符串的量框数GetCount GetCurSel书取书书的字符串的索引~从0书始 书定列表的一字符串框个SetCurSel 向列表控件中添加一字符串框个AddString 在指定的索引书入一字符串插个InsertString 书除列表控件的一字符串框个DeleteString 从框找找列表控件中书字符串~如果到~书书字符串被书中SelectString 书除列表控件中的所有字符串框ResetContent t4.4.7 书合控件框 切书到书书的书书界面~“工具框从箱”中控件到书书框框上~可以向书书上添加书合Combo Box框控件~如书所示。t4.55 书向书书中添加书合控件框框t4.55 书合可以书示一书字符串据。在书书的书书界面中书中一书合控件~可以在性口中书框数框个框属窗 置的性。其中它属属重要的性及其书明如表所示。t4.13 表列表控件的框属重要性t4.13 属性书明 将框写书合中的所有文本书书书小Lowercase 书添加到书合的字符串书行框自书排序Sort Type书合的书型~包括书书;框Simple,、下拉;Dropdown,和下拉列表;Drop List, 将框写书合中的所有文本书书书大Uppercase 101 附书1 使用Visual Studio 2005书始Visual C++书用程序 书书提供了书管理书合控件。在书书的书书界面中右书一书合控件~来框框个框MFCCComboBox 在快捷菜书中书书“添加书量”~打书“添加成书书量向书”书书~如书框所示。t4.56 书书书合添加书量框4.56 默书情下~书量的书书书况~书量书型书。书入书量名~建书以书书。如ControlCComboBoxm_果不书控件的性书行书书~只是书置和书属将取控件的书~也可以书书书书书~此书书量书型可以书书书Value 或其他书书据书型。配置完成后~书书“完成”按书。数CString 书的常用函如表数所示。CComboBoxt4.14 表书的常用函数t4.14CComboBox 函 数书 明 Create书建一个CComboBox控件 书取书合中字符串的量框数GetCount GetCurSel书取书书的字符串的索引~从0书始 书定书合的一书目框个SetCurSel 向书合控件中添加一字符串框个AddString 在指定的索引书入一字符串插个InsertString 书除书合控件的一字符串框个DeleteString 从框找找书合控件中书字符串~如果到~书书字符串被书中SelectString 书除书合控件中的所有字符串框ResetContent 书取书合中书书的字符串框GetLBText t4.4.8 IP地址框控件 切书到书书的书书界面~“工具框从箱”中控件到书书框框上~可以向书书上添IP Address Control加地址框~如书所示。IPt4.57 102 Windows书书程网书典书用程教 书向书书中添加框地址框t4.57 IP 地址框中包含个数小点~用书在书入地址书只需要书入个数即二书制整可。书书IP4IP4MFC 提供了书管理来地址框控件。书的常用函如表数所示。CIPAddressCtrlIPCIPAddressCtrlt4.15 表书的常用函数t4.15CIPAddressCtrl 函 数书 明ClearAddress清除IP地址控件的容内 GetAddress书取IP地址控件中4个内字段的容 IsBlank确定IP地址控件中所有字段的书是否书空SetAddress书置IP地址控件中4个内字段的容 SetFieldFocus将IP地址控件中指定字段书置书焦点 SetFieldRange书置IP地址控件中指定字段的范书 t4.4.9 常用控件书用示例 前面介书了中一些常用控件的基本性和使用方法~本书通书一书书的使用属个来演示如MFC 何使用书些常用控件书书书书界面~书书具的功能。框并体 【例】书书一个书书~用于书入书框算机的基本信息~其中包含上面介书的一些常t4.18MFC 用控件~如书所示。t4.58 103 附书1 使用Visual Studio 2005书始Visual C++书用程序 书例的行界面运t4.58 4.18 书书中使用的控件及其书书的书量情如表框况所示。4.16 表例的书书中使用的控件及其书书的书量框t4.164.18 书量书型书量名称书 明控件ID 用于书入书书名的文本书书称框IDC_EDIT_DEVNAMECStringm_DevName IDC_IPADDRESS1CIPAddressCtrlm_DevIP用于书入IP地址的IP地址框控件 用于书书部书的书合控件框IDC_COMBO_DEVTYPCComboBoxm_DeptE 用于书书书书是否注的书书册框IDC_CHECK1boolm_Register 用于书书书书书型的书书按书控件~其将IDC_RADIO1CButtonm_DevTypeGroup属性书置书True。另外3个书书按书控件的Group属性书置书False~且并不再书书添加书量它 用于书示用书添加书书信息的列表控框IDC_LIST1CListBoxm_DevList件书书书添加一书~书名书框个。下面介书书中如何书书CMfcNormalControlDlgCMfcNormalControlDlg 本书例的基本功能。 1,初始化书书框 在书书书书书~书行启框函~用于书置数各控件的初始书~代书如下,OnInitDialog() BOOL CMfcNormalControlDlg::OnInitDialog(){ CDialog::OnInitDialog(); …… // 书书书书书型书“书算机” m_DevType.SetCheck(1); // 添加可供书书的部书 m_Dept.InsertString(0, "人事部"); m_Dept.InsertString(1, "书书部"); m_Dept.InsertString(2, "书部售"); // 默书书书人事部 m_Dept.SetCurSel(0); return TRUE; // 除非焦点将书置到控件~否书返回TRUE} 104 Windows书书程网书典书用程教 程序中书置了书书书型和所部书的初始属参化~书照注书理解。2,添加书书 当用书书书“添加”按书书~书行函~代书如下,数OnBnClickedButtonAdd() void CMfcNormalControlDlg::OnBnClickedButtonAdd() { // 书书据有效性数 UpdateData(TRUE); if(m_DevName == "") { AfxMessageBox("书书入部书名。称"); return; } // IP地址 CString DevIP; m_DevIP.GetWindowTextA(DevIP);// 书取CIPAddressCtrl控件的书 if(DevIP == "0.0.0.0"){ AfxMessageBox("书书入IP地址。"); return; } // 是否登书 CString IsRegister = "否"; if(m_Register) IsRegister = "是"; // 部书 CString DeptName; m_Dept.GetWindowTextA(DeptName);// 书取书合控件的书框// 书书书型 int iType = m_DevType.GetCheck();// 书取书书按书控件的书 CString DevType; switch(iType) { case 1: DevType = "书算机"; break; case 2: DevType = "服书器"; break; case 3: DevType = "网书书书"; break; case 4: DevType = "其他"; break; } char s[1000]; sprintf(s, "部书名称: %s; IP地址: %s; 所部书属: %s; 是否登书: %s; 书书书型: %s", m_DevName.GetBuffer(), DevIP.GetBuffer(), DeptName.GetBuffer(), IsRegister.GetBuffer(), DevType.GetBuffer()); // 添加到列表中框 m_DevList.InsertString(0, s);UpdateData(FALSE); } 105 附书1 使用Visual Studio 2005书始Visual C++书用程序 程序的行书程如下,运 , 书行函~书书书中的控件书数将框更新到书书的书量中。UpdateData(TRUE) , 将体况参各控件的书书书到指定的书量中~注意书取不同控件书的方法不同~具情书书照注书理解。, 将属数书书的各书性书合成字符书~然后书用函其添加到列表数将框sm_DevList.InsertString() 控件中。 本例中使用AfxMessageBox()函书出书书。要在中数框参数直接使用字符串提示常量;例如本例中的"书书入部书名。称",~就必书书目的字符集书置书“将未书置”。 默书的字符集书“使用Unicode字符集”。在菜书中书书“书目”/“属性”~打书书目 属框属性书书。书书“配置性”/“常书”~可以在“字符集”书合中书书字符集~如书框 4.59所示。 书书置书目的字符集书“未书置”t4.59 t4.5 高书控件 本书介书将书书书控件、列表控件和书像列表控件。在很Tree ControlList ControlCImageList 多书用程序中~都使用控件以书状构数形式书示具有书次书的据~使用控件Tree ControlList Control 以表格形式书示书书~使用控件书前面控件提两个供书示的书书。CImageList t4.5.1 书书书控件 切书到书书的书书界面~“工具框从箱”中控件到书书框框上~可以向书书上添加书书Tree Control 书控件~如书所示。t4.60 106 Windows书书程网书典书用程教 书向书书中添加书框形控件t 4.60 书书书控件常用书示具有一定书次书的据书~来构数比如书源管理器的磁书目书书。书书书构Windows控件中的每书个数称数个个点都具有据书名和用于书书书据书的书书~每一书点下面又可以包含若干子书。 在书书的书书界面中书中一书框个属窗它属属形控件~可以在性口中书置的性。书书书控件的重要性及其书 明如表所示。t 4.17 表书书书控件的重要性属t 4.17 属性书明 指定书是书示书定的容~使控件有内即没焦点Always Show Selection 指定书书书中每书目用书书个启框Check Box 指定可以在书书书控件中书书书文本Edit Labels 指定在书书书控件中用整行书书启Full Row Select Has Buttons在父书旁书书示加;号+,和;减号-,按书 父书点和子书点使用书书书示整的书次书来体构Has Lines Info Tip通书书送TVN_GETINFOTIP通知书得工具的提示信息 使用书把条与各书目书书书控件根根部相书Lines At Root 展书书定书并叠折取消书定的书Single Expand 启用控件的工具提示ToolTips 书书提供了书管理书书书控件。在书书的书书界面中右书一书书书控件~在快来框个捷MFCCTreeCtrl 菜书中书书“添加书量”~打书“添加成书书量向书”书书~如书框所示。t 4.61 默书情下~书量的书书书况~书量书型书。书入书量名~建书以书书。配置ControlCTreeCtrlm_ 完成后~书书“完成”按书。 107 附书1 使用Visual Studio 2005书始Visual C++书用程序 书书书书书控件添加书量t4.61 书的常用函如表数所示。CTreeCtrlt 4.18表书的常用函数t4.18CTreeCtrl 函 数书 明 Create书建一个CTreeCtrl控件 书取书书书控件的书目是否书示书书书书框状GetCheck 得到指定书目的子书目GetChildItem 书取书书书控件的书书目数GetCount GetItemData书取与指定书目相书书的32位据数 书取与指定书目相书书的书书GetItemImage 书取书目的书书文本GetItemText 根据书参数与取指定书目相书书的书~比如根书目、子书目或者兄弟书目等GetNextItem 书取指定书目的下一个兄弟书目GetNextSiblingItem 书取指定书目的前一个兄弟书目GetPrevSiblingItem 书取指定书目的父书目GEtParentItem 书取书书书控件的根书目GetRootItem 书取用书书定的书目GetSelectedItem 书置书书书控件的书目是否书示书书书书框状SetCheck SetItemData书置指定书目相书书的与32位据数 书置书目的书书文本SetItemText 书除控件中的所有书目DeleteAllItems 书除书书书控件中的指定书目DeleteItem 根据参数展书或书藏指定书目的子书目Expand 向书书书控件中入一新书目插个InsertItem 书书书书书控件中的一书目个SelectItem 书指定父书目的所有子书目书行排序SortChildren 108 Windows书书程网书典书用程教 t4.5.2 列表控件 切书到书书的书书界面~“工具框从箱”中控件到书书框框上~可以向书书上添加列表List Control控件~如书所示。t4.62 书向书书中添加书框形控件t4.62 列表控件可以看作是功能增强的~可以提它供书书书书;,、小书书书书;ListBoxIconSmall ,、列表书书;,和书表书书;,等书书示书格。IconListReport4 列表控件的重要性及其书明如表属所示。t4.19 表列表控件的重要性属t4.19 属性书明 指定书是书示书定的容~使控件有内即没焦点Always Show Selection 指定可以在书书书控件中书书书文本Edit Labels 指定书表书书中不书示列书书No Column Header 指定书表模式中书书列书书不书行排序操作No Sort Header 每次只允书书书一书Single Selection Sort指定排序书书~包括无;None,、升序;Ascending,和降序;Descending, View指定列表控件的书示书格~包括书书;Icon,、小书书;Small Icon,、列表;List,和书表;Report, 书书提供了书管理列表控件。在书书的书书界面中右书一列表控件~在快来框个捷MFCCListCtrl 菜书中书书“添加书量”~打书“添加成书书量向书”书书~如书框所示。t4.63 109 附书1 使用Visual Studio 2005书始Visual C++书用程序 书书列表控件添加书量t4.63 默书情下~书量的书书书况~书量书型书。书入书量名~建书以书书。配置完ControlCListCtrlm_ 成后~书书“完成”按书。 书的常用函如表数所示。CListCtrlt4.20 表书的常用函数t4.20CListCtrl 函 数书 明 Create书建一个CListCtrl控件 书取控件书的书框色GetOutlineColor 书置控件书的书框色SetOutlineColor 书取控件中前书书列的当索引GetSelectedColumn 书置提示文本SetTinfoTip 书置控件的书书列SetSelectedColumn 书取控件中列的性属GetColumn 书取控件中列的书度GetColumnWidth 书取控件的书展属性GetExtendedStyle 书取控件中书目的量数GetItemCount 书取与指定书目相书书的书GetItemData 书取指定书目的书示文本GetItemText 书取书书书目的量数GetSelectedCount 书取提示文本GetToolTips 书置列书度SetColumnWidth 书置控件的书展属性SetExtendedStyle 书置控件中前书目的文本当SetItemText 书除控件中所有的书目DeleteAllItems 书除指定的列DeleteColumn 书除指定的书目DeleteItem 在控件中书指定的书目找FindItem 在控件中入新列插InsertColumn 在控件中入新的书目插InsertItem 110 Windows书书程网书典书用程教 t4.5.3 CImageList书 书用于保存一书大小相同的书书或位书~其主要用途是书其他控件提供书形列表。可CImageList 以通书索引书书书书或位书~索引书从书始。书提供了一些成书函~用于管理书数像列表。0CImageList常用的成书函如表数所示。4.21 表书的常用函数t4.21CListCtrl 函 数书 明Create书建一个CImageList控件 书取书像的量数GetImageCount 书取书像的信息GetImageInfo 添加书像到书像列表控件Add 从书像列表中书除书像Remove 替书书像列表中指定的书像Replace 书于书书书书控件和列表控件相书合的使用方法在本书后面的书例中介书。与将CImageList t4.6 在书书中使用菜书框 菜书是书用程序的常用书件~在书用程序中使用菜书可以使用书操作更加方便。本书将Windows 介书书书和使用菜书的方法。 4.6.1 书建和书书菜书 打书书源管理器~右书书书“书目名;例如~如果书目名书~书右书书书<>.rc”MfcApp 书,~在书出菜书中书书“添加书源”~打书“添加书源”书书~如书框所示。MfcApp.rct4.64 书添加菜书t4.64 在书源书型列表中书书~然后书书“新建”按书~打书菜书书书器。用书可以直接在菜书书书器中Menu 按书次书入菜书书~然后在性口中书置菜书书的性。例如~在一书菜书中添加“系书”和“属窗属帮助”菜 书书~在“系书”菜书下面添加“书出书书”、菜书分框隔符和“退出”菜书书~如书所示。4.65 111 附书1 使用Visual Studio 2005书始Visual C++书用程序 在此书可以添加新菜书书 书菜书书书器t4.65 在菜书书书器中的空白书可以添加新的菜书书。书入“减号可以添加一菜书分个隔符。-”假定在菜书书书器中书入如表所示的菜书书。t4.22 表书例菜书书t4.22 菜书书文本菜书书ID 书出书书框ID_MESSAGEBOX ;无,;分隔符, 退出ID_EXIT 书中一菜书书~可以在性口中书置的性。个属窗它属属常用的菜书书性如表所示。4.23表菜书书的性属t4.23 菜书书性属书 明 菜书书的文本Caption 指定菜书书旁书是否有一书中书书个Checked 指定是否可以书书菜书书Enabled 指定菜书文本书将并灰~且菜书书书非活书Grayed 指定菜书书或菜书书源的书书符ID 指定菜书书可包含菜书书和子菜书书Popup Prompt在MFC书用程序中~指定书定菜书书书出书在书书中的文本状 指定菜书书是其他两个菜书书之书的分隔书Separator t4.6.2 在书书中添加菜书框 打书书书书书界面~在性口的框属窗书书中可以书书书书中使用的菜书~如书框所示。运Menut4.66 行书目~打书书书~如书框所示。t4.67 112 Windows书书程网书典书用程教 书在书书中添加菜书 书框菜书出书在书书中框t4.66 t4.67 t4.6.3 菜书书的消息书理函数 菜书书包含下面两个重要的消息, , ~用书书书菜书书书书当触消息~添加书菜书书的消息书理函就可以书理数COMMANDCOMMAND 书书书操作。个 , ~用于更新菜书书的书~状比如允书或禁止使用书菜书书、修改菜书书书UPDATE_COMMAND_UI 书、书置菜书书书书后的书等。程序状会自书书用菜书书的消息书理UPDATE_COMMAND_UI 函~书书数状更新菜书书的书。 在菜书书书器中右书书书一菜书书~在书出菜书中书书“添加个事件书理程序”~打书“事件书理程序向 书”口~如书窗所示。t4.68 书事件书理程序向书”口窗t4.68 “ 113 附书1 使用Visual Studio 2005书始Visual C++书用程序 在消息书型列表中书书框~在书列表中书书~然后书书“添加书书”按COMMANDCMfcAppDlg书~就可以成功地添加书书菜书书的消息书理函。系书数会根据菜书书的自书生成函书理程序名~数称ID例如菜书书的默书函书理程序名书数。书里书书菜书书的代书如下,ID_MESSAGEBOXOnMessageBox void CMfcAppDlg::OnMessagebox() { AfxMessageBox(_T("Hello!")); } 在行书目书~如果用书书书“书出书书”菜书书~书出一书示“运框将个的书书。框Hello” 书菜书书添加函书理程序数~代书如下,ID_EXITOnExit() void CMfcAppDlg::OnExit() { OnOK(); } 4.7 多书程书程 每行的个运书目都书书一书程。书程是书个运个算机中正在行的程序书例~每书程至少Visual C++ 包含一书程~个它从函书始书行~数直到书行书句返回~主书程书束~书书程也被存从内main()return 中书。主书程在行书程中书可以书建新的书程~书书多书程的功能。多书程可以提卸运并高书用程序的书书理能力~因此在稍微书书一些的书用程序中大多都使用到多书程。会 t4.7.1 书建书程 每书程个个数从个运数必书书有一书入点函~书程书书入点书始行。主书程的书入点函书是~main如果想在书程中书建一书个个数称个助书程~也必书书书书助书程指定一书入点函~我书书函书书程函书。书数数程函的明数声格式如下, DWORD WINAPI ThreadProc (LPVOID pParam) { // 函数体 } 可以书用函书建新书程~函数数原型如下,CreateThread() HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, DWORD* lpThreadId ); 114 Windows书书程网书典书用程教 参数书明如下, , ~指向书的指书~用于定构体决lpThreadAttributesLPSECURITY_ATTRIBUTES 函返回的句数参数柄是否可以被子书程书承。如果书书~书返回的CreateThread()NULL 句柄不能被书承。 , ~指定书程堆书的初始大小~书位书字书。dwStackSize , ~指定书程函的起始地数址。lpStartAddress , ~指定书书书书程函的。数参数lpParameter , ~指定书建书程后是否立即启书。如果指定书~书书程dwCreationFlagsCREATE_SUSPENDED 书建后书于起书~如果书书书指定书挂状将参数~书书程书建后立即运行。0 , ~用于取得核书新生成的书程分配的书程内号。lpThreadIdID 书建新书程后~CreateThread()函数即数立返回~书书书行下面的代书。而书程函提示也书始书行~因此可以书~主书程和书助书程是同书行的。运 书程函书行完成后~可以书用数函书书书程句数数柄~函原型如下,CloseHandle()BOOL CloseHandle( HANDLE hObject ); 参数指定要书书的句柄。hObject 【例】在主函中书数启个个数书程~每书程中打印在主函中指定的之书的一t4.19101~10 个数字。 书程函的名书数称~代书如下,ThreadProc() // 书程函数 DWORD WINAPI ThreadProc(LPVOID lpParam){ int i = (int)lpParam;// 书取书程函的数参数 printf(" I am from a thread, num = %d \n", i);// 打印参数 return 0; } 程序首先书取参数数将数来中书书的字~然后再字打印出。 主函的代书如下,数 115 附书1 使用Visual Studio 2005书始Visual C++书用程序 int _tmain(int argc, _TCHAR* argv[]) { // 10次书建书程~书行ThreadProc()函数 for(int i=1; i<=10; i++) { HANDLE hThread;// 书程句柄 DWORD dwThreadId;// 书程ID // 书建书程 CreateThread(NULL,// 指定书程句柄不可书承 NULL,// 采用默书的书程堆书大小 ThreadProc,// 指定书程函数 (LPVOID)i,// 指定书程函使用的数参数 // 即在ThreadProc()函中指定书量数i的书 0,// 指定书程立即运行 &dwThreadId);// 返回书程的ID号 } // 书停程序~按任意书退出 system("pause"); return 0; } 程序在循书中次书用函~每次向书程中书书数参数循书控制书量~for10CreateThread()i 用于在书程函数中打印。ThreadProc 程序的行书果如书运所示。t4.69 书事件书理程序向书”口窗t4.69 “ 可以看到~口中打窗印了个尽书程的书出书果。管在书建书程书按照的书序书书书书来参数101~10 但在书程中书出的书序却被打了。书书明书程乱几并个另乎是同书被书行的~不是书行完一书程然后再书建 外一书程。书书多次书行程序~可以看到每次书出的书序都是不同的。个 4.7.2 书程核书内象 书程核书内个状数构象就是一包含了书书程书信息的据书。每次成功书用函后数~CreateThread() 都会内个内数靠内促使系书在部书新书程分配一核书象。系书提供的管理书程的函其书就是依书书书程核书 象来内构书书的。书程核书象的书如书所示。t4.70 116 Windows书书程网书典书用程教 书书程核书内象t4.70 书建书程核书内会象的书候~系书书其成书书行初始化。书中每一书括里面的书就是书成书的初号4.70 始书。 1,CONTEXT书构 每书程都有个它自己的一书寄存器~书书程称个上下文。书书寄存器保存在一书CPUCONTEXT构它运里~反映了书书程上次行书寄存器的书。状CPU 2,Usage Count成书 成书书书了书程核书内数个数内数内象的使用书~书书书明了此核书象被打书的次。书程书Usage Count 核书象的存在是和的书密切相书的~书书书是当个的书候~系书就书书已书有任何书程在没Usage Count0 引用此核书内内从内象了~于是书程核书象就要被存中撤书。 当内书建新书程书~其核书象的初始书书。只要书程有书束行~没运Usage Count2Usage Count 的书就至少书。在书建一新的书程的书个候~函返回了书程核书数内当象的句柄~就相1CreateThread于打书了一次新书建的核书内会象~书也促使的书加。所以书建一新的书程后~初始个Usage Count1 状书下的书是。只要有书程打书此核书内会象~就使其的书加。Usage Count2Usage Count1 可以书用函打书书程核书数内象~的书再次加会~函用法如数OpenThread()Usage Count1下, HANDLE OpenThread( DWORD dwDesiredAccess, // 想要的书书书限~可以书THREAD_ALL_ACCESS等 BOOL bInheritHandle,// 指定此函返回的句数柄是否可以被子书程书承 DWORD dwThreadId // 目书书程ID号 ); 在书束书程书~需要书用函书书书程~而使数从会的书减。CloseHandle()Usage Count1 书有一些函书书返回核书数内并会当会响象的书句柄~不书建新的句柄~然也就不影Usage 的书。如果以书句柄书书用参数函~数那书就会数并忽略书函的书用CountCloseHandle()CloseHandle()返回。返回书句柄的函如下,数FALSE , ~用于返回前书程句当柄。HANDLE GetCurrentProcess() , ~用于返回前书程句当柄。HANDLE GetCurrentThread() 117 附书1 使用Visual Studio 2005书始Visual C++书用程序 在例中~书用当函后~系书书建一新书程~返回其句数会个并将柄~书书程4.19CreateThread 内核书象的书初始化书。书程函一数会旦返回~书程的生命周期也就到此书止了~系书Usage Count2 使的书由减书。接下再书用来函就使数会减。此书Usage Count21CloseHandleUsage Count1系书书书到的书已书书~就会内它内撤书此核书象~书放占用的存。如果不书书句柄的书~Usage Count0 的书将会永书不是~系书将会它内会内当永书不撤书占用的存~书就造成存泄漏。然~Usage Count0 书程所在的书程书束后~书书程占用的所有书源都要被书放。 3,Suspend Count成书 书程核书内象中的成书用于指明书程的书停书。书用数当或Suspend CountCreateProcess() 函书~书程的核书数内数象就被书建了~其书停书被初始化书。书可以阻止新书建的书CreateThread()1程被书度到中~因书书程的初始化需要书书~书程初始当化书束后~或CPUCreateProcess() 函书书是数否书书了书志。如果书书了书书个数志~那书书些函就CreateThread()CREATE_SUSPENDED 返回~同书新书程书于书停状尚数将数减书。如果未书书书书志~那书书函书程的书停书书书书。书程的书当数停书0是的书候~书书程就书于可书度书。状0 在书建书程书指定书志可以使用书在书行书程之前有机改会运书书程的行CREATE_SUSPENDED 书境;如后面书书的书先书等,。需要行书程书~再书用运函其书置书可书度书~函数将状数ResumeThread()原型如下, DWORD ResumeThread (HANDLE hThread); // 书醒一起的书程个挂 函数减数当数减少书程的书停书~书书书书到的书候~书程被恢书行。如果书用运ResumeThread()0 成功~函返回书程的前一书数个数停书书~否书返回。0xFFFFFFFF 书书程可以被书个个停若干次。如果一书程被书停了次~它必书被书醒次才可以被分配书一33个。可以书用函书数个运数停一书程的行~函原型如下,CPUSuspendThread() DWORD SuspendThread (HANDLE hThread);// 挂个起一书程 任何书程都可以书用书函书数来另个运停一书程的行。和函相数反~ResumeThread() 函增加书程的书数会数停书。SuspendThread() 每隔~系书书看前存在的所有书程核书会当内个没象~然后书书一可书度;有书于20msWindows 书停状内将书,核书象~其;上下文,入装的寄存器~书一书程书称上下文书书。CONTEXTCPU 4,Exit Code成书 成书指定了书程的退出代书~也可以书是书程函的返回书。在书程行数运期书~书程函Exit Code 数没书书有返回~的书是。书程行书束后~系书运将自书书书书程Exit CodeSTILL_ACTIVEExit Code函的返回书。可以书用数函得到指定书程的数退出代书~例如,GetExitCodeThread() DWORD dwExitCode; if(::GetExitCodeThread(hThread, &dwExitCode)) { if(dwExitCode == STILL_ACTIVE) { // 目书书程书在行运 } 118 Windows书书程网书典书用程教 else { // 目书书程已书中止~退出代书书dwExitCode } } 5,Sigaled成书 成书指示了书程书象是否书成“受信”书。一书程在行状个运期书~的书永书是SigaledSigaled ~“即当未受信”~只有书程书束以后~系书才把的书置书。此书~书书此书象的FALSESigaledTRUE 等待函就返回。书于书程书数会数将象的等待函在小书中介书。4.7.5t4.7.3 书止书程 书程书程函的从数数当会第一行代书书始书行~直到书程函书束书书止。书程被正常书止书~系书书行下 面的操作, , 在书程函中书建的所有数书象将它构数确通书书各自的析函被正地书毁。C++ , 书书程使用的堆书被书将放。 , 系书书程核书将内象中;退出代书,的书由书置书书程函的返回书。数Exit CodeSTILL_ACTIVE , 系书书书程书核书将减内象中的书。Usage Code书程书束后的退出代书可以被其他书程用函书书到。数GetExitCodeThread() 书止一书程的书行有个书方法。4 1,书程函的数自然退出 当数函书行到书句返回书~将个书止书程的书行。一般建书使用书书方法书止一书程returnWindows 的书行。 2,使用ExitThread()函书数来止书程 的函数原型如下,ExitThread() void ExitThread( DWORD dwExitCode // 书程的退出代书 ); 函中数会当运止前书程的行~促使系书书放所有被此书程使用的书源。ExitThread() 3,使用TerminateThread()函数 函可以用在一书程中数来个另个数强制书止一书程的书行~函原型如下,TerminateThread() BOOL TerminateThread( HANDLE hThread,// 目书书程句柄 DWORD dwExitCode // 目书书程的退出代书 ); 119 附书1 使用Visual Studio 2005书始Visual C++书用程序 通常不建书使用书书方法书止书程~因书一旦书行函~程序数会无法书书目书书程TerminateThread()在何书被书止~其书果就是目书书程可能根本有没会来清内机做除工作~比如书程中打书的文件和申书的存可能不被书会另放。外~使用函书数会止书程的书候~系书不书放书程使用的堆书。TerminateThread() 因此~建书在书程的书候尽个量书书程自己退出~如果主书程要求某书程书束~可以通书各书方法通知书程~书程收到通知后自行退出。只有在迫不得已的情下~况才能使用函数去TerminateThread()书止一书程。个 4,使用ExitProcess()函书束书程数 此书系书会运当个自书书束书程中所有书程的行。用书书方法相于书每书程使用函TerminateThread()数当况~因此也书避免书书情。 t4.7.4 书程的书先书 每书程都有一书先书~个个号取书书;最低,;最高,。系书定书程需要分配当确哪个0~31 书~先书书书先书书它的书程~然后以循书的方式书书书行书度。如果有一书先书书它个的书程可书CPU3131度~就被分配到一它会个上运另个行。在书书程的书书片书束书~系书书看是否书有一书先书书的书CPU31程~如果有~就安排书书程到个上运行。CPU 书度书程的原书就是书书的~只要书先书书的书程是可书度的~就书书不书先书书会将Windows31 的书程分配书。但并会运内不是书低书先书的书程永书得不到机行~事书上在任何一段书书~系0~30CPU 书中的书程大多是不可书度的~书于书即状停书。 支持个书先书书,、、、、和Windows6idlebelow normalnormalabove normalhighreal- 。书名思书~是被书大多书用程序数它采用的书先书书。书程书被书建书~的相书书先书被书置书timenormal 。可以书用函书置书程的书先书~函数来数原型如下,normalSetThreadPriority() BOOL SetThreadPriority(HANDLE hThread, int nPriority ); 参数指定目书书程的句柄。参数定书了书程的书先书~可以它取书有hThreadnPriority 前书的某个体书~具如表所示。THREAD_PRIORITY_t4.24 表书的常用函数t4.24CListCtrl 书程书先书常量书 明 THREAD_PRIORITY_TIME_CRITICALTime-critical;书书, THREAD_PRIORITY_HIGHESTHighest;最高, THREAD_PRIORITY_ABOVE_NORMALAbove normal;高于正常, THREAD_PRIORITY_NORMALNormal;正常, THREAD_PRIORITY_BELOW_NORMALBelow normal;低于正常, THREAD_PRIORITY_LOWESTLowest;最低, THREAD_PRIORITY_IDLEIdle;空书, t4.7.5 书程同步 在多书程程序书书中~书程同步是一个个内重要的书书。同步可以保书在一书书只有一书程书个个某书共享书源书有控制书。共享书源包括全局书量、公共数区内内据成书或者句柄等。书界核书象和事件核书象可以好的用于多书程同步和书很它将来之书的通信。本书书合书书的例子书书书生同步书书的根本原因~书 120 Windows书书程网书典书用程教 而提出相书的解方案。决 1,书界书区象 当个个个内多书程在同一书程中书行书~可能有不止一书程同书书行同一段代书~书书同一段存中的 数当个写数据。多书程同书书和共享据书~书可能出书书书。 【例】下面演示一有书书的程序~书程序用书程同书增加全个两个来局书量和t4.20g_nCount1 的书~代书如下,数g_nCount2 #include #include int g_nCount1 = 0; int g_nCount2 = 0; BOOL g_bContinue = TRUE; UINT __stdcall ThreadFunc(LPVOID);int main(int argc, char* argv[]) { UINT uId; HANDLE h[2]; h[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &uId); h[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &uId); // 等待1秒后通知书书书程书束~书书句两个数柄 Sleep(1000); g_bContinue = FALSE; ::WaitForMultipleObjects(2, h, TRUE, INFINITE); ::CloseHandle(h[0]); ::CloseHandle(h[1]); printf("g_nCount1 = %d \n", g_nCount1); printf("g_nCount2 = %d \n", g_nCount2); return 0; } UINT __stdcall ThreadFunc(LPVOID) { while(g_bContinue) { g_nCount1++; g_nCount2++; } return 0; } 书程函数同书增加和的书~行书果如书数运所示。ThreadFuncg_nCount1g_nCount2t4.71 121 附书1 使用Visual Studio 2005书始Visual C++书用程序 书多书程同书书书共享书源书出书t4.71 按道理书最书在主书程书出的书的书是书书相同的~可是书果不如人意。来它并尽 和的书不相同。出书书书书果主要是因书同书书书并和g_nCount1g_nCount2g_nCount1 的书程具有相同的书先书。书行书程中出书了下面的情,两个况g_nCount2 , 第一书程个取走的书准书书行自加操作的书候~的书书它片恰好用完~系书切书到第二g_nCount1 个书程去书书行自加操作。g_nCount1 , 一书书个个它会将并片书后~第一书程再次被书度~此书上次取出的书自加~放入所g_nCount1 在的存里。书就内会个覆盖到第二书程书的自加操作。g_nCount1 , 书量也存在相同的书书。由于书书的事情的书生次是不可书知的~所以最书书的书数它g_nCount2 果就不一书了。 例中~和是全局书量~于书书程所有书程属共有的书源。多书程同步4.20g_nCount1g_nCount2 就要保书在一书程占有个会个决公共书源的书候~其他书程不再次占有书书源。所以~解同步书书~就是保书整存个独个个取书程的占性~在一书程书某书象书行操作的书程中~需要有某书机制阻止其他书程的操作。使用书界书区象书书书一功能。 书界书区数个象是定书在据段中的一书~构内个构部使用书书书CRITICAL_SECTIONWindows书书一些信息~保在同一书书只有一书程书书书据确个数数段中的据。 在书程序书~要把书界书写区数区象定书在想保书的据段中~然后在任何书程使用此书界书象之前都要书用函书其书行初始数数化~函原型如下,InitializeCriticalSection() void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection // 指向据数段中定书的CRITICAL_SECTION书构 ); 当区数书程书书书界中的据书~必书首先书用函~数区申书书入书界。在同一书EnterCriticalSection()书~内只允书一书程书入书界~所以在个区另个区申书的书候~如果有一书程在书界的书~Windows 函一数会离区直等待下去~直到其他书程书书界才返回。EnterCriticalSection()EnterCriticalSection() 函的函数数原型如下, void EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 当将区操作完成的书候~书要书界交书书~以便其他书程可以申书使用~书工作由个Windows 122 Windows书书程网书典书用程教 函完成,数来LeaveCriticalSection void LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection); 当区程序不再使用书界的书候~必书使用函书除~函数将它数原型如下,DeleteCriticalSection void DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection); 【例】使用书界书区来写象改例中存在同步书书的书程序~代书如下,数t4.214.20 #include //02CriticalSection工程下#include BOOL g_bContinue = TRUE; int g_nCount1 = 0; int g_nCount2 = 0; CRITICAL_SECTION g_cs; // 书存在同步书书的代书段使用书界书区象UINT __stdcall ThreadFunc(LPVOID);int main(int argc, char* argv[]){ UINT uId; HANDLE h[2]; // 初始化书界书区象 ::InitializeCriticalSection(&g_cs); h[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &uId); h[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &uId); // 等待1秒后通知书书书程书束~书书句两个数柄 Sleep(1000); g_bContinue = FALSE; ::WaitForMultipleObjects(2, h, TRUE, INFINITE); ::CloseHandle(h[0]); ::CloseHandle(h[1]); // 书除书界书区象 ::DeleteCriticalSection(&g_cs); printf("g_nCount1 = %d \n", g_nCount1); printf("g_nCount2 = %d \n", g_nCount2); return 0; } UINT __stdcall ThreadFunc(LPVOID){ while(g_bContinue) 123 附书1 使用Visual Studio 2005书始Visual C++书用程序 { ::EnterCriticalSection(&g_cs); g_nCount1++; g_nCount2++; ::LeaveCriticalSection(&g_cs); } return 0; } 运行书果如书所示。因书使用了书界书区会个象~所以不出书多书程同书书书共享书量t7.72 和的情~书的最书书果是相同的。况它g_nCount1g_nCount2 书使用书界书区象书书多书程同步的书果t7.72 2,事件核书内象 使用多书程书程就要涉及到书程书相互通信的书书。主书程在书建工作书程的书候~可以通书书工参数作书程书书初始化数当运来据~工作书程书始行后~书可以通书通信机制控制工作书程。同书~工作书程有书候也需要一些情主书通知主书程。可以使用将况内来事件核书象书书主书程和工作书程之书的通信。 事件书象是一书抽象的书象~也包括它未受信;,和受信;,书书书。两状nonsignaledsignaled可以把事件书象看成是一书置在个内部的书Windows 志~的书书置和书书工作由它状来完成。事件Windows 内核书象包含的成书如书所示。7.73 成书书书了前的使用书~当数当nUsageCount书t7.73 事件核书内象包含的成书使用书书数的书候~就书会内毁此核书象占0Windows 用的书源。如果想使用事件书象~需要首先用 函数它状去书建~初始书下~的书书。的函函如下,数数CreateEvent()nUsageCount1CreateEvent() HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,// 用定书来属事件书象的安全性 BOOL bManualReset, // 指定是否需要手书重置事件书象书未受信书。状 BOOL bInitialState, // 指定事件书象书建书的初始书状 LPCWSTR lpName);// 事件书象的名称 参数书书于核书内象中的成书。自书重置;,和人工重置bManualResetbManualResetauto-reset;,是事件核书内两当个象的书书型。一人工重置的事件书象受信以后~所有等待在书manual-reset 个会状当个事件上的书程都书书可书度书~但一自书重置的事件书象受信以后~书允书一等待个Windows在书事件上的书程书成可书度书。状 参数书书于成书。如果其书书将~书表示事件书象书建书的初始书书状bInitialStatebSignaledTRUE 受信;,~如果其书书将~书初始书书状未受信;,。bSignaled = TRUEFALSEbSignaled = FALSE 参数用指定来称事件书象的名。书事件书象命名是书了在其他地方;比如~其他书程lpName 124 Windows书书程网书典书用程教 的书程,使用或函书数内取此核书象的句柄。用于打书事OpenEvent()CreateEvent()OpenEvent() 件书象~函数原型如下, HANDLE OpenEvent ( DWORD dwDesiredAccess, // 指定想要的书书书限 BOOL bInheritHandle,// 指定返回句柄是否可被书承 LPCWSTR lpName); // 要打书的事件书象的名称 系书书建或打书一个内会当内事件核书象后~返回事件的句柄。不使用此核书象书~书书书用 函书数它放占用的书源。CloseHandle() 事件书象被建立后~程序可以通书和函书置数来状数事件书象的书~函原SetEventResetEvent 型如下, t BOOL SetEvent( HANDLE hEvent ); // 将状事件书书书 “受信;sigaled,”~BOOL ResetEvent(HANDLE hEvent ); // 将状事件书书书 “未受信;nonsigaled,”~ 参数个是事件书象的句柄~书句柄可以通书或函书得。数hEventCreateEventOpenEvent【例】演示事件书象的使用方法。在本例中~主书程通书将状事件书书书“受信”通知子书4.22 程书始工作~书是事件核书内个很象一重要的用途~示例代书如下, #include #include HANDLE g_hEvent; UINT __stdcall ChildFunc(LPVOID); int main(int argc, char* argv[]) { HANDLE hChildThread; UINT uId; // 书建一个自书重置的;auto-reset events,~未受信的;nonsignaled,事件核书内象 g_hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); hChildThread = (HANDLE)::_beginthreadex(NULL, 0, ChildFunc, NULL, 0, &uId); // 通知子书程书始工作 printf("Please input a char to tell the Child Thread to work: \n"); getchar(); ::SetEvent(g_hEvent); // 等待子书程完成工作~书放书源 ::WaitForSingleObject(hChildThread, INFINITE); printf("All the work has been finished. \n"); ::CloseHandle(hChildThread); ::CloseHandle(g_hEvent); system("pause"); return 0; } UINT __stdcall ChildFunc(LPVOID) { ::WaitForSingleObject(g_hEvent, INFINITE); printf(" Child thread is working...... \n"); ::Sleep(5*1000); // 书停5秒~模书真正的工作 125 附书1 使用Visual Studio 2005书始Visual C++书用程序 return 0; } 运个行程序~书入一字符通知子书程书始工作~书果如书所示。t7.74 书使用事件核书内象通信t7.74 书程一书始就书建了一个内并个自书重置的、未受信的事件核书象~用一全局书量保存g_hEvent书象的句柄~书书做使本书程的其会内他书程书书此核书象更加容易。然后书建子书程~书并hChildThread用函等待用书书入一字符。此书~主书程书于数个状阻塞书。getchar() 在子书程中~首先书用函等待全数局书量书书hChildThreadWaitForSingleObject()g_hEvent书受信书。在主书程中~用书书入字符后~程序书用状当函~数将书书书受信书~状从SetEvent()g_hEvent而书子书程。然后~主书程中书用启函等待子书程数书束后再书书WaitForSingleObject()hChildThread运行。 函用于等待指定的书数象;,~函数原型如下,WaitForSingleObject()hHandle ::WaitForSingleObject ( hThread,// hHandle 要等待的书象的句柄 INFINITE );// dwMilliseconds 要等待的书书;以毫秒书书位, 参数书出了要等待的书书~其书指定书表示要等待无限书的书书。当dwMillisecondsINFINITE 下列一书情书生书函就返回,况数 ,要等待的书象书成受信书。状1 ,参数指定的书书已书去。2dwMilliseconds 一可书行书个两状即象有书书~书未受信;,和受信;,。书程书象只有当nonsignaledsignaled书程行书束书运达状才到受信书~此书使用参数的函数会才返回。INFINITEWaitForSingleObject() 126 Windows书书程网书典书用程教 书 书一、书书书 , 控制台书用程序的主函数中包含表示命令行量的书参数数参数1Visual C++_tmain() ; ,。 ,,AargaBargb ,,CargcDargv ,下面是哪个中有效的注书符; ,。2Visual C++ ,,A//B-- ,,C**D\\ ,文本书书控件书书的控件书是; ,。框3 ,,ATextBoxBCEdit ,,CCTextDCTextBox ,书书书控件书书的控件书是; ,。4 ,,ACTreeBCTreeView ,,CCTreeCtrlDCTreeControl二、填空书 ,在书书书用程序的书候~可以书书书主要的书书器配置模式~两即 【】 和 【】 。1 1 2 , 【】 是书书中的基书。2 3 MFC ,在书中~用于书书书书中的文本框数范书的函书 【】 。3CEdit 4 , 【】 函可以数根据控件书取指定控件的句柄。4 5 ID ,列表控件书书的控件书书框 【】 。5 6 ,列表控件可以看作是功能增强的~可以提它供 【】 、 6List ControlListBox 7 【 】 、 【】 和 【】 等书书示书格。 8 9 10 4 ,用于更新菜书书书的系书状消息是 【】 。7 11 ,支持个书先书书, 【】 、 【】 、 【】 、 8Windows6 12 13 14 【 】 、 【】 和 【】 。 15 16 17 三、书答书 ,书述什书是断点。1 ,书述书程和书程之书的书系。2 ,书述书止一书程的书行有个书方法。34 四、操作书 ,书书书建一个控制台书用程序。1Win32 ,书书书建一基于书书的个框书用程序。在书目中添加一书书~在默书书书书中添加一个框框2MFC 个框按书~书书书按书书打书新建的书书。 ,照参书事本的菜书书书书菜书~在书书中添加书菜书。并框3Windows 127
本文档为【vs2005入门】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_562397
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:0
分类:
上传时间:2018-09-16
浏览量:12