1、Windows API現在windows.h標頭檔中申明。其函數的實現,由作業系統提供的。
Win32 Console Application只能運行命令列程式 進入點: 一個是main
Win32 Application是基於訊息響應機制的,可以運行圖形化的C++程式 進入點: 一個是Winmain
Win 32程式編寫步驟:
(1)、WinMain函數的定義
(2)、建立一個視窗
(3)、進行訊息的迴圈
(4)、編寫視窗過程函數
2、Windows程式中,有各種各樣的資源(視窗、表徵圖、游標),系統在建立這些資源的時候會為他們分配記憶體,並返回標識這些資源的標識號,即控制代碼HANDLE(ID)。表徵圖控制代碼(HICON)、游標控制代碼(HCURSOR)、畫刷控制代碼(HBRUSH)。
3、DC是一個包含裝置資訊的結構體(物理輸出裝置,如顯示器(畫布)。及裝置驅動(畫筆、畫刷及畫法))。油畫,水彩畫,素描等畫法,相當於電腦中圖形裝置及其驅動。
4、每個應用程式開始執行,系統會為該程式建立一個訊息佇列。當系統捕獲訊息,若是這應用程式的訊息,就排入佇列。而應用程式通過迴圈,從訊息佇列中取訊息,傳遞給作業系統,由作業系統調用視窗過程函數執行。
進隊訊息:由作業系統放到應用程式訊息佇列中,然後由應用程式取出並發送。
不進隊訊息:系統調用視窗過程函數時直接發給視窗
兩者 都是系統調用視窗過程函數對訊息進行處理。
5、類和結構體除了使用的關鍵字不一樣,更重要的是,成員存取控制方面不一樣:結構體中:成員預設是公有的。類中:預設是私人的。即類外不能訪問成員。C語言中,結構體不能包含函數。在C++中,對結構體經行了擴充,C++結構體可以包含函數。
6、引用:就是一個變數的別名,必須在申明的時候就經行的初始化
int a=5; int &b=a; //用&表示申明了一個引用 int c=9; b=c; //此處並不是將b變成c的引用,而是給b賦值,此時,b和a的值都變成了9
7、MFC中如何擷取游標(CButton::GetCursor\CStatic::GetCursor)、位元影像(CBitmap::GetBitmap\CButton::GetBitmap\CStatic::GetBitmap)、表徵圖(CWnd::GetIcon\CButton::GetIcon\CStatic::GetIcon \CWindow::GetIcon)的控制代碼。注意:CWinApp::LoadCursor 、CWinApp::LoadIcon
8、表單的背景色,視窗重繪:先移除背景色,在重新繪製,MFC提供了三個函數用於視窗重繪:
InvalidateRect(&Rect)
Invalidate()
UpdateWindow()
等待WM_PAINT訊息以便重繪,隊列中無其他訊息時系統會自動發送。UpdateWindow()會立即發送WM_PAINT。系統為什麼不在調用Invalidate時發送WM_PAINT訊息呢? 又為什麼非要等應用訊息佇列為空白時才發送WM_PAINT訊息呢?這是因為系統把在視窗中的繪製操作當作一種低優先順序的操作,於是盡 可能地推後做。不過這樣也有利於提高繪製的
效率:兩個WM_PAINT訊息之間通過InvalidateRect和InvaliateRgn使之失效的地區就會被累加起來,然後在一個WM_PAINT訊息中一次得到 更新,不僅能避免多次重複地更新同一地區,也最佳化了應用的更新操作。像這種通過InvalidateRect和InvalidateRgn來使視窗地區無效,依賴於系統在合適的時機發送WM_PAINT訊息的機 制實際上是一種非同步工作方式,也就是說,在無效化視窗地區和發送WM_PAINT訊息之間是有延遲的;有時候這種延遲並不是我們希望的,這時我們當然可以在無效化視窗地區後利用SendMessage 發送一條WM_PAINT訊息來強制立即重畫,但不如使用Windows GDI為我們提供的更方便和強大的函數:
WM_ERASEBKGND: 清除背景
WM_PAINT: 在上面繪製內容
這兩個過程讓表單在繪製內容時變得很簡單,即:每次當收到WM_PAINT訊息時,你知道已經有了一個新畫布等待去繪製。然而,畫視窗兩次(一次是通過WM_ERASEBKGND畫背景,另外一次是WM_PAINT)將會導致視窗出現比較糟糕的閃爍現象。只要看看標準的編輯框-開啟Windows的寫字板並改變視窗大小,就可以看到那種閃爍的效果。