Visual Studio C++速成版教程.docx
《Visual Studio C++速成版教程.docx》由会员分享,可在线阅读,更多相关《Visual Studio C++速成版教程.docx(56页珍藏版)》请在冰豆网上搜索。
VisualStudioC++速成版教程
VisualStudioC++2008速成版(Express)教程
由于速成班不支持资源文件的编辑,这里对资源文件分析一二15
修改一个项目16
进行跟踪验证18
大胆的增加菜单的项目19
菜单是如何被触发的呢?
20
跟踪研究IDM_ABOUT?
20
IDM_ABOUT的声明在哪里?
21
IDM_ABOUT是一个数字!
22
对话框是怎么打开的?
26
创建命令行程序37
创建新的Windows窗体项目(对话框)41
向窗体添加控件42
设置窗体和控件的属性42
编写事件处理程序代码43
编写代码以处理事件43
生成并运行程序44
创建VisualC++源文件并在命令行上对其进行编译44
编译使用.NET类的VisualC++程序45
在命令行上编译VisualC++.NET控制台应用程序45
使用CLR构建程序46
特别注意:
数据类型的转换47
数字转变成为字符串47
字符串转变为整形变量47
首先,感谢微软公司提供免费的VisualStudioC++Express中文版。
相关资源:
运行软件MicrosoftVisualC++ExpressEdtion
MicrosoftVisualC++ExpressEdtion界面
创建windows程序之带菜单的窗体
新建项目
选择Win32Win32项目
名称:
test1
位置:
G:
\test\Project1
解决方案test1
单击下一步
单击完成
进入的界面如下:
生成文件亦如下图所示:
头文件:
Resource.hstdafx.htargetver.htest1.h
源文件:
stdafx.cpptest1.cpp
资源文件:
small.icotest1.icotest1.rc
ReadMe.txt
(上述文件名:
test1与解决方案名相同)
重新生成解决方案,或者通过快捷键完成(Ctrl+Alt+F7)
如下图所示,表示编译没有出现错误。
开始执行程序(或者通过快捷键Ctrl+F5)
运行如下:
单击帮助—关于
弹出窗口如下。
单击文件—退出(退出执行的程序)
同时,您也可以通过在G:
\test\Project1\test1\Debug下运行。
双击test1.exe执行生成的程序。
下面做的是如何对程序做简单的修改,甚至是颠覆性的修改!
循序而渐进!
!
可以通过双击头文件(.h为后缀),源文件(.cpp为后缀),ReadMe.txt文件进行相应的修改工作,如何修改下面章节进行论述。
当您逐项进行双击后,可以看到文件的内容,如下所示,您可以切换不同的文件进行相应的编辑修改工作。
如果,您对代码修改不在行,甚至一无所知,请不要做任何修改,下面章节中将有详细的阐述。
对于资源文件(.ico后缀,.rc后缀),却是不同的。
双击.ico后缀的文件,会调用画图板打开该文件(实际是一个图),但是,用画图板打开后,修改是不能进行保存的,所以这里暂时不做任何改动。
当您双击.rc后缀的文件时,您会发现,速成版并不支持资源的编辑。
下图是,双击test1.rc后,出现的视图。
不过可以通过右键菜单的查看代码,对test1.rc进行编辑。
现在从文件的角度,看一下,通过上述这样的步骤,VisualStudioC++2008Express为我们生成了一些什么文件。
如上,我们已经设计了一个程序,不过代码是系统所生成的,我们只是轻点了几下鼠标而已。
究竟,生成的过程,我们不做深究,权且当作一个黑箱。
不关注他的执行过程,也不关注生成了什么文件或者代码。
下图是运行test1.exe产生的界面:
简要分析一下其特征:
标题:
test1
菜单:
文件,帮助
“文件”下有“退出”
“帮助”下有“关于”
如何对上述的特征进行修改或者增减呢?
比如:
把“文件”修改为“编辑”,
在“退出”前增加“打开对话框”,
增加一个新的菜单“窗口”
进行,这些修改,必须了解,这些特征与文件代码的对应关系。
打开test1.rc(通过右键,查看代码的方式实现),如下图所示。
由于速成班不支持资源文件的编辑,这里对资源文件分析一二
我们看到,
//菜单
//
IDC_TEST1MENU
BEGIN
POPUP"文件(&F)"
BEGIN
MENUITEM"退出(&X)",IDM_EXIT
END
POPUP"帮助(&H)"
BEGIN
MENUITEM"关于(&A)...",IDM_ABOUT
END
END
初步判断,"文件(&F)"就是窗口中的菜单中所示的文件。
修改一个项目
我们改"文件(&F)"为"文件修改(&F)"
保存(单击全部保存)—》生成解决方案(Ctrl+Alt+F7)开始执行(Ctrl+F5)
单击全部保存。
生成解决方案(Ctrl+Alt+F7)
开始执行(Ctrl+F5)
进行跟踪验证
执行结果,与我们所期望的是一致的!
观察test1.rc中的代码段:
IDC_TEST1MENU
BEGIN
POPUP"文件修改(&F)"
BEGIN
MENUITEM"新增1(&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
大胆的增加菜单的项目
进行如上更改后,编译并运行后,果然在输出结果上增加了一个菜单项。
通过上面的修改,举一反三,可以建造复杂的菜单系统了。
可是,单击,这些菜单选项,程序不会完成任何操作,除了,“退出”“关于”能够完成退出操作和打开一个对话框的操作除外。
菜单是如何被触发的呢?
下面,我们关注一下,如何通过菜单来触发程序的执行?
首先,关注一下“关于”,因为单击它,可以弹出一个对话框?
比退出更有挑战性一些!
跟踪研究IDM_ABOUT?
IDM_ABOUT是什么?
他和弹出对话框有什么关系呢?
IDM_ABOUT的声明在哪里?
我们选择IDM_ABOUT,右键,转到声明。
系统自动转到Resource.h中对IDM_ABOUT声明项。
IDM_ABOUT是一个数字!
#defineIDM_ABOUT104
选择IDM_ABOUT,右键,选择查找所有引用
双击查找符号结果的蓝色显示项即:
test1.cpp(148):
caseIDM_ABOUT:
双击后,显示出,IDM_ABOUT在test1.cpp中的位置。
IDM_ABOUT:
在test1.cpp中只有1次被检索出,所以该句后面的语句就是显示对话框的指令了。
//分析菜单选择:
switch(wmId)
{
caseIDM_ABOUT:
DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
break;
caseIDM_EXIT:
IDM_ABOUT在Resource.h中被定义为104了,#defineIDM_ABOUT104
所以IDM_ABOUT即是104的一个代号,
//分析菜单选择:
switch(wmId)
{
case104:
DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
break;
caseIDM_EXIT:
程序中的IDM_ABOUT修改为104,编译和执行是没有区别的。
IDM_ABOUT只是一个便于记忆的符号变量,
同样,在test1.rc中的代码
//菜单
//
IDC_TEST1MENU
BEGIN
POPUP"文件修改(&F)"
BEGIN
MENUITEM"新增(&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_ABOUTBOXDIALOGEX0,0,170,62
上面的数字表示的对话框的尺寸,可以尽心手动修改,以符合自己的需求。
数字依次表示:
左下角(水平,垂直),右上角(水平,垂直)
test1.cpp代码内容如下:
//test1.cpp:
定义应用程序的入口点。
//
#include"stdafx.h"
#include"test1.h"
#defineMAX_LOADSTRING100
//全局变量:
HINSTANCEhInst;//当前实例
//关于HINSTANCE,在WinDef.h中定义为:
DECLARE_HANDLE(HINSTANCE);
//关于DECLARE_HANDLE(HINSTANCE),在WinNT.h中定义为:
#defineDECLARE_HANDLE(name)structname##__{intunused;};typedefstructname##__*name
//关于HINSTANCE,在WinDef.h中定义为:
typedefHINSTANCEHMODULE;
TCHARszTitle[MAX_LOADSTRING];//标题栏文本
TCHARszWindowClass[M