按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
#0025 DECLARE_DYNCREATE(CScribbleDoc)
#0026 virtual void Serialize(CArchive& ar);
#0027 DECLARE_MESSAGE_MAP()
#0028 };
#0029
#0030 class CScribbleView : public CView
#0031 {
#0032 DECLARE_DYNCREATE(CScribbleView)
#0033 CScribbleDoc* GetDocument();
#0034
#0035 virtual void OnDraw(CDC* pDC);
#0036 DECLARE_MESSAGE_MAP() // MFC 內部
#0037 };
Int AfxAPI AfxWinMain(!K)
#0038
{
#0039 class CAboutDlg : public CDialog
CWinApp* pApp = AfxGetApp();
#0040 {
AfxWinInit(!K);
#0041 DECLARE_MESSAGE_MAP()
pApp…》InitApplication();
#0042 };
#0043 pApp…》InitInstance();
nReturnCode = pApp…》Run();
#0044 //………………………………………………………………………………………………………………………………………………………………………………
#0045
}
#0046 CScribbleApp theApp;
#0047
#0048 BEGIN_MESSAGE_MAP(CScribbleApp; CWinApp)
#0049 ON_MAND(ID_APP_ABOUT; OnAppAbout)
#0050 ON_MAND(ID_FILE_NEW; CWinApp::OnFileNew)
#0051 ON_MAND(ID_FILE_OPEN; CWinApp::OnFileOpen)
#0052 ON_MAND(ID_FILE_PRINT_SETUP; CWinApp::OnFilePrintSetup)
#0053 END_MESSAGE_MAP()
#0054
#0055 BOOL CScribbleApp::InitInstance()
#0056 {
#0057 。。。
#0058 CMultiDocTemplate* pDocTemplate;
#0059 pDocTemplate = new CMultiDocTemplate(
#0060 IDR_SCRIBTYPE;
#0061 RUNTIME_CLASS(CScribbleDoc);
#0062 RUNTIME_CLASS(CChildFrame);
#0063 RUNTIME_CLASS(CScribbleView));
#0064 AddDocTemplate(pDocTemplate);
426
…………………………………………………………Page 489……………………………………………………………
第7章 簡單而完整:MFC 骨幹程式
#0065
#0066 CMainFrame* pMainFrame = new CMainFrame;
#0067 pMainFrame…》LoadFrame(IDR_MAINFRAME);
#0068 m_pMainWnd = pMainFrame;
#0069 ! K // MFC 內部
#0070 pMainFrame…》ShowWindow(m_nCmdShow); CFrameWnd::Create
#0071 pMainFrame…》UpdateWindow();
#0072 return TRUE;
#0073 } CWnd::CreateEx
#0074
#0075 BEGIN_MESSAGE_MAP(CAboutDlg; CDialog)
::CreateWindowEx
#0076 END_MESSAGE_MAP()
#0077
#0078 void CScribbleApp::OnAppAbout()
#0079 {
#0080 CAboutDlg aboutDlg;
#0081 aboutDlg。DoModal();
#0082 }
#0083
#0084 IMPLEMENT_DYNAMIC(CMainFrame; CMDIFrameWnd)
WM_CREATE
#0085
#0086 BEGIN_MESSAGE_MAP(CMainFrame; CMDIFrameWnd) wm_cre
#0087 ON_WM_CREATE()
#0088 END_MESSAGE_MAP()
#0089
#0090 static UINT indicators'' =
#0091 {
#0092 ID_SEPARATOR;
#0093 ID_INDICATOR_CAPS;
#0094 ID_INDICATOR_NUM;
#0095 ID_INDICATOR_SCRL;
#0096 };
#0097
#0098 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
#0099 {
#0100 m_wndToolBar。Create(this);
#0101 m_wndToolBar。LoadToolBar(IDR_MAINFRAME);
#0102 m_wndStatusBar。Create(this);
#0103 m_wndStatusBar。SetIndicators(indicators;
#0104 sizeof(indicators)/sizeof(UINT));
#0105
#0106 m_wndToolBar。SetBarStyle(m_wndToolBar。GetBarStyle() |
#0107 CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
#0108
#0109 m_wndToolBar。EnableDocking(CBRS_ALIGN_ANY);
427
…………………………………………………………Page 490……………………………………………………………
第篇 湷觥 FC 程式設計
#0110 EnableDocking(CBRS_ALIGN_ANY);
#0111 DockControlBar(&m_wndToolBar);
#0112 return 0;
#0113 }
#0114
#0115 IMPLEMENT_DYNCREATE(CChildFrame; CMDIChildWnd)
#0116
#0117 BEGIN_MESSAGE_MAP(CChildFrame; CMDIChildWnd)
#0118 END_MESSAGE_MAP()
#0119
#0120 IMPLEMENT_DYNCREATE(CScribbleDoc; CDocument)
#0121
#0122 BEGIN_MESSAGE_MAP(CScribbleDoc; CDocument)
#0123 END_MESSAGE_MAP()
#0124
#0125 void CScribbleDoc::Serialize(CArchive& ar)
#0126 {
#0127 if (ar。IsStoring())
#0128 {
#0129 // TODO: add storing code here
#0130 }
#0131 else
#0132 {
#0133 // TODO: add loading code here
#0134 }
#0135 }
#0136
#0137 IMPLEMENT_DYNCREATE(CScribbleView; CView)
#0138
#0139 BEGIN_MESSAGE_MAP(CScribbleView; CView)
#0140 ON_MAND(ID_FILE_PRINT; CView::OnFilePrint)
#0141 ON_MAND(ID_FILE_PRINT_DIRECT; CView::OnFilePrint)
#0142 ON_MAND(ID_FILE_PRINT_PREVIEW; CView::OnFilePrintPreview)
#0143 END_MESSAGE_MAP()
#0144
#0145 void CScribbleView::OnDraw(CDC* pDC)
#0146 {
#0147 CScribbleDoc* pDoc = GetDocument();
#0148 // TODO: add draw code for native data here
#0149 }
图7…6 Scribble step0 执行时序。这是一张简图,有一些次要动作 ( 例如鼠
标拉曳功能、设定对话框底色) 并未列出, 但是在稍后的细部讨论中
会提到。
428
…………………………………………………………Page 491……………………………………………………………
第7章 簡單而完整:MFC 骨幹程式
以下是图7…6 程序流程之说明:
~ 动作与流程和前一章的Hello 程序如出一辙。
我们改写InitInstance 这个虚拟函数。
new 一个CMultiDocTemplate 对象,此对象规划Document 、View 以及Document
Frame 窗口三者之关系。
new 一个CMyMDIFrameWnd 对象,做为主窗口对象。
调用LoadFrame,产生主窗口并加挂菜单等诸元,并指定窗口标题、文件标题、文
件档扩展名等(关键在IDR_MAINFRAME 常数)。LoadFrame 内部将调用Create,后
者将调用CreateWindowEx,于是触发WM_CREATE 消息。
由于我们曾于CMainFrame 之中拦截WM_CREATE (利用ON_WM_CREATE 宏),
所以WM_CREATE 产生之际Framework 会调用OnCreate。我们在此为主窗口挂上工具
列和状态列。
回到InitInstance ,执行ShowWindow 显示窗口。