在第二部分我們已經對基本的控制項有了一些練習,控制項是視窗程式的基礎應用,不論是vc,vb,甚至excel、html都會有這些控制項的應用。
到第三部分,我們需要對各種訊息進行練習。並且從這裡開始,我們就很少再使用對話方塊程式了,我們可以使用任意一種帶有win32模板的ide,建立乙個標準的windows視窗程式,並在這個基礎上進行!
在這個模板裡,必然有乙個訊息處理函式:lresult callback wndproc(hwnd, uint, wparam, lparam); 而在這裡面,就對各種需要處理的訊息進行處理:
lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
return 0;
}
首先,wm_paint訊息:
這個是繪圖訊息,要進行繪圖還需要了解其他的一些知識,比如繪圖裝置(hdc), 我們直接在視窗上畫乙個矩形作為開始:
case wm_paint:
break;
然後,是鍵盤訊息wm_keydown:
而每個鍵都有乙個虛擬的鍵值,存放在wparam中,我們可以簡單的把它在標題上顯示出來:
case wm_keydown:
; sprintf(str, "%x", wparam); //將鍵值放入字串
setwindowtext(hwnd, str);
} break;
直接可以看到:左,上,右,下分別是0x25,0x26,0x27,0x28; 而不論是a還是a,都是0x41; 0是0x30 ......
這裡,左還可以用vk_left,右用vk_right來表示,這在winuser.h中已經巨集定義了~
接著,將這兩個訊息配合起來:
1. 要繪製移動的圖形,那麼座標點是會變化的,需要定義全域性的座標;
2. 在鍵盤訊息處理中,判斷如果是上,下,左,右,則將座標進行相應的增減;
3. 圖形更新需要使用invalidaterect,把這個函式放到鍵盤處理函式中間即可:
int g_x = 50,g_y = 50;
case wm_keydown:
; sprintf(str, "%x", wparam); //將鍵值放入字串
setwindowtext(hwnd, str);
switch(wparam)
invalidaterect(hwnd, null, true);
}
至此,這個練習基本功能就完成了,只不過還有一點小問題:小球會出界。
再稍做計算和修改:
rect rt;
getclientrect(hwnd, &rt);
switch(wparam)
win32強化練習4 0 資源相關練習簡介
第4部分,我們對資源進行強化練習!資源簡單的講有abcdimst這幾類,這當然不包括全部,其中 a accelerator 快捷鍵 b bitmap 位圖 c cursor 游標 d dialog 對話方塊 i icon 圖示 m menu 選單 s stringtable 字串表 t 工具欄 我們...
win32強化練習0 1 開發環境搭建
所謂win32,即32位的 windows 作業系統下 windows 早期是16 位的,稱為 win16 而 32位的就稱為 win32 win32 向下相容 win16。而所謂 applicationprogramminginte ce api 即應用程式介面 api是作業系統提供的介面,舉例來...
win32強化練習4 7 快速建立TreeView
這一節的練習就是快速建立乙個treevew,我們分成2步來完成,第1步是用win32 sdk,第2步是自己封裝類來簡化操作。首先是win32 sdk建立乙個treeview 1.包含標頭檔案 include 2.宣告hwnd htreeview後,使用createwindow建立乙個treeview...