55. 1 Windows编程基础在窗口函数WndProc()的消息处理分支switch-case结构中添加WM_LBUTTONDOWN鼠标单击消息及其处理代码:
case WM_LBUTTONDOWN:
MessageBox(NULL, "You pressed the
left button of mouse !","Message",NULL);
break; 在窗口函数WndProc()的switch消息处理分支中添加键盘消息的处理代码:
case WM_KEYDOWN: // 处理键盘消息
if(wParam==0x41) // A或a键的虚键码为0x41H
MessageBox(NULL, "The key you pressed is A
or a !","KEYDOWN",NULL);
else MessageBox(NULL, "The key you pressed
is not A or a !","KEYDOWN",NULL);
break;
64. Single document:单文档界面应用程序,程序运行后出现标准的Windows界面,它由框架(包括菜单栏、工具栏和状态栏)和用户区组成。并且程序运行后一次只能打开一个文档,如Windows自带的记事本Notepad。
Multiple documents:多文档界面应用程序,程序运行后出现标准的Windows界面,并且可以同时打开多个文档,如Word。
Dialog based:基于对话框的应用程序,程序运行后首先出现一个对话框界面,如计算器Calculator。MFC AppWizard[exe]创建应用程序的类型:2 创建VC应用程序框架
65. None:向导创建的应用程序不包括对数据库的操作功能,但以后可以手工添加对数据库的操作代码(默认项)。
Header files only:提供了最简单的数据库支持,仅在项目的stdAfx.h文件中使用#include指令包含afxdb.h和afxdao.h两个用于定义数据库类的头文件,但并不生成与数据库相关的类,用户需要时可以自己生成。
Database view without file support:包含了所有的数据库头文件,并生成了相关的数据库类和视图类,但不支持文档的序列化,向导创建的应用程序的File主菜单中将不包含有关文件操作的菜单命令项。
Database view with file support:包含了所有的数据库头文件,生成了相关的数据库类和视图类,支持文档的序列化。在MFC AppWizard-Step 2 of 6选择应用程序所支持的数据库方式,包括以下选项:2 创建VC应用程序框架
66. 2 创建VC应用程序框架
67. None:应用程序不支持任何复合文档(默认项)。
Container:应用程序作为复合文档容器,能容纳所嵌入或链接的复合文档对象。
Mini-server:微型复合文档服务器,应用程序可以创建和管理复合文档对象,但对于它所创建的复合文档对象,集成应用程序可以嵌入,但不能链接。微型服务器不能作为一个单独的程序运行,而只能由集成应用程序来启动。
Full-server:完全复合文档服务器,除了具备上面微型服务器的功能外,应用程序支持链接式对象,并可作为一个单独的程序运行。
Both container and server:应用程序既可作为一个复合文档容器,又可作为一个可单独运行的复合文档服务器。在MFC AppWizard-Step 3 of 6选择应用程序所支持的数据库方式复合文档类型,包括以下选项:2 创建VC应用程序框架
68. 2 创建VC应用程序框架
69. Docking toolbar:应用程序具有标准的工具栏(默认项)
Initial status bar:应用程序具有标准的状态栏(默认项)
Printing and print preview:应用程序支持打印和打印预览功能(默认项)
Context-sensitive Help:应用程序具有上下文相关帮助功能
3D controls:应用程序界面具有三维外观(默认项)
Normal:应用程序采用传统风格的工具栏(默认项)
Internet Explorer ReBars:应用程序采用IE风格的工具栏
How many files would you like on your recent file list: 在File主菜单可列出文档的最多个数。
Advanced按钮:进行更高一级的设置,如修改文件名或扩展名,调整程序用户界面窗口的样式(边框厚度和最小化、最大化、关闭按钮)。在MFC AppWizard-Step 4 of 6设置应用程序界面特征(工具栏和状态栏),包括以下选项:2 创建VC应用程序框架
70. 2 创建VC应用程序框架
71. MFC Standard:应用程序采用MFC标准风格(默认项)
Windows Explorer:应用程序采用Windows资源管理器 风格
选择向导是否为源代码生成注释
设置MFC库与应用程序的链接方式:
(1) As a shared DLL:采用共享动态链接库的方式(默认项) ,即在程序运行时才调用MFC库。采用此方式可减少应用程序的代码长度。
(2) As a statically linked library:采用静态链接库的方式,即在编译时把MFC库与应用程序相链接。采用此方式能提高运行速度,且不用考虑程序最终运行环境中是否安装了MFC库。在MFC AppWizard-Step 5 of 6设置项目的风格,包括以下选项:2 创建VC应用程序框架
221. 6.1.3 对话框数据交换DDX和验证DDV在对话框中实现用户数据输入和输出的一般方法是通过ClassWizard类向导将对话框控件与成员变量相关联,利用对话框数据交换DDX(Dialog Data Exchange)和验证DDV(Dialog Data Validation)机制实现数据的输入和输出。
当利用ClassWizard类向导添加成员变量时,用户如果在窗口的左下角输入数据的范围,ClassWizard将自动加入函数DDV的调用代码。
242. Class name下拉框:选择要添加成员变量的对话 框类;
Control IDs栏:选择控件,因为要添加的成员变量总是与一个对话框控件ID联系在一起,它们代表控件对象本身或控件的某项属性;
Add Variable按钮:添加与控件关联的成员变量;
Delete Variable按钮:删除控件的某个成员变量。
Control IDs栏:列出对话框资源上已有的控件,第1列Control IDs表示控件的ID,第2列Type表示变量的类型,第3列Member表示成员变量名。在Member Variables页面:
243. Add Member Variable对话框Member variable name框:输入成员变量名;
Category下拉框:选择成员变量的类别,可为Control或 Value;
Variable type下拉框:选择成员变量的类型。
287. 1.执行“File|New”菜单命令,在New对话框的Project页面中选择Win32 Application项目类型,输入程序名Hello。在向导第1步选择“A typital “Hello world!” application”项,单击Finish按钮。
2.在窗口函数WndProc()的消息处理分支switch-case结构中添加WM_LBUTTONDOWN鼠标单击消息及其处理代码:
case WM_LBUTTONDOWN:
MessageBox(NULL, "You pressed the
left button of mouse !","Message",NULL);
break;
295. 例 为程序Hello添加键盘消息处理功能,判断当前按下的键是不是A或a键,并给出相应的提示。 打开程序项目Hello,在文件Hello.cpp的窗口函数WndProc()的switch消息处理分支中添加键盘消息的处理代码:
case WM_KEYDOWN: // 处理键盘消息
if(wParam==0x41) // A或a键的虚键码为0x41H
MessageBox(NULL, "The key you pressed is A
or a !","KEYDOWN",NULL);
else MessageBox(NULL, "The key you pressed
is not A or a !","KEYDOWN",NULL);
break;
321. 运行时类型识别RTTI(Run Time Type Information)是指在程序运行时允许确定对象的类型。MFC扩充了一般C++中运行时类型识别的功能,当一个类支持MFC的运行时类型识别时,它允许程序获取对象的信息(如类名、所占存储空间大小及版本号等)和基类信息。
1. 宏RUNTIME_CLASS(class_name):
返回参数class_name所指定类的静态成员变量class##class_name的指针,该指针指向一个CRuntimeClass结构。7.5.1 有关运行时类型识别的宏
323. // 在头文件MyClass.h中
class CMyClass : public CObject
{
DECLARE_DYNAMIC(CMyClass)
public:
void SomeFunction(void);
}; 例 定义类MyClass,使用RUNTIME_CLASS()宏的基本对象诊断功能。
324. // 在实现文件MyClass.cpp中
#include "MyClass.h"
IMPLEMENT_DYNAMIC(CMyClass, CObject)
void CMyClass::SomeFunction(void)
{
CObject* pObject=new CMyClass;
if(pObject->IsKindOf(RUNTIME_CLASS(CMyClass)))
{
CMyClass* pMyObject=(CMyClass*) pObject;
AfxMessageBox("MyObject is an object of
the class CMyClass");
}
else AfxMessageBox("MyObject is not an object of
the class CMyClass");
delete pObject;
}
393. TrueType字体正成为真正的主流,这种字体能够以一种非常出色的字体技术绘制文本。TrueType字体能够缩放为任何大小的字体,而不会降低图形的质量。Windows中提供的TrueType字体主要有Arial、Courier、Symbol、Time New Roman等,可以通过Windows“控制面板|字体”浏览系统已安装的字体。
输出文本时,默认情况下使用系统提供的缺省字体,如果需要可以改变显示文本的字体。与画笔和画刷一样,字体也是一种GDI对象,MFC类CFont对GDI字体对象进行了封装,我们一般利用CFont类创建自己的字体(GDI对象),然后把创建的字体选入设备环境,以用于在设备环境中绘制文本。