更新时间:2015-06-26 19:20:27浏览次数:1+次
创建基于对话框的过程,创建项目过程简单的描述就是:文件->新建->项目->MFC应用程序->确定->下一步->选择基于对话框->完成。
然后VS自动将项目创建完毕,我使用的项目名称是cjjjs(C++技术)。
创建的项目文件列表如下:
头文件中,都是各个类的声明的头文件的集合。
源文件中,则是各个类的实现文件。
资源文件中,则是各种资源,如rc资源文件、图片等文件所在的地方。此处只是归类显示在这里,实际所有文件都是在一个文件夹中。
切换到【类视图】标签,则是显示项目中所有的类。这是以类的形式展现,而与文件无关。默认创建完的就是三个类。类视图如下图所示:
第一个是CAboutDlg是每个项目都是自动创建的关于对话框,用于显示项目的版本信息的一个对话框。很简单的对话框,和消息对话框一样。
第二个就是CcjjjsApp,这个是应用程序类。应用程序的启动执行,就是这个类来实现的。稍后会具体介绍。
第三个是CcjjjsDlg,这个类则是程序的主对话框窗口。窗口上可以放置各种控件。稍后会具体介绍。
然后切换到资源视图标签。VS会将RC资源文件以资源视图形式展现出来,而不是文本格式显示出来。这样便于管理操作。资源视图如下:
资源视图中的Dialog表示的是对话框资源.程序中出现的对话框,基本都会出现在这里.这里就是关于对话框IDD_ABOUTBOX和主对话框IDD_CJJJS_DIALOG.显示的是两个对话框的ID号。通过这个ID号就可以确定对话框资源了。当然,其他资源也是通过他们的ID号来使用资源的。
Icon中,则是存放图标的资源,其实就是一个ico格式的图片。IDR_MAINFRAME就是程序默认的图标了。
String Table则是字符串表,存储程序要用到的各种字符串,集中起来管理,程序中通过函数动态加载。在实现多语言版本时,只需要改这里就行了,而不需要更改源代码。
Version则是存储程序版本信息的相关的键值对。
以上是整体的基本介绍。下面来具体说说对话框类的各个的作用和详细解释。
在类视图中,双击类名,即可转入类的头文件即类的声明的位置。双击CAboutDlg类名,跳转到了cjjjsDlg.cpp文件,这个文件是CcjjjsDlg类的源文件。不过因为关于对话框类太小了,就集中到主对话框类CcjjjsDlg中来实现了。仅此而已。关于对话框的类的声明和实现都是在这里完成的。对关于对话框类的解释就不在这里说了,我们在主对话框类的解释中,自然会涵盖类的说明。
双击CcjjjsDlg类,进入这个类的头文件,看到类的声明如下:
#pragma once // - 防止被包含多次,与#ifndef方式效果一样
// CcjjjsDlg 对话框
class CcjjjsDlg : public CDialog// - 继承于CDialog
{
// 构造
public:
CcjjjsDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_CJJJS_DIALOG };// - 与对话框资源关联
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon; // - 程序中使用的图标的句柄
// 生成的消息映射函数
virtual BOOL OnInitDialog();// - 初始化对话框时要调用的函数
/* - 下面是处理系统命令的函数 - */
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();// - 窗口绘制消息处理函数
afx_msg HCURSOR OnQueryDragIcon();// - 处理窗口中拖拽文件
DECLARE_MESSAGE_MAP()// - 消息映射宏声明
};
BEGIN_MESSAGE_MAP(CcjjjsDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, &CcjjjsDlg::OnBnClickedOk)
END_MESSAGE_MAP()
消息映射就是将对窗口中的操作的消息与响应的函数关了的意思。而这些响应函数则在各个类中。在类的声明头文件中,以afx_msg开头修饰函数。相关资讯