win32 API程式設計之常用訊息詳解

2022-09-03 20:39:10 字數 4034 閱讀 7808

一、傳送訊息的函式

例項**:

#include#include

//自定義訊息

#define wm_aaa wm_user+1hwnd hwnd;

hwnd hwnd2;

//自定義的視窗過程

lresult callback mywindowproc(hwnd hwnd, uint msg,

wparam wparam, lparam lparam)

return

defwindowproc(hwnd, msg, wparam, lparam);

}int

winapi winmain(hinstance hinstance, hinstance hprevinstance,

lpstr lpcmdline,

intnshowcmd)

if (msg.message ==wm_aaa)

translatemessage(&msg);//

翻譯訊息

dispatchmessage(&msg);//

分發訊息到視窗過程

}}

二、windows各種訊息

三、響應視窗建立和刪除

**例項

#include#include

//自定義的視窗過程

lresult callback mywindowproc(hwnd hwnd, uint msg,

wparam wparam, lparam lparam)

///////////////////////////

銷毀視窗

//////////////////////////////

/ case

wm_close:

sprintf(str,

"wm_close訊息:%p!\n

", hwnd);

outputdebugstringa(str);

destroywindow(hwnd);

//銷毀視窗,發出wm_destroy訊息

return0;

case

wm_destroy:

sprintf(str,

"wm_destroy訊息:%p!\n

", hwnd);

outputdebugstringa(str);

postquitmessage(

0);//

可以使getmessage返回0

return0;

case

wm_ncdestroy:

sprintf(str,

"wm_ncdestroy訊息:%p!\n

", hwnd);

outputdebugstringa(str);

return0;

}return

defwindowproc(hwnd, msg, wparam, lparam);

}int

winapi winmain(hinstance hinstance, hinstance hprevinstance,

lpstr lpcmdline,

intnshowcmd)

}

四、wm_paint訊息

1)以下操作會觸發wm_paint訊息

注:

**例項:

#include#include

//自定義的視窗過程

lresult callback mywindowproc(hwnd hwnd, uint msg,

wparam wparam, lparam lparam)

case

wm_paint:

case

wm_lbuttondown:

//invalidaterect(hwnd, null, true);

//新增更新區域

//updatewindow(hwnd);

//更新區域不為空,則馬上發出wm_paint訊息

//不管視窗的任何部分是否無效,都會導致wm_paint訊息被發布到視窗。

redrawwindow(hwnd, null, null, rdw_internalpaint);

break

;

case wm_ncpaint://

自定義繪製非客戶區

hdc hdc =getwindowdc(hwnd);

rect r;

r.left = 0

; r.top = 0

; r.right = 300

; r.bottom = 30

; hbrush brh = createsolidbrush(rgb(255, 0, 0

)); fillrect(hdc, &r, brh);

setbkmode(hdc, transparent);

textouta(hdc,

5, 5, "

自定義視窗標題

", 14);//

最後乙個引數為字串長度

deleteobject(brh);

releasedc(hwnd, hdc);

return

true

;

//break;

}

return

defwindowproc(hwnd, msg, wparam, lparam);

}

intwinapi winmain(hinstance hinstance, hinstance hprevinstance,

lpstr lpcmdline,

intnshowcmd)

}

五、wm_erasebkgnd訊息

**例項:見上面wm_paint的**例項。

六、更新視窗的函式

**例項:見上面wm_paint的**例項。

七、wm_ncpaint訊息

**例項:見上面wm_paint的**例項。

八、視窗滑鼠鍵盤訊息

**例項:

#include#include

//自定義的視窗過程

lresult callback mywindowproc(hwnd hwnd, uint msg,

wparam wparam, lparam lparam)

return

defwindowproc(hwnd, msg, wparam, lparam);

}int

winapi winmain(hinstance hinstance, hinstance hprevinstance,

lpstr lpcmdline,

intnshowcmd)

}

注:wnd.style = cs_hredraw | cs_dblclks;//視窗類、樣式,只有新增cs_dblclks才能響應雙擊訊息

WIN32 API程式設計之 透明static

createwindow可以直接建立乙個staitc,但這個static是不透明的,如果我們把視窗背景設定為gray brush,則static會很明顯的有乙個白色背景,一般來說這樣肯定很難看。可以先給 static設定乙個ws ex transparent的擴充套件屬性,然後在訊息 函式中攔截 w...

VC 串列埠程式設計之基於Win32 API

1 api描述 在win32 api中,串列埠使用檔案方式進行訪問,其操作的api基本上與檔案操作的api一致。開啟串列埠 win32 中用於開啟串列埠的api 函式為createfile,其原型為 例如,以下程式用於以同步讀寫方式開啟串列埠com1 handle hcom dword dwerro...

學習win32API 訊息處理

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