【MFC Windows程式設計(第二版)】第一章代碼注釋。

來源:互聯網
上載者:User
/*CMyApp繼承了CWinApp類,因此它就是應用程式物件。CWinApp類提供訊息迴圈和調度。一個MFC應用程式可以有且僅有一個應用程式物件。此對象必須在全域聲明內有效。*/class CMyApp:public CWinApp{public:virtual BOOL InitInstance();/* 上面這個函數是從CWinApp覆蓋的,CWinApp本身具有這個函數,我們的類在此繼承了這個函數 */};class CMainWindow: public CFrameWnd{public:CMainWindow();protected:afx_msg void OnPaint();DECLARE_MESSAGE_MAP ();};

Hello.h ↑

Hello.cpp↓:

#include <afxwin.h>#include "Hello.h"CMyApp myApp;//看到了麼,結合標頭檔的注釋/*myApp就是CMyApp的執行個體,而這個執行個體必須是全域範圍內有效,因此我們聲明其為全域變數。*/BOOL CMyApp::InitInstance(){/* 這個函數就是剛才提到的,從CWinApp繼承過來的函數的具體實現。虛函數(Virtual function)。請注意!這個函數是CWinApp自身擁有的,由於繼承關係,CMyApp才有了這個函數。這個函數的調用非常之早,是在應用程式開始之後而視窗被建立之前,可以看到,下面的操作全是視窗操作。Pdf 16,Page 35/1187事實上,除非InitInstance建立一個視窗,否則應用程式是不會建立視窗的。這就是為什麼就算是最小的MFC應用程式也必須從CWinApp類派生出一個類並覆蓋CWinApp::InitInstance()這個函數。在CWinApp(不是這裡的CMyApp!)中,InitInstance是一個虛函數。只有一句return TRUE。這個函數的目的是給應用程式一個初始化的機會。由該函數返回的值決定了應用程式架構的下一步動作。如果該函數返回FALSE,那麼應用程式將被關閉。如果初始化正常,那麼就返回TRUE,應用程式將繼續執行。這個函數是執行初始化的地方。在這裡,這個工作就是建立一個視窗。*/m_pMainWnd = new CMainWindow;/*這裡,執行個體化CMainWindow類來建立一個視窗。這裡建立了一個CMainWindow對象將其地址複製到了應用程式物件的m_pMainWnd資料成員裡面。在視窗建立之後,InitInstance就會通過CMainWindow指標調用ShowWindow和UpdateWindow來顯示它。*///m_pMainWnd->ShowWindow(argument lists....);//m_pMainWnd->UpdateWindow(argument lists....);/*ShowWindow和UpdateWindow是所有視窗對象共用的CWnd成員函數。其中就包括了CFrameWnd,而CMainWindow就是從CFrameWnd派生出來的。這些函數幾乎就是對同名API函數的封裝。*//*如果你想在MFC應用程式中調用一個WIN API函數,那麼需要在函數名稱前面加一個“::”標示符。比如::UpdateWindow(argument lists...)這個是保證即便對象有同名的函數,也可以調用API函數。其他代碼中的調用都是這麼寫的。*//*ShowWindow只接受一個參數,用來表示視窗顯示的情況,是最大化,還是最小化還是怎麼樣。這裡直接傳遞m_nCmdShow是根據Windows App設計協議中的規定這裡的m_nCmdShow通常是SW_SHOWNORMAL來做的。*/m_pMainWnd->ShowWindow(m_nCmdShow);/*  UpdateWindow是來重繪視窗完成ShowWindow的啟動作業的。*/m_pMainWnd->UpdateWindow();/* 完成後,InitInstance返回TRUE讓應用程式繼續執行。*/return TRUE;}BEGIN_MESSAGE_MAP (CMainWindow,CFrameWnd)ON_WM_PAINT()END_MESSAGE_MAP()CMainWindow::CMainWindow(){/* 在這裡,架構視窗建立了一個視窗對象。其方法就是通過調用Create函數。 _T這個函數負責將字串轉化為中性。Create是CFrameWnd繼承來的一個CMainWindow成員函數。 在CFrameWnd中,由它自己定義的和從CWnd繼承來的函數大約有20個。Create就是其中之一。CFrameWnd::Create的原型參見書中P19。*/Create(NULL,_T("The Hello Application"));};/* 這個函數負責響應WM_PAINT訊息。具體參見P21*/void CMainWindow::OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect);dc.DrawText(_T("Hello,MFC"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.