按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
…………………………………………………………Page 774……………………………………………………………
第篇 深入 MFC 程式設計
m_wndSplitter2。CreateView(1; 0; RUNTIME_CLASS(CCurveView);
CSize(0; 0); pContext);
return TRUE;
}
这会产生如下的分裂窗口:
1 m_wndSplitter1。CreateStatic(this; 1; 2)
产生静态分裂窗口,横列为1 纵行为2 。
m_wndSplitter1。CreateView(0; 0; ;CSize(300;0)。。。)
2 产生第一个窗口(标号0;0)
m_wndSplitter2。CreateStatic(&m_wndSplitter1; 2; 1; 3
m_wndSplitter1。IdFromRowCol(0; 1)。。。)
产生静态分裂窗口,横列为2 纵行为1。位在第一个分裂窗口的(0;1)窗口
m_wndSplitter2。CreateView(0; 0; ;CSize(0;150)。。。)
4
产生第二个分裂窗口的第一个窗口(标号0;0)
m_wndSplitter2。CreateView(1; 0; ;CSize(0;0)。。。)
5
产生第二个分裂窗口的第二个窗口(标号1;0)
窗口 (0;1)
Splitter 窗口 (0;0) 窗口 (0;0)
窗口
150
初 始 高度
剩余高度
窗口 (1;0)
300 剩余宽度
Splitter 窗口初始宽度
第二个分裂窗口的ID 起始值可由第一个分裂窗口的窗口之一获知(利用IdFromRowCol
成员函数),一如上述程序代码中的动作。
剩下的问题,就是如何设计许多个View 类别了。
712
…………………………………………………………Page 775……………………………………………………………
第 13 章 多重文件與多重顯示
Graph 范例程序
Graph 是一个具备静态三叉分裂能力的程序。左侧窗口以文字方式显示10 笔整数资料,
右上侧窗口显示该10 笔数据的长条图,右下侧窗口显示对应的曲线图。
进行至这一章,相信各位对于工具的基本操作技术都已经都熟练了,这里我只列出Graph
程序的制作大纲:
进入AppWizard ,制造一个Graph 项目。采用预设的选项,但在第四步骤的
【Advanced 】对话框的【Windows Styles 】附页中,将【Use split window 】致能
(enabled )起来。并填写【Documents Template Strings 】附页如下:
最后,AppWizard 给我们这样一份清单:
713
…………………………………………………………Page 776……………………………………………………………
第篇 深入 MFC 程式設計
我们获得的主要类别整理如下:
类别 基础类别 文件
CGraphApp CWinApp GRAPH。CPP GRAPH。H
CMainFrame CMDIFrame Wnd MAINFRM。CPP MAINFRM。H
CChildFrame CMDIChild Wnd CHILDFRM。CPP CHILDFRM。H
CGraphDoc CDocument GRAPHDOC。CPP GRAPHDOC。H
CGraphView CView GRAPHVIEW。CPP GRAPHVIEW。H
进入整合环境的Resource View 窗口中, 选择IDR_GRAPHTYPE 菜单, 在
【Window 】之前加入一个【Graph Data】菜单,并添加三个项目,分别是:
714
…………………………………………………………Page 777……………………………………………………………
第 13 章 多重文件與多重顯示
菜单项目名称 识别码(ID ) 提示字符串
Graph Data&1 ID_GRAPH_DATA1 〃Graph Data 1〃
Graph Data&2 ID_GRAPH_DATA2 〃Graph Data 2〃
Graph Data&3 ID_GRAPH_DATA3 〃Graph Data 3〃
于是GRAPH。RC 的菜单资源改变如下:
IDR_GRAPHTYPE MENU PRELOAD DISCARDABLE
BEGIN
。。。
POPUP 〃&Graph Data〃
BEGIN
MENUITEM 〃Data&1〃; ID_GRAPH_DATA1
MENUITEM 〃Data&2〃; ID_GRAPH_DATA2
MENUITEM 〃Data&3〃; ID_GRAPH_DATA3
END
。。。
END
回到整合环境的Resource View 窗口,选择IDR_MAINFRAME 工具栏,增加三
个按钮,放在Help 按钮之后,并使用工具箱上的Draws Text 功能,为三个
按钮分别涂上1; 2; 3 画面:
这三个按钮的IDs 采用先前新增的三个菜单项目的IDs
于是,GRAPH。RC 的工具栏资源改变如下:
IDR_MAINFRAME TOOLBAR DISCARDABLE 16; 15
。
BEGIN
。。。
BUTTON ID_FILE_PRINT
BUTTON ID_APP_ABOUT
BUTTON ID_GRAPH_DATA1
BUTTON ID_GRAPH_DATA2
BUTTON ID_GRAPH_DATA3
END
715
…………………………………………………………Page 778……………………………………………………………
第篇 深入 MFC 程式設計
进入ClassWizard,为新增的这些UI 对象制作Message Map 。由于这些命令
项会影响到我们的Document 内容(当使用者按下Data1 ,我们必须为他准备
一份相关资料;按下Data2 ,我们必须再为他准备一份相关资料),所以在
CGraphDoc 中处理这些命令消息甚为合适:
UI 对象 Messages 消息处理例程
ID_GRAPH_DATA1 MAND OnGraphData1
UPDA TE_MAND_ UI On Updat eGraphData1
ID_GRAPH_DATA2 MAND OnGraphData2
UPDA TE_MAND_ UI On Updat eGraphData2
ID_GRAPH_DATA3 MAND OnGraphData3
UPDA TE_MAND_ UI On Updat eGraphData3
源代码改变如下:
// in GRAPHDOC。H
class CGraphDoc : public CDocument
{
。。。
// Generated message map functions
protected:
//{{AFX_MSG(CGraphDoc)
afx_msg void OnGraphData1();
afx_msg void OnGraphData2();
afx_msg void OnGraphData3();
afx_msg void OnUpdateGraphData1(CCmdUI* pCmdUI);
afx_msg void OnUpdateGraphData2(CCmdUI* pCmdUI);
afx_msg void OnUpdateGraphData3(CCmdUI* pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// in GRAPHDOC。CPP
BEGIN_MESSAGE_MAP(CGraphDoc; CDocument)