首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

MFC/VC++ 綜合習題精解:從文檔視圖架構到對話框程式設計

     編輯:關於C++

一、簡答題

  1. 在文檔/視圖結構應用程式中,視圖類別物件如何獲取文檔類別物件中的資料?
    答:透過 GetDocument() 函式。
  2. 假設建立名為 MyPrj 的專案,利用 MFC AppWizard 產生文檔/視圖結構應用程式框架的 4 個 MFC 派生類別,簡述這四個類別名稱與功能。
    答:
    (1) CMyPrjApp 應用程式類別:應用程式起點,負責啟動。
    (2) CMyPrjFrame 框架視窗類別:應用程式框架視窗。
    (3) CMyPrjView 視圖類別:專門用來對應用程式資料進行顯示。
    (4) CMyPrjDoc 文檔類別:保存程式資料成員,管理程式資料。
  3. Windows 程式設計中,如何顯示與更新視窗?
    答:呼叫 Windows 系統函式 ShowWindow() 顯示視窗,UpdateWindow() 更新視窗。
  4. 說明下列句柄含義:
    (1) HWND:視窗句柄
    (2) HINSTANCE:目前應用程式實例句柄
    (3) HDC:裝置內容句柄
  5. Windows 應用程式主函式的 3 個主要任務?
    答:註冊視窗類別、建立應用程式視窗、建立訊息迴圈。
  6. 視窗類別 CFrameWnd 需封裝哪些成員?
    答:視窗句柄 hWnd、視窗類別屬性定義、視窗類別註冊、視窗建立與顯示更新視窗。
  7. 應用程式類別 CWinApp 應具備哪些主要功能?
    答:呼叫 InitInstance() 完成視窗設計、註冊、建立、顯示;呼叫 Run() 實現訊息迴圈。
  8. MFC 中 CDC 派生類別有哪些?說明其作用。
    答:
    (1) CPaintDC:WM_PAINT 訊息處理函式 OnDraw 中使用的用戶區裝置描述環境,僅能在視圖類別 OnDraw() 中使用。
    (2) CClientDC:用於除 WM_PAINT 以外的訊息處理函式,可在 OnDraw() 以外任何地方使用。
    (3) CWindowDC:提供整個視窗繪圖的裝置描述環境,代表整個視窗。
    (4) CMetaFileDC:代表 Windows 圖元檔案的裝置描述環境。
  9. CDC 中如何將自己建立的繪圖工具載入裝置描述環境?
    答:(原文未提供答案,通常使用 SelectObject() 選入筆刷、筆等 GDI 物件)
  10. 如何使用 CDC 類別提供的繪圖方法繪圖?
    答:直接使用 CDC 型別指標變數,呼叫繪圖函式進行繪圖。
  11. MFC 中應用程式介面有哪 3 種方式?
    答:單文檔 (SDI)、多文檔 (MDI)、對話框。
  12. 分別說明 SDI 與 MDI 介面程式。
    答:單文檔:任何時刻只能操作一個文檔。
    多文檔:使用者可同時操作多個檔案。
  13. 文檔類別成員函式 UpdateAllViews 作用?
    答:文檔對應多個視圖時,更新所有視圖,透過呼叫每個視圖類別 OnUpdate() 更新所有關聯視圖。
  14. 常用用戶區滑鼠訊息有哪些?(僅考慮左右鍵)
    答:WM_LBUTTONDBLCLK、WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDBLCLK、WM_RBUTTONDOWN、WM_RBUTTONUP。
  15. 使用者選中選單項會發出何種訊息?根據什麼判斷訊息來源?
    答:發出 WM_COMMAND 訊息。系統根據選單項識別 ID 判斷訊息來源。
  16. 為何 Windows 應用程式不直接使用鍵盤掃描碼而用虛擬碼?如何理解設備無關性?
    答:為方便程式設計,Windows 為每個按鍵提供與設備無關的編碼(虛擬碼),使用者可忽略掃描碼直接操作鍵盤。掃描碼是敲擊鍵盤時由介面產生的編碼,不同鍵盤可能不同,編寫程式不便。設備無關性基於通用性設計,程式不依賴具體硬體甚至軟體,應用於網路通訊等,給編寫程式帶來極大方便。
  17. MSG 結構第一個成員含義?
    答:HWND hwnd 表示訊息所屬視窗。Windows 程式用 HWND 型別變數標識視窗。
  18. MFC 中使用點陣圖資源步驟?
    答:準備 ICON 檔案,專案加入檔案,資源檔添加描述句。
    1) 載入點陣圖資源到點陣圖物件;
    2) 取得點陣圖資訊;
    3) 將點陣圖選入記憶體裝置環境;
    4) 顯示點陣圖。
  19. GetMessage() 何時返回 0 導致訊息迴圈終止?
    答:接收到 WM_QUIT 訊息時返回 0。
  20. WNDCLASSEX 結構各成員含義?
    答:cbSize 視窗大小、style 視窗樣式、lpfnWndProc 視窗函式指標、cbClsExtra 視窗類別附加位元組、cbWndExtra 視窗附加位元組、hInstance 應用程式實例句柄、hIcon 視窗圖示、hCursor 視窗游標、hbrBackground 視窗背景色、lpszMenuName 選單資源名、lpszClassName 視窗類別名、hIconSm 小圖示。
  21. 自訂訊息步驟?
    答:1) 定義訊息(建議 WM_USER+100 以上);2) 類別標頭檔 AFX_MSG 區塊宣告處理函式;3) 實現處理函式(參數 WPARAM/LPARAM,回傳 LRESULT);4) 類別訊息對應區塊用 ON_MESSAGE 巨集對應處理函式。
  22. 模態與非模態對話框區別?
    答:(1) 模態必須先處理才能處理父視窗,非模態不用。
    (2) 模態用 DoModal,非模態用 Create。
    (3) 模態銷毀用 EndDialog,非模態用 DestroyWindow。

二、編寫程式(編程題已打包上傳,點擊下載)

1. 使用 CDC::TextOut 在 (100,100) 輸出 "Hello World"。
2. 單文檔程式啟動顯示矩形,滑鼠左鍵單擊切換橢圓/矩形。
3. 單文檔顯示橢圓,每次左鍵單擊變換顏色。
4. 簡易計算機:兩操作數編輯框,加減乘除按鈕,結果顯示於第三編輯框。
5. 一元二次方程求根對話框:輸入 A,B,C,點擊計算顯示根(含複數情況)。
6. 兩矩形相交區域為外接矩形畫橢圓。
7. 視窗用戶區畫矩形,鍵盤方向鍵移動(每次 15 像素,不超出螢幕)。
8. 雙精度計算機:乘法與除法按鈕實作(除零檢查)。
9. 對話框點擊 Color 按鈕彈出色彩對話框,選取顏色於 (100,100) 顯示文字。
10. 設計可序列化 CStudent 類別(學號、姓名、出生日期、地址、班級)。
11. 設計可序列化 CAddrlist 類別(姓名、地址、電話、出生日期)。
12. 單文檔畫圓,左鍵放大 2 倍,右鍵恢復原狀(左上角座標不變)。

三、程式碼逐行註解
提供三個完整 Windows SDK 風格程式範例(含 WinMain、視窗程式、訊息迴圈、WM_PAINT、WM_LBUTTONDOWN、WM_CHAR、WM_CLOSE、WM_DESTROY 等處理),每行均附註解說明。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved