




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual Studio C+ 2008 速成版(Express)教程由于速成班不支持资源文件的编辑,这里对资源文件分析一二15修改一个项目16进行跟踪验证18大胆的增加菜单的项目19菜单是如何被触发的呢?20跟踪研究IDM_ABOUT?20IDM_ABOUT的声明在哪里?21IDM_ABOUT是一个数字!22对话框是怎么打开的?26创建命令行程序37创建新的 Windows 窗体项目(对话框)41向窗体添加控件42设置窗体和控件的属性42编写事件处理程序代码43编写代码以处理事件43生成并运行程序44创建 Visual C+ 源文件并在命令行上对其进行编译44编译使用 .NET 类的 Visual C+ 程序45在命令行上编译 Visual C+ .NET 控制台应用程序45使用CLR构建程序46特别注意:数据类型的转换47数字转变成为字符串47字符串转变为整形变量47首先,感谢微软公司提供免费的Visual Studio C+ Express中文版。相关资源:/Express//zh-cn/visualc/default.aspx运行软件Microsoft Visual C+ Express EdtionMicrosoft Visual C+ Express Edtion界面创建windows程序之带菜单的窗体新建项目选择Win32Win32项目名称:test1位置:G:testProject1解决方案test1单击下一步单击完成进入的界面如下:生成文件亦如下图所示:头文件:Resource.h stdafx.h targetver.h test1.h源文件:stdafx.cpp test1.cpp资源文件:small.ico test1.ico test1.rcReadMe.txt(上述文件名:test1 与解决方案名 相同)重新生成解决方案,或者通过快捷键完成(Ctrl+Alt+F7)如下图所示,表示编译没有出现错误。开始执行程序(或者通过快捷键Ctrl+F5)运行如下:单击帮助关于弹出窗口如下。单击文件退出 (退出执行的程序)同时,您也可以通过在G:testProject1test1Debug下运行。双击test1.exe执行生成的程序。下面做的是如何对程序做简单的修改,甚至是颠覆性的修改!循序而渐进!可以通过双击头文件(.h为后缀),源文件(.cpp为后缀),ReadMe.txt文件进行相应的修改工作,如何修改下面章节进行论述。当您逐项进行双击后,可以看到文件的内容,如下所示,您可以切换不同的文件进行相应的编辑修改工作。如果,您对代码修改不在行,甚至一无所知,请不要做任何修改,下面章节中将有详细的阐述。对于资源文件(.ico后缀,.rc后缀),却是不同的。双击.ico后缀的文件,会调用画图板打开该文件(实际是一个图),但是,用画图板打开后,修改是不能进行保存的,所以这里暂时不做任何改动。当您双击.rc后缀的文件时,您会发现,速成版并不支持资源的编辑。下图是,双击test1.rc后,出现的视图。不过可以通过右键菜单的查看代码,对test1.rc进行编辑。现在从文件的角度,看一下,通过上述这样的步骤,Visual Studio C+ 2008 Express为我们生成了一些什么文件。如上,我们已经设计了一个程序,不过代码是系统所生成的,我们只是轻点了几下鼠标而已。究竟,生成的过程,我们不做深究,权且当作一个黑箱。不关注他的执行过程,也不关注生成了什么文件或者代码。下图是运行test1.exe产生的界面:简要分析一下其特征:标题:test1菜单:文件,帮助“文件”下有“退出”“帮助”下有“关于”如何对上述的特征进行修改或者增减呢?比如:把“文件”修改为“编辑”,在“退出”前增加“打开对话框”,增加一个新的菜单“窗口”进行,这些修改,必须了解,这些特征与文件代码的对应关系。打开test1.rc(通过右键,查看代码的方式实现),如下图所示。由于速成班不支持资源文件的编辑,这里对资源文件分析一二我们看到,/ 菜单/IDC_TEST1 MENUBEGIN POPUP 文件(&F) BEGIN MENUITEM 退出(&X), IDM_EXIT END POPUP 帮助(&H) BEGIN MENUITEM 关于(&A) ., IDM_ABOUT ENDEND初步判断,文件(&F) 就是窗口中的菜单中所示的文件。修改一个项目我们改文件(&F)为文件修改(&F)保存(单击全部保存)生成解决方案(Ctrl+Alt+F7)开始执行(Ctrl+F5)单击全部保存。生成解决方案(Ctrl+Alt+F7)开始执行(Ctrl+F5)进行跟踪验证执行结果,与我们所期望的是一致的!观察test1.rc中的代码段:IDC_TEST1 MENUBEGIN POPUP 文件修改(&F)BEGINMENUITEM 新增1(&X), IDM_EXIT /*这行,是我们新增加的*/ MENUITEM 退出(&X), IDM_EXIT END POPUP 帮助(&H) BEGIN MENUITEM 关于(&A) ., IDM_ABOUTEND POPUP 新增菜单(&H) /*这行,是我们新增加的*/ BEGIN /*这行,是我们新增加的*/ MENUITEM 关于(&A) ., IDM_ABOUT /*这行,是我们新增加的*/ END /*这行,是我们新增加的*/END大胆的增加菜单的项目进行如上更改后,编译并运行后,果然在输出结果上增加了一个菜单项。通过上面的修改,举一反三,可以建造复杂的菜单系统了。可是,单击,这些菜单选项,程序不会完成任何操作,除了,“退出”“关于”能够完成退出操作和打开一个对话框的操作除外。菜单是如何被触发的呢?下面,我们关注一下,如何通过菜单来触发程序的执行?首先,关注一下“关于”,因为单击它,可以弹出一个对话框?比退出更有挑战性一些!跟踪研究IDM_ABOUT?IDM_ABOUT是什么?他和弹出对话框有什么关系呢?IDM_ABOUT的声明在哪里?我们选择IDM_ABOUT,右键,转到声明。系统自动转到Resource.h 中对IDM_ABOUT声明项。IDM_ABOUT是一个数字!#define IDM_ABOUT104选择IDM_ABOUT,右键,选择查找所有引用双击查找符号结果的蓝色显示项即:test1.cpp(148):case IDM_ABOUT:双击后,显示出,IDM_ABOUT在test1.cpp中的位置。IDM_ABOUT:在test1.cpp中只有1次被检索出,所以该句后面的语句就是显示对话框的指令了。/ 分析菜单选择:switch (wmId)case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:IDM_ABOUT在Resource.h中被定义为104了,#define IDM_ABOUT104所以IDM_ABOUT即是104的一个代号,/ 分析菜单选择:switch (wmId)case 104:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:程序中的IDM_ABOUT修改为104,编译和执行是没有区别的。IDM_ABOUT只是一个便于记忆的符号变量,同样,在test1.rc中的代码/ 菜单/IDC_TEST1 MENUBEGIN POPUP 文件修改(&F) BEGINMENUITEM 新增(&X), IDM_EXIT MENUITEM 退出(&X), IDM_EXIT END POPUP 帮助(&H) BEGIN MENUITEM 关于(&A) ., IDM_ABOUT/* IDM_ABOUT 也可以写成104*/ END POPUP 新增菜单(&H) /*这行,是我们新增加的*/ BEGIN /*这行,是我们新增加的*/ MENUITEM 关于(&A) ., IDM_ABOUT /*这行,是我们新增加的*/ END /*这行,是我们新增加的*/END当您单击某个菜单选项时,test1.rc中定义的值,与test1.cpp中的相同,即表示是相互关联的。MENUITEM 关于(&A) ., IDM_ABOUT/* IDM_ABOUT 也可以写成104*/对话框是怎么打开的?DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);可根据语义环境或者英文原意,判断为打开对话框。对话框是通过IDD_ABOUTBOX所标识的。通过如上“转到定义”在Resource.h找到定义的语句,通过“查找所有引用”也可以找出其在Resource.h和test1.cpp中出现的位置。在test1.rc中,找到IDD_ABOUTBOX部分IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62上面的数字表示的对话框的尺寸,可以尽心手动修改,以符合自己的需求。数字依次表示:左下角(水平,垂直),右上角(水平,垂直)test1.cpp 代码内容如下:/ test1.cpp : 定义应用程序的入口点。/#include stdafx.h#include test1.h#define MAX_LOADSTRING 100/ 全局变量:HINSTANCE hInst;/ 当前实例/关于HINSTANCE,在WinDef.h中定义为:DECLARE_HANDLE(HINSTANCE);/关于DECLARE_HANDLE(HINSTANCE),在WinNT.h中定义为:#define DECLARE_HANDLE(name) struct name#_ int unused; ; typedef struct name#_ *name/关于HINSTANCE,在WinDef.h中定义为:typedef HINSTANCE HMODULE;TCHAR szTitleMAX_LOADSTRING;/ 标题栏文本TCHAR szWindowClassMAX_LOADSTRING;/ 主窗口类名/关于TCHAR,在WinDef.h中定义为:typedef WCHAR TCHAR, *PTCHAR;/ 此代码模块中包含的函数的前向声明:ATOMMyRegisterClass(HINSTANCE hInstance);/关于ATOM,在WinDef.h中定义为:typedef WORD ATOM;/关于WORD,在WinDef.h中定义为:typedef unsigned short WORD;BOOLInitInstance(HINSTANCE, int);LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);/关于LRESULT,在WinDef.h中定义为:typedef LONG_PTR LRESULT;INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) /在tchar.h中定义:#define _tWinMain wWinMainUNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine); / TODO: 在此放置代码。MSG msg;HACCEL hAccelTable;/ 初始化全局字符串LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_TEST1, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);/ 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)return FALSE;hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEST1);/ 主消息循环:while (GetMessage(&msg, NULL, 0, 0)if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)TranslateMessage(&msg);DispatchMessage(&msg);return (int) msg.wParam;/ 函数: MyRegisterClass()/ 目的: 注册窗口类。/ 注释:/ 仅当希望/ 此代码与添加到Windows 95 中的“RegisterClassEx”/ 函数之前的Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,/ 这样应用程序就可以获得关联的/ “格式正确的”小图标。/ATOM MyRegisterClass(HINSTANCE hInstance)WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST1);wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName= MAKEINTRESOURCE(IDC_TEST1);wcex.lpszClassName= szWindowClass;wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL);return RegisterClassEx(&wcex);/ 函数: InitInstance(HINSTANCE, int)/ 目的: 保存实例句柄并创建主窗口/ 注释:/ 在此函数中,我们在全局变量中保存实例句柄并/ 创建和显示主程序窗口。/BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) HWND hWnd; hInst = hInstance; / 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE;/ 函数: WndProc(HWND, UINT, WPARAM, LPARAM)/ 目的: 处理主窗口的消息。/ WM_COMMAND- 处理应用程序菜单/ WM_PAINT- 绘制主窗口/ WM_DESTROY- 发送退出消息并返回/LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message)case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);/ 分析菜单选择:switch (wmId)case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);/ TODO: 在此添加任意绘图代码.EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);return 0;/ “关于”框的消息处理程序。INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)UNREFERENCED_PARAMETER(lParam);switch (message)case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) = IDOK | LOWORD(wParam) = IDCANCEL)EndDialog(hDlg, LOWORD(wParam);return (INT_PTR)TRUE;break;return (INT_PTR)FALSE;test1.rc 代码内容如下:/Microsoft Visual C+ 生成的资源脚本。/#include resource.h#define APSTUDIO_READONLY_SYMBOLS/ 从TEXTINCLUDE 2 资源生成。/#ifndef APSTUDIO_INVOKED#include targetver.h#endif#define APSTUDIO_HIDDEN_SYMBOLS#include windows.h#undef APSTUDIO_HIDDEN_SYMBOLS/#undef APSTUDIO_READONLY_SYMBOLS#if !defined(AFX_RESOURCE_DLL) | defined(AFX_TARG_CHS)LANGUAGE 4, 2#pragma code_page(936)/ 图标/ ID 值最低的图标放在最前面,以确保应用程序图标/ 在所有系统中保持一致。IDI_TEST1 ICON test1.icoIDI_SMALL ICON small.ico/ 菜单/IDC_TEST1 MENUBEGIN POPUP 文件修改(&F) BEGIN MENUITEM 新增(&X), IDM_EXIT MENUITEM 退出(&X), IDM_EXIT END POPUP 帮助(&H) BEGIN MENUITEM 关于(&A) ., IDM_ABOUT END POPUP 新增菜单(&H) /*这行,是我们新增加的*/ BEGIN /*这行,是我们新增加的*/ MENUITEM 关于(&A) ., IDM_ABOUT /*这行,是我们新增加的*/ END /*这行,是我们新增加的*/END/ 快捷键/IDC_TEST1 ACCELERATORSBEGIN ?, IDM_ABOUT, ASCII, ALT /, IDM_ABOUT, ASCII, ALTEND/ 对话框/IDD_ABOUTBOX DIALOGEX 40, 20, 180, 120STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION 关于test1FONT 9, MS Shell DlgBEGIN ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20 LTEXT test1,.0 版,IDC_STATIC,50,20,114,8,SS_NOPREFIX LTEXT Copyright (C) 2009,IDC_STATIC,50,40,114,8 DEFPUSHBUTTON 确定,IDOK,50,50,50,50,WS_GROUPEND/ DESIGNINFO/#ifdef APSTUDIO_INVOKEDGUIDELINES DESIGNINFOBEGIN IDD_ABOUTBOX, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 163 TOPMARGIN, 7 BOTTOMMARGIN, 55 ENDEND#endif / APSTUDIO_INVOKED#ifdef APSTUDIO_INVOKED/ TEXTINCLUDE/1 TEXTINCLUDEBEGIN resource.h0END2 TEXTINCLUDEBEGIN#ifndef APSTUDIO_INVOKEDrn #include targetver.hrn #endifrn #define APSTUDIO_HIDDEN_SYMBOLSrn #include windows.hrn #undef APSTUDIO_HIDDEN_SYMBOLSrn 0END3 TEXTINCLUDEBEGIN rn 0END#endif / APSTUDIO_INVOKED/ 字符串表/STRINGTABLEBEGIN IDC_TEST1 TEST1 IDS_APP_TITLE test1END#endif/#ifndef APSTUDIO_INVOKED/ 从TEXTINCLUDE 3 资源生成。/#endif / 不是APSTUDIO_INVOKEDResource.h 中的代码如下:/NO_DEPENDENCIES/ Microsoft Visual C+ generated include file./ Used by test1.rc/#define IDS_APP_TITLE103#define IDR_MAINFRAME128#define IDD_TEST1_DIALOG 102#define IDD_ABOUTBOX103#define IDM_ABOUT104#define IDM_EXIT105#define IDI_TEST1 107#define IDI_SMALL108#define IDC_TEST1 109#define IDC_MYICON2#ifndef IDC_STATIC#define IDC_STATIC-1#endif/ 新对象的下一组默认值/#ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NO_MFC130#define _APS_NEXT_RESOURCE_VALUE129#define _APS_NEXT_COMMAND_VALUE32771#define _APS_NEXT_CONTROL_VALUE1000#define _APS_NEXT_SYMED_VALUE110#endif#endif创建命令行程序1. 创建新项目:在“文件”菜单上,指向“新建”,然后单击“项目”。2. 在“Visual C+”项目类型中,单击“Win32”,然后单击“Win32 控制台应用程序”。3. 输入项目名称。默认情况下,包含项目的解决方案与新项目同名,当然,您也可以键入其他名称。如果愿意,您可以为项目输入一个不同的位置。单击“确定”创建新项目。4. 在“Win32 应用程序向导”中,选择“下一步”并单击“完成”。5. 如果“解决方案资源管理器”不可见,请单击“视图”菜单上的“解决方案资源管理器”。双击test4.cpp,添加代码:printf(Hello World! n);编译程序执行程序运行控制台程序更多的输出和逻辑控制,参照C+语言编写。2个简单的程序:#include stdafx.hint i;int _tmain(int argc, _TCHAR* argv)printf(Hello World! n);while(1)printf(%d n,i+);return 0;/ TEST5.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include string.h#include iostreamint _tmain(int argc, _TCHAR* argv)char a;std:cina;std:couthellon;std:coutText=String:Format(New date: 0, dateTimePicker1-Text); 当应用程序的用户选择了新的日期时,标签的 Text 属性将设置为后跟 DateTimePicker 的 Text 属性的字符串 New date:。Visual Studio 提供了几个可以简化代码键入的功能: 当键入箭头运算符 (-) 时,IntelliSense 将显示可从中选择的有效选项列表。 当键入方法的左括号时,将出现一个工具提示窗口,其中显示该方法的各个重载的有效参数。要查看不同的重载,请使用向上键或向下键。 自动完成可以根据您已键入的部分完成变量名或成员的键入。例如,如果键入了 String:Fo 并按 Ctrl-空格键或 Tab,Visual Studio 将自动完成键入 String:Format。生成并运行程序1. 在“生成”菜单中,单击“生成解决方案”。如果存在错误,请单击“输出”窗口中的“转到下一条消息”按钮。错误消息文本显示在状态栏中。您可以双击任何错误,转到源代码中包含该错误的行。2. 在“调试”菜单中,单击“不进行调试直接运行”。将显示您生成的应用程序。3. 测试该应用程序,方法是单击 DateTimePicker 上的向下箭头,选择一个日期。标签文本更改为显示所选的日期,如下所示:4. 您可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高新技术厂房股权转让与区域经济转型升级合同
- 广告位租赁合同模板
- 智慧水利实践及未来展望
- 大教学论教育思想
- 家庭保洁培训
- 酒店前台礼仪礼节培训
- 幼儿园走失事件应对策略
- 健康领域核心经验培训
- 红领巾队教育体系构建
- 幼儿园手足口病培训课件
- 学堂课程在线人工智能与创业智慧(北林)期末测试答案
- 2023-2024学年河北省石家庄市高二下学期7月期末考试数学试题(解析版)
- 2025年江西省中考语文真题无答案
- 2025年上海市中考数学试卷附答案
- 关于七一活动方案
- 关于卫生院“十五五”发展规划(完整本)
- 福州市重点中学2025届英语七下期末联考试题含答案
- 2025年初中学业水平考试地理试卷(附答案)
- 大型医院巡查医院自查表
- 2025山西晋城市国有资本投资运营有限公司部分子公司招聘11人笔试参考题库附带答案详解析集合
- 期末专项复习:课内阅读(附答案)-部编版四年级语文下册
评论
0/150
提交评论