VS2012入门指南12剖析_第1页
VS2012入门指南12剖析_第2页
VS2012入门指南12剖析_第3页
VS2012入门指南12剖析_第4页
VS2012入门指南12剖析_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual C+强大而灵活的 Visual C+ 语言和工具在 Visual Studio 允许在.NET framework上运行本机 Windows应用商店apps、本机桌面 apps和托管apps的开发。Visual C+包含以下元素:Visual Studio开发环境开发环境通过编写代码以支持整个开发工作流,从创建和管理的项目,调试,进行分析并部署到最终用户。可视化工具 C+compiler编译器支持本机代码以.NET公共语言运行时 (CLR)的开发和开发。Visual C+ 直接支持x86计算机的生成,并包括面向x64和ARM的编译器。它优化所有平台的性能。库C运行库(crt)包括

2、安全增强选择要了解所造成安全问题的函数。标准C+ 库包含(mfc)库和标准模板库(STL)。活动模板库(ATL)传递给COM组件和apps的创建。Microsoft 基础类 (MFC) 库选件对的桌面apps创建具有传统或Office样式的用户界面。并行模式库(PPL)对CPU执行的异步和并行算法。C+ AMP (C+加速的大量并行)对于大量在GPU执行的并行算法。Windows 运行时 C+ 模板库(WRL),为Windows应用商店apps和元素的 COM样式的开发。.NET framework选件类库(通过使用 C+/CLI) ,STL/CLR 和 C+ 支持库对托管apps的开发。此外

3、,在中,当使用Visual C+时也可以访问Windows应用商店 apps和桌面apps的windows API 。标头文件和.winmd文件这些 API的包含在 Visual Studio 中,在Windows软件开发包 (SDK)Windows8的。Visual Studio 2012 - Visual C+Win32桌面应用程序(Visual C+)可以创建 Win32 app ,如果要在从 Windows 95 的windows版本使用基于windows的用户界面,并且可以运行到 Windows 8的本机桌面应用程序时。可以使用 Visual Studio Express 2012

4、for WindowsDesktop或任何除 Visual Studio Express 2012 for Windows 8的 Visual Studio 版本。Win32 应用程序是使用消息循环处理windows 消息直接而不是使用一种机制 (如Microsoft 基础类(MFC),活动模板库(ATL)或.NET framework app的约定术语。虽然这个术语是“ Win32 ;它可以引用 32位或64位应用程序。 在C+ 的Win32 应用程序可以使用C运行时(crt)和标准模板库 (STL)选件类和函数,COM 对象和任何公共函数,公共称为windows API 。有关 Win32

5、 apps 介绍在 C+ 中,请参见了解到窗口的程序在C+。Win32 应用程序是一种创建窗口的本机桌面应用程序;另一种方法是MFC应用程序。MFC是企业类型的阿普斯特殊的默认值选择阿普斯具有许多用户界面控件或自定义用户控件。MFC用于序列化、文本处理、打印和当今用户界面元素提供方便的帮助器类选件例如功能区上。这些选件类对 Win32应用程序不可用。若要创建MFC 或 ATL 程序需要 Microsoft Visual Studio Professional 2012或更高版本。Visual Studio Express2012 for Windows Desktop不包括 MFC 或 ATL

6、 支持。创建标准C+程序在Visual Studio 集成开发环境 (IDE)可以使用 Visual C+ 创建标准 C+ 程序。 通过采用此演练中的 步骤,您可以创建一个项目, 向该项目添加一个新文件, 修改该文件以添加 C+ 代码,然后使用 Visual Studio 编译并运行程序。您可以键入自己的C+ 程序,或者使用示例程序之一。此演练中的示例程序是一个控制台应用程序。此应用程序使用标准模板库(STL)中的set容器。Visual C+ 使用2003 C+标准进行编译,但有以下几点主要例外之处:两阶段名称查找、异常规范和导出。此外,Visual C+支持若干 C+0x 功能,例如,la

7、mbda 、自动、static_assert 、rvalue 引用和 extern模板。R说明如果要求符合标准,请使用/Za 编译器选项来禁用对该标准的Microsoft 扩展。 有关更多信息,请参见/Za、/Ze (禁用语言扩展)。系统必备若要完成本演练,您必须了解C+ 语言的基础知识。创建项目并添加源文件1. 通过以下方式创建一个项目:指向文件”菜单上的 新建”,然后单击 项目”。2. 在“ Visual C+”项目类型窗格中,单击“ Win32 ,然后单击“ Win32 控制台应用程序”。3. 键入项目名称。默认情况下,包含项目的解决方案与项目同名,但您可以键入其他名称。您也可以为项目键

8、入其他位置。单击确定”创建项目。4. 在“ Win32应用程序向导”中,单击下一步”,选择空项目”,然后单击 完成”。5. 如果未显示 解决方案资源管理器”,请在视图”菜单上,单击 解决方案资源管理器 ”。6. 将一个新源文件添加到项目,如下所示。a. 在解决方案资源管理器”中,右击 源文件”文件夹,指向添加”,然后单击 新建项”。b. 在代码”节点中单击“ C+文件(.cpp) ”,为文件键入名称,然后单击添加”。该.cpp 文件即显示在解决方案资源管理器”中的 源文件”文件夹中,并且文件将在Visual Studio编辑器中打开。7.在编辑器内的文件中,键入使用标准C+ 库的有效 C+ 程

9、序,或者复制示例程序之一并将其粘贴在文件中。例如,您可以使用set:find (STL Samples)示例程序,该程序是帮助中附带的标准模板库示例之一。如果使用该示例程序,请注意using namespace std;指令。此指令使程序能够使用cout 和endl,而无需完全限定名(std:cout和std:endl)。8.保存该文件。9.在 生成”菜单上,单击生成解决方案”。输出”窗口显示有关编译过程的信息,例如,生成日志的位置,以及指示生成状态的消息。10.在 调试”菜单上,单击 开始执行(不调试)”。如果使用了示例程序,将显示一个命令窗口,其中显示是否在集合中找到了特定的整数。在命令行

10、上编译本机C+程序Visual C+包括一个C+ 编译器,可用来创建从基本Visual C+ 程序到Windows窗体应用程序和组件的各种程序。通过按此演练的过程进行操作,您可以通过使用文本编辑器创建基本的Visual C+程序,然后在命令行上对其进行编译。也可以编译使用 Visual Studio集成开发环境 (IDE) 创建的Visual C+程序。 有关更多信息,请参见Walkthrough: Compiling a C+ Program that Targets the CLR in Visual Studio。您可以使用自己的 Visual C+程序,而不是键入下面步骤中所示的程序。

11、也可以使用其他帮助主题中的任何Visual C+代码示例程序。若要完成本演练,您必须了解C+ 语言的基础知识。创建Visual C+源文件并在命令行上对其进行编译1. 打开“ Visual Studio 2010命令提示窗口,方法是单击开始”指向所有程序”“ MicrosoftVisual Studio 2010”、 “ Visual Studio 工具”,然后单击 “ Visual Studio 2010命令提示”。可能需要管理员凭据才能成功编译此演练中的代码,具体情况视计算机的操作系统和配置而定。若要以管理员身份运行 “Visual Studio 2010命令提示窗口,请右击 “Visua

12、l Studio 2010命令提示”然后单击以管理员身份运行”。2. 在命令提示符下,键入notepad basic.cpp,并按 Enter。在系统提示是否创建文件时,单击是”。3. 在记事本中,键入下列各行。复制代码#include int mai n()std:cout This is a n ative C+ program. std:e ndl; return 0;4. 在 文件”菜单上,单击 保存”这样就创建了一个Visual C+源文件。5. 关闭记事本。6. 在命令提示符下,键入cl /EHsc basic.cpp,并按Enter 。/EHsc命令行选项指示编译器启用C+ 异常

13、处理。有关更多信息,请参见 /EH (异常处理模型)。cl.exe 编译器将生成一个名为basic.exe的可执行程序。您可以在编译器显示的多行输出信息中看到可执行程序的名称。7. 若要查看目录中具有名称basic 以及任何文件扩展名的文件的列表,请键入dir basic.* 并按Enter 。.obj 文件是一个中间格式文件,可以安全地忽略它。8. 若要运行basic.exe 程序,请键入 basic 并按Enter 。该程序显示以下文本并退出:This is a native C+ program.9. 若要关闭 “ Visual Studio 2010命令提示窗口,请键入 exit 并按

14、 Enter 。编译使用.NET 类的Visual C+ 程序下面的步骤演示如何编译使用.NET Framework 类的Visual C+ 程序。您必须使用/clr (公共语言运行时编译)编译器选项,因为此程序使用.NET类并且必须包括必要的 .NET库Visual C+ 编译器生成的.exe 文件包含MSIL代码,而不是可由计算机执行的指令。按照本过程中的步骤编译帮助主题中的任何Visual C+ 示例程序。在命令行上编译Visual C+ .NET控制台应用程序1. 打开“ Visual Studio 2010命令提示窗口,方法是单击开始”指向所有程序” “ MicrosoftVisua

15、l Studio 2010”、“ Visual Studio 工具”,然后单击 “ Visual Studio 2010 命令提示”。可能需要管理员凭据才能成功编译此演练中的代码,具体情况视计算机的操作系统和配置而定。若要以管理员身份运行 “Visual Studio 2010命令提示窗口,请右击 “Visual Studio 2010命令提示”然后单击以管理员身份运行”。2. 在命令提示符下,键入notepad basicclr.cpp,并按 Enter 。在系统提示是否创建文件时,单击是”。3. 在记事本中,键入下列各行。复制代码int mai n()System:Console:Writ

16、eLine(This is a Visual C+ program.);4. 在 文件”菜单上,单击 保存”您已经创建了一个使用.NET 类(Console )的Visual C+源文件,该文件位于 System 命名空间。5. 关闭记事本。6. 在命令提示符下,键入 cl /clr basicclr.cpp,并按 Enter 。cl.exe 编译器将生成一个名为basicclr.exe的可执行程序。7. 若要查看目录中具有名称basicclr以及任何文件扩展名的文件的列表,请键入dir basicclr.*并按 Enter。.obj 文件是一个中间格式文件,可以安全地忽略它。.manifes

17、t文件是包含有关程序集的信息的XML文件。(程序集是.NET 部署单元,例如.exe 程序或.dll组件或库。)8. 若要运行 basicclr.exe 程序,请键入 basicclr 并按Enter 。该程序显示以下文本并退出:This is a Visual C+ program.9. 若要关闭 “ Visual Studio 2010命令提示窗口,请键入 exit 并按 Enter 。在Visual Studio 中编译面向 CLR的C+程序通过使用 Visual Studio开发环境,您可以创建使用.NET 类的Visual C+ 程序,并对它们进行编译。在本过程中,您可以键入自己的V

18、isual C+ 程序,也可以使用示例程序之一。本过程中使用的示例程序创建一个名为textfile.txt的文本文件,并将其保存到项目目录中。这些主题假定您具备C+ 语言的基础知识。在Visual Studio中创建新项目并添加新的源文件1.2.创建新项目。在文件”菜单上,指向 新建”,然后单击项目”。在“Visual C+ 项目类型”中单击“ CLR”,然后单击 “ CLR空项目”。3.键入项目名称。4.默认情况下,包含项目的解决方案与新项目同名,当然,您也可以键入其他名称。项目输入一个不同的位置。单击确定”创建新项目。如果解决方案资源管理器”不可见,请单击视图”菜单上的解决方案资源管理器如

19、果愿意,您可以为5.向该项目添加新的源文件:系统必备在解决方案资源管理器中右击源文件”文件夹,指向 添加”并单击新建项.单击“C+文件(.c pp) ”,键入一个文件名,然后单击添加”。该.cpp 文件即显示在解决方案资源管理器”中的源文件文件夹中,并且,在键入要包含在该文件中 的代码的位置,出现一个选项卡式窗口。6.Visual C+程序,或者复制并粘贴在Visual Studio中,在新创建的选项卡中单击并键入有效的示例程序之一。例如,您可以使用 如何:编写文本文件(C+/CLI)示例程序(位于 编程指南”中的 文件处理和I/O ”节点)。如果要使用示例程序,通知您使用 gcnew 关键字

20、而不是 new ,在创建.NET 对象,并且,时gcnew返回句柄(人)而不是指针(*):StreamWriterA sw = gcnew StreamWriter(fileName);有关新Visual C+语法的更多信息,请参见适用于运行时平台的组件扩展7.在生成”菜单上,单击 生成解决方案输出”窗口显示有关编译过程的信息,如生成日志的位置,以及指示生成状态的消息。如果进行了更改,并在未执行生成的情况下运行该程序,则对话框可能指示该项目已过期。如果要让Visual Studio始终使用文件的当前版本,并且在每次生成应用程序时不发出提示,选中此对话框上的复选框。请在单击确定”之前8.在调试菜

21、单上,单击 开始执行(不调试)”。按任意textfile.txt文本文件现在位于您的项目目录中。您可以使用记事本打开此文件。9.如果您使用的是示例程序,则在运行程序时将显示一个命令窗口,指示已创建了该文本文件。 键,关闭该命令窗口。说明选择空CLR项目模板会自动设置/clr编译器选项。若要验证这一点,请在解决方案资源管理器”中右击该项目,再单击 属性”,然后选中配置属性”的常规”节点中的 公共语言运行时支持”选项。编译C程序Visual Studio包括可用来创建从基本基本的C程序到 windows API 应用程序的 c.编译器此演练演示如何使用文本编辑器创建一个基本的C程序,然后在命令行上

22、对其进行编译。您可以使用自己的 C程序,而不是键入此演练中所示的示例程序。也可以使用帮助主题中包含的任何C代码示例程序。默认情况下,Visual C+编译器将以.c结尾的所有文件视为C源代码,将以.cpp 结尾的所有文件视为C+ 源代码。若要强制编译器将所有文件视为C (而不管文件扩展名如何),请使用/Tc编译器选项。系统必备您必须了解 C语言的基础知识。创建C源文件并在命令行上对其进行编译1. 打开开发人员命令提示。在启动屏幕的windows 8 ,在中,选择VS2012开发人员命令提示平铺。在早期版本中,选择 启动按钮,展开 所有程序、Microsoft Visual Studio 201

23、2和VisualStudio 工具,然后选择 VS2012开发人员命令提示 。基于windows的版本在计算机和系统安全配置中,您可能必须打开VS2012开发人员命令提示的快捷菜单中选择以管理员身份运行成功生成和运行按这些步骤创建的应用程序。卍说明VS2012开发人员命令提示自动设置C编译器和所需的任何库的正确路径。应使用它而不是使用普通的命令提示符”窗口。 有关更多信息,请参见 为命令行生成设置路径和环境变量。2. 在命令提示,请创建源文件的目录并使其成为当前工作目录。例如,键入md c:simple 并按enter创建名为Simple 的目录,然后键入cd c:simple 并按enter

24、更改到该目录。3. 在命令提示符处,键入notepad 并按 enter。4. 在记事本中,输入以下行。Visual C+复制代码#include int main()printf( This is a n ative C program. n);return 0;5. 在菜单栏上,依次选择文件,保存打开另存为对话框。导航到已创建的内容。在文件名框中,输入一个名称为源文件(例如,simple.c 和中的 保存类型 然后在下拉列表中,选择所有文件(*.*)。选择保存按钮创建c.源文件在您的工作目录。6. 关闭记事本。7. 在命令提示,请与您的源一起的名称指定cl命令文件(例如,cl simple

25、.c 并按enter生成程序。cl.exe 编译器将生成将源文件的名称的可执行程序,但是,有一个.exe 文件名扩展名(例如,Simple.exe 。您可以在编译器显示的多行输出信息中看到可执行程序的名称。Outputx86 copyright (c) Microsoft Corporatio n的 Microsoft (r) C/C+ 编译器优化第17.00.50727.1 版。保留所有权利。simple.c Microsoft(r)增量链接器第 11.00.50727.1 版 copyright (c) MicrosoftCorporation。保留所有权利。/out:simple.exe

26、 simple.obj8. 若要查看文件列表中工作目录中,键入dir并按enter。.obj文件是可忽略的中间格式文件。9. 若要运行程序,键入其名称,不带文件扩展名(例如,simple 并按enter。程序显示此文本然后退出:This is a native C program.10. 若要关闭命令提示符窗口,键入exit并按enter。创建Win32 应用程序本演练演示如何创建基于Win32 的简单基本应用程序,该应用程序在窗口中显示“Hello, World! ”。您可以使用在此演练中开发的代码作为创建其他基于Win32 的应用程序的模式。Win32 API (也称为 Windows A

27、PI )是用于创建 Windows 应用程序的基于C的框架。 有关 Win32 API 的更多信息,请参见 Windows API 。重要事项为了可以更加清楚地说明本文档内各步骤中的特定代码段,我们可能会省略一个有效应用程序所必需的某些代码语句,例如include 指令和全局变量声明。本文档末尾的示例一节显示了完整代码。系统必备若要完成本演练,您必须了解C+ 语言的基础知识。有关视频演示,请参见 Visual Studio 2008 文档中的 Video How to: Creating Win32 Applications (C+)(视频帮助:创建 Win32 应用程序(C+)。创建基于Wi

28、n32 的项目1. 在文件”菜单上,单击 新建”,然后单击 项目”。2. 在新建项目”对话框的左侧窗格中,单击 已安装的模板”,单击“ Visual C+”,然后选择“ Win32 ”。在中间窗格中,选择Win32 项目”。在名称”框中,键入项目名称,例如win32app 。单击 确定”。3. 在“ Win32 应用程序向导”的 欢迎”页上,单击 下一步”。4. 在应用程序设置”页上的在 应用程序类型”下,选择“ Windows应用程序”。在附加选项”下,选择 空项目”。单击 完成”创建项目。5. 在解决方案资源管理器”中,右击 Win32app 项目,单击 添加”,然后单击 新建项”。在添加

29、新 项对话框中选择 C+文件(.cpp) ” 。在 名称框中,键入文件名称,例如GT_HelloWorldWin32.cpp。单击添加”。启动基于Win32 的应用程序1. 就像每个C应用程序和 C+ 应用程序都以 main函数作为起点那样,每个基于Win32的应用程序同样必须要有 WinMain 函数。WinMain具有以下语法。复制代码int WINAPI WinM ai n( HINSTANCE hln sta nee,HINSTANCE hPrevI nsta nee,LPSTR IpCmdLi ne, int n CmdShow);有关此函数的参数和返回值的信息,请参见WinMain

30、 函数。2. 由于应用程序代码必须使用现有定义,因此应将include 语句添加到文件中复制代码#i nclude #include #include #in clude 3. 除WinMain函数外,每个基于 Win32 的应用程序还必须具有一个窗口过程函数。此函数通常名为WndProc 。 WndProc具有以下语法。复制代码LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);此函数处理应用程序从操作系统接收的许多消息。例如,在具有对话框(该对话框中有一个确定”按钮)的应用程序中,如果用户单击该按钮,操作系统就会向该应用程序发送一条消息

31、,告知已单击该按钮。WndProc 负责响应该事件。 在此示例中,相应的响应可能是关闭该对话框。有关更多信息,请参见 窗口过程。向WinMain 函数添加功能1. 在WinMain 函数中,创建 WNDCLASSEX 类型的窗口类结构。 此结构包含有关该窗口的信息,例如,应用程序图标、窗口的背景色、要在标题栏中显示的名称、窗口过程函数的名称等等。下面的示例演示一个典型 WNDCLASSEX 结构复制代码WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnW

32、ndProc = WndProc;wcex.cbCIsExtra = 0;wcex.cbW ndExtra = 0;wcex.hI nsta nee= hln sta nee;wcex.hIc on = Loadlc on(hln sta nee, MAKEINTRESOURCE(IDI_APPLICATION);wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackgrou nd = (HBRUSH)(COLOR_WINDOW+1); wcex .I pszMe nu Name = NULL;wcex .I pszCIassName

33、= szWi ndowClass;wcex.hIc onSm= LoadIc on( wcex.h In sta nee,MAKEINTRESOURCE(IDI_APPLICATION);有关此结构的各字段的信息,请参见WNDCLASSEX 。2. 现在您已经创建一个窗口类,接下来必须将其注册。使用RegisterCIassEx 函数,并将窗口类结构作为参数进行传递。复制代码if (!RegisterCIassEx(& wcex)MessageBox(NULL,_T(CaII to RegisterCIassEx faiIed!), _T(Wi n32 Guided Tour), NULL);

34、return 1;3. 现在可以创建一个窗口。使用CreateWindow 函数。复制代码static TCHAR szWi ndowClass = _T(w in 32app);static TCHAR szTitIe = _T(Wi n32 Guided Tour AppIicatio n);/ The parameters to CreateWi ndow expIa in ed:/ szWi ndowClass: the n ame of the appIicati on/ szTitle: the text that appears in the title bar/ WS_OVER

35、LAPPEDWINDOW: the type of win dow to create/ CW_USEDEFAULT, CW_USEDEFAULT: in itial position (x, y)/ 500, 100: initial size (width, length)/ NULL: the pare nt of this window/ NULL: this applicati on does not have a menu bar/ hln sta nee: the first parameter from WinM ai n/ NULL: not used in this app

36、licati onHWND hWnd = CreateWi ndow(szWi ndowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 100,NULL,NULL,hln sta nee,NULL);if (!hWnd)MessageBox(NULL,_T(Call to CreateWi ndow failed!),_T(Win32 Guided Tour),NULL);return 1;此函数返回 HWND,它是某个窗口的句柄。有关更多信息,请参见 Windows 数据类型。4. 现在,使用下列代码来显

37、示窗口。复制代码/ The parameters to ShowWi ndow expla in ed:/ hWnd: the value returned from CreateWi ndow/ n CmdShow: the fourth parameter from Win Mai nShowWi ndow(hWnd,n CmdShow);UpdateWi ndow(hWnd);此时,所显示的窗口不会有太多内容,因为您尚未实现WndProe 函数。5. 现在添加一个消息循环以侦听操作系统发送的消息。如果应用程序收到一条消息,则此循环会将该消息调度至WndProe函数以接受处理。 消息循环类

38、似于下列代码。复制代码MSG msg;while (GetMessage(&msg, NULL, 0, 0)Tran slateMessage( &m sg);DispatchMessage(&msg);return (int) msg.wParam;有关消息循环中各结构和函数的更多信息,请参见MSG、GetMessage 、TranslateMessage 和DispatchMessage 。此时,WinMain函数应与下列代码类似。复制代码int WINAPI WinM ai n( HINSTANCE hln sta nee,HINSTANCE hPrevI nsta nee,LPSTR

39、IpCmdLi ne, int n CmdShow)WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc;wcex.cbCIsExtra = 0;wcex.cbW ndExtra = 0;wcex.hl nsta nee= hln sta nee;wcex.hlc on= Loadlc on(hln sta nee,MAKEINTRESOURCE(IDI_APPLICATION);wcex.hCursor = LoadCu

40、rsor(NULL, IDC_ARROW); wcex.hbrBackgrou nd = (HBRUSH)(COLOR_WINDOW+1); wcex .I pszMe nu Name = NULL;wcex .I pszCIassName = szWi ndowClass;wcex.hlc onSm= Loadlc on( wcex.h In sta nee,MAKEINTRESOURCE(IDI_APPLICATION);if (!RegisterCIassEx(& wcex)MessageBox(NULL,_T(CaII to RegisterCIassEx faiIed!),_T(Wi

41、 n32 Guided Tour),NULL);return 1;hlnst = hln sta nee; / Store in sta nee han die in our global variable/ The parameters to CreateWi ndow expla in ed:/ szWi ndowClass: the n ame of the applicati on/ szTitle: the text that appears in the title bar/ WS_OVERLAPPEDWINDOW: the type of win dow to create/ C

42、W_USEDEFAULT, CW_USEDEFAULT: in itial positi on (x, y)/ 500, 100: in itial size (width, le ngth)/ NULL: the pare nt of this win dow/ NULL: this applicati on dows not have a menu bar/ hln sta nee: the first parameter from Win Mai n/ NULL: not used in this applicati onHWND hWnd = CreateWi ndow(szWi nd

43、owClass, szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 100,NULL,NULL,hln sta nee,NULL);if (!hWnd)MessageBox(NULL,_T(Call to CreateWi ndow failed!),_T(Wi n32 Guided Tour),NULL);return 1;/ The parameters to ShowWi ndow expla in ed:/ hWnd: the value returned from CreateWi ndow/ n CmdSho

44、w: the fourth parameter from Win Mai nShowWi ndow(hWnd,n CmdShow);UpdateWi ndow(hWnd);/ Main message loop:MSG msg;while (GetMessage(&msg, NULL, 0, 0)Tran slateMessage( &m sg);DispatchMessage(&msg);return (int) msg.wParam;向WndProc 函数添加功能1.若要启用 WndProc函数来处理应用程序所收到的消息,请实现switch 语句。要处理的第一条消息是 WM_PAINT 消

45、息。如果必须更新所显示的应用程序窗口的一部分,该应用程序就会收到此消息。(首次显示该窗口时,必须将其全部更新。)若要处理WM_PAINT 消息,请首先调用 BeginPaint ,然后处理用于布局该窗口中的文本、按钮和其他控件的所有逻辑,再调用EndPaint。对于此应用程序,开始调用和结束调用之间的逻辑会在窗口中显示字符串 “Hello, World! ”。在下列代码中,请注意 TextOut 函数用于显示该字符串。复制代码PAINTSTRUCT ps;HDC hdc;TCHAR greeti ng = _T(Hello, World!);switch (message)case WM_PA

46、INT:hdc = Begi nPai nt(hWnd, &ps);/ Here your application is laid out./ For this introduction, we just print out Hello, World!/ in the top left corner.TextOut(hdc,5, 5,greeti ng, _tcsle n( greeti ng);/ End applicati on-specific layout sect ion.En dPai nt(hWnd, &ps);break;2.应用程序通常会处理许多其他消息,例如基本但完整的 W

47、ndProc函数。WM_CREATE 和WM_DESTROY 。下列代码展示了一个复制代码LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM IParam)PAINTSTRUCT ps;HDC hdc;TCHAR greeti ng = _T(Hello, World!);switch (message)case WM_PAINT:hdc = Begi nPai nt(hWnd, & ps);/ Here your application is laid out./ For this in troduc

48、ti on, we justprint out Hello, World!/ in the top left corner.TextOut(hdc,5, 5,greeti ng, _tcsle n( greet in g);/ End applicati on specific layout sect ion.En dPai nt(hWnd, & ps);break;case WM_DESTROY:PostQuitMessage(O);break;default:return DefWi ndowProc(hWnd, message, wParam, lParam); break;return

49、 0;示例生成此示例1. 创建本演练中之前创建基于 Win32 的项目”中的基于 Win32 的项目2.源文件中复制这些步骤之后的代码,然后将其粘贴到GT_HelloWorldWin32.cpp3. 在 生成”菜单上,单击 生成解决方案”。4. 若要运行该应用程序,请按F5。包含文本“ hello world 的窗口应显示在显示的左上角代码复制代码/ GT_HelloWorldWi n32.cpp/ compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c#i nclude #i nclude #include #in clude / G

50、lobal variables/ The mai n wi ndow class n ame.static TCHAR szWi ndowClass = _T(w in 32app);/ The string that appears in the applications title bar.static TCHAR szTitle = _T(Wi n32 Guided Tour Applicatio n);HINSTANCE hI nst;/ Forward declarati ons of fun cti ons in cluded in this code module: LRESUL

51、T CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinM ai n(H INSTANCE hln sta nee,HINSTANCE hPrevI nsta nee,LPSTR lpCmdLi ne, int n CmdShow)WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbW ndExtra

52、= 0;wcex.h In sta nee= hln sta nee;wcex.hIc on= LoadIc on(hln sta nee,MAKEINTRESOURCE(IDI_APPLICATION);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackgrou nd = (HBRUSH)(COLOR_WINDOW+1);wcex .1 pszMe nu Name = NULL;wcex .1 pszClassName = szWi ndowClass;wcex.hIco nSm = LoadIc on( wcex.h In sta

53、 nee,MAKEINTRESOURCE(IDI_APPLICATION);if (!RegisterClassEx(& wcex)MessageBox(NULL,_T(Call to RegisterClassEx failed!),_T(Wi n32 Guided Tour),NULL);return 1;hlnst = hln sta nee; / Store in sta nee han dle in our global variable/ The parameters to CreateWi ndow expla in ed:/ szWi ndowClass: the n ame of the applicati on/ szTitle: the text that appears in the title bar/ WS_OVERLAPPEDWINDOW: the type of win dow to create/ CW_USEDEFAULT, CW_USEDEFAULT: in itial position (x, y)/ 500, 100: in itial size (width, le ngth)/ NULL: the pare nt of this win dow/ NULL: this applicati on does not have a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论