windows api
控制代碼(handle),資源的標識
作業系統要管理和操作這些資源,都是通過控制代碼來找到相應的資源。
需要什麼標頭檔案(.h)
所有windows程式都必須載入windows.h。
sdk 程式只要包含windows.h 就好,所有api 的函式宣告、訊息定義、常數定義、巨集定義、都在windows.h檔案中。除非程式另呼叫了作業系統提供的新模組(如commdlg、toolhelp 、ddeml...),才需要再各別包含對應的.h 檔案。
訊息為基礎,以事件驅動之
windows程式的進行系依靠外部發生的事件來驅動。
程式進入點winmain
winmain是windows程式的進入點:
int callback winmain( hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int ncmdshow)
視窗類之註冊與視窗之誕生
視窗產生之前,其屬性必須先設定好。程式必須在視窗之前先利用api函式registerclass設定屬性(註冊視窗)。registerclass需要乙個大型的資料結構wndclss作為引數。
注意,creatwindow只產生視窗,並不現實視窗,所以必須再利用showwindow將它顯示在螢幕上。
訊息迴圈
while (getmessage(&msg,...))
translatemessage是為了將鍵盤訊息轉化,dispatchmessage會將訊息傳給視窗函式去處理(訊息發生之時,作業系統已經根據當時狀態,為它表明了所屬視窗,而視窗所屬的視窗類又已經明白標示了視窗函式(也就是wc.lpfnwndproc所指函式))。
視窗的生命中樞:視窗函式
訊息迴圈中的dispatchmessage通過user模組的協助,把訊息分配到該視窗的視窗函式,視窗函式通常利用switch/case方式判斷訊息的種類,以決定處置方式,由於他是被windows系統呼叫的(我們並沒有在應用程式的任何地方呼叫此函式),所以這是一種call back 函式,意思是指"在你的程式中,被windows系統呼叫"的函式。這些函式雖然由你設計,但永遠不會也不該被你呼叫,她們是為windows系統準備的。
視窗函式設計為callback形式,才能開發乙個介面給作業系統呼叫。
lresult callback windowproc(
hwndhwnd,
uintumsg,
wparamwparam,
lparamlparam
); 注意,不論什麼訊息,都必須被處理,所以 switch/case 指令中的 default:處 必須呼叫 defwindowproc ,這是 windows 內部預設的訊息處理函式。
windows程式的生與死
作業系統與應用程式職責不同,二者是互相合作的關係,所以必須各做各的分內事,並互以訊息通知對方。
如果不依據這個遊戲規則,可能就會有麻煩產生。你可以作乙個小實驗,在視窗函式呼叫wm_destroy,但不呼叫postquitmessage。你為發現選擇系統選單中的close時,螢幕上的這個視窗消失了(因為視窗摧毀及資料結構的釋放是defwindosproc呼叫destroywindows完成的),但是應用程式本身並沒有結束(因為訊息迴圈結束不了),它還留在記憶體中。
MFC SDK和API有什麼區別
mfc sdk和api有什麼區別 mfc microsoft foundation class 微軟函式類庫 sdk software development kit,軟體開發包 軟體開發包通常是一系列api函式,而mfc 是由微軟公司提供的對api封裝後的類庫,因此從這個意義上可以說mfc是sdk...
程式設計,還是程式設計
喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...
少兒程式設計程式設計
機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...