基于MFC的视图框架的UI设计.doc
文本预览下载声明
基于MFC的文档/视图框架的 UI 设计
一.创建一个简单功能的SDI应用程序
使用Application Wizard创建一个MFC应用程序项目,该项目名为:MyMulitView。
点击确定,在弹出的“MFC应用程序向导”项目创建信息配置窗口中,仅将“应用程序类型”选择为“单文档”,其他所有配置项使用默认值。
最终,系统为我们创建一个MFC SDI应用程序。该应用程序中定义了如下图所示的类:
CMainFrame 框架窗口类,派生于CFrameWnd类; CMyMulitViewApp 应用程序类,派生于CWinApp类; CMyMulitViewDoc 文档类,派生于CDocument类; CMyMulitViewView 视图类,派生于CView类; CAboutDlg 对话框资源对应的类,派生于CDialog 以上的5个类中,最重要的是CMyMulitViewApp和CMainFrame这两个类。前者为我们调用winmain入口函数,并使用InitInstance虚函数来完成所有主框架被显示之前的初始化工作。后者则囊括了所有窗口界面元素,并实现用户通过这些界面元素产生的消息与其处理程序联系的重要工作。
在不做任何工作的前提下,运行本工程,得到的运行结果如下图所示:
虽然我们什么都没做,但是这个运行出来的程序所具有的功能还是相当丰富的。我们所要做的就是在此基础之上添加自定义代码,来丰富其功能,达到自己的目的。
下面,我们一步一步的来添加相应代码,来为这个应用程序实现一个简单绘图功能,并具有打开已存在文档和保存文档的功能。
打开本项目的资源文件,为菜单资源中添加一个名为“颜色”的栏目,并在其下添加3个子菜单项:
菜单名 资源ID RED ID_RED YELLOW ID_YELLOW GREEN ID_GREEN
在MyMulitViewDoc.h文件中添加:
#define ARRAY_UNIT_NUM 16 以上宏用来作为保存颜色二维数组每一维的长度值
protected:
COLORREF m_clrCurrentColor;
COLORREF m_clrGrid[ARRAY_UNIT_NUM][ARRAY_UNIT_NUM]; 定义两个成员数据,前者用来保存当前填充的颜色值,后者用来保存绘制出的网格中各个方块的颜色值。
public:
void SetSquare (int i, int j, COLORREF color);
COLORREF GetSquare (int i, int j);
COLORREF GetCurrentColor();
函数 说明 SetSquare 设置(i,j)的方块颜色为color指定的值 GetSquare 获取(i,j)的方块的颜色 GetCurrentColor 获取当前用于填充的颜色
在MyMulitViewDoc.cpp文件中添加:
在OnNewDocument()中添加如下代码:
for (int i=0; iARRAY_UNIT_NUM; i++)
for (int j=0; jARRAY_UNIT_NUM; j++)
m_clrGrid[i][j] = RGB (255, 255, 255);
m_clrCurrentColor = RGB (255, 0, 0);
完成Serialize(CArchive ar)函数
if (ar.IsStoring())
{
for (int i=0; iARRAY_UNIT_NUM; i++)
for (int j=0; jARRAY_UNIT_NUM; j++)
ar m_clrGrid[i][j];
ar m_clrCurrentColor;
}
else
{
for (int i=0; iARRAY_UNIT_NUM; i++)
for (int j=0; jARRAY_UNIT_NUM; j++)
ar m_clrGrid[i][j];
ar m_clrCurrentColor;
}
完成前面声明的3个成员函数的定义:
COLORREF CMyMulitViewDoc::GetCurrentColor()
{
return m_clrCurrentColor;
} COLORREF CMyMulitViewDoc::GetSquare(int i, int j)
{
ASSERT (i = 0 i = ARRAY_UNIT_NUM-1 j = 0 j = ARRAY_UNIT_NUM-1);
return m_clrGrid[i][j];
显示全部