Win32API學習筆記第五章(一)

2021-08-02 21:58:18 字數 2136 閱讀 5804

子視窗控制,說白了就是由父視窗的hwnd作為createwindow中的hwndparents引數,所穿件的乙個字視窗,但這個子視窗有乙個特性:當子視窗的狀態發生改變時,會有訊息通知父視窗,這就是一種當乙個視窗收到某種重要訊息二通知另乙個視窗的乙個方法的封裝,這時子視窗就相當於父視窗的乙個輸入裝置。

一般預定義的按鈕中子視窗傳送的訊息是wm_command並且lparam為子視窗的hwnd,wparam的高位元組是子視窗的通知碼,低位元組則是子視窗的視窗id(在createwindow中有乙個hmenu其中這個的值就是子視窗的視窗id,並且只要知道視窗id或者是hwnd,兩者就可以通過getwindowlong的gwl_id來通過hwnd獲取子視窗的id,或者是通過getdlgctrlid也可以,同樣的可以通過父視窗的hwnd和子視窗id來通過getdlgitem獲取子視窗hwnd)

這個此視窗的建立方式如下:

createwindow(ptchar,

ptchar,

ws_child | ws_visible | style,

x,y,

hwnd,

(hmenu)id,

((lpcreatestruct)lparam)->hinstance,

null)

其中要注意的是:style用到的是下面的bs識別符號替換視窗型別,id則是視窗id,自擬,例項控制代碼則需要借助乙個特性:在createwindow時,會傳送乙個wm_create訊息,這個訊息的lparam引數其實是乙個指向createstruct結構的指標,其中包含了乙個例項控制代碼,當然也可以用getwindowlong函式通過視窗例項來獲取。

bs_(def)pushbutton,這個主要是拿來觸發乙個立即響應的動作,在用作子視窗控制的時候兩者作用相同

這個按鈕可以在父視窗內通過傳送bm_setstate,wparam為0或1來模擬按鍵被按下或是釋放

這個東西就是那乙個小勾勾,有四種型別:

sm_(auto)setcheck&sm_(auto)3state

上面那個不加auto的就需要我們在收到它返回的wm_command訊息以後通過傳送wparam為0和1的bm_stecheck訊息來控制這個小勾勾的顯示(那個帶了3的則有三種狀態,0,1,2)與否。

同時也可以通過傳送bm_gtecheck來獲取當前的狀態。

這個按鈕就是那個帶了小點點的那種其型別為:

bs_(auto)radiobutton這裡的非auto的顯示小點點的方式同上。

bs_groupbox

下面來看乙個書上的例子程式對應一下

/*----------------------------------------

btnlook.c -- button look program

(c) charles petzold, 1998

----------------------------------------*/

#include

struct

button =

;#define num (sizeof button / sizeof button[0])

lresult callback wndproc(hwnd, uint, wparam, lparam);

int winapi winmain(hinstance hinstance, hinstance hprevinstance,

pstr szcmdline, int icmdshow)

cw_usedefault, cw_usedefault,

cw_usedefault, cw_usedefault,

null, null, hinstance, null);

showwindow(hwnd, icmdshow);

updatewindow(hwnd);

while (getmessage(&msg, null, 0, 0))

return msg.wparam;

}lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

return defwindowproc(hwnd, message, wparam, lparam);

}

Win32API學習筆記第四章

這個訊息是由windows處理硬體中斷的產生的,windows儲存乙個每次硬體計時器滴答減少的次數,當這個計數減到0時就會產生乙個wm timer訊息,這個訊息其實時不會造成非同步的 類似鍵盤和滑鼠,由硬體來處理非同步硬體中斷時間 所以,這個訊息同樣要進入訊息佇列等待訊息迴圈的讀取,所以這個訊息的產...

Win32API學習筆記第七章(一)

這次記錄的是dialog這個在vs的資源管理器裡面也可以直接託,拖完了只需要對每乙個視窗控制改下id 或者不改也可以 然後就可以用了。建立方法已經知道了,來說下這麼用,這個對話方塊和一般的子視窗有點不一樣,這個對話方塊一共分為兩個型別,乙個是模態的,乙個是非模態的,意思就是說乙個是不允許使用者在同一...

學習win32API 訊息處理

訊息佇列與訊息迴圈 摘自win32api參考 var msg tmsg begin while processmessage msg do end 程式通過簡單地建立乙個迴圈來實現自己的訊息迴圈,通過呼叫下邊四個函式實現.以下參考delphi幫助,自己翻譯的,理解也許有錯誤,不過這正是我需要的,等回...