使用WPARAM或LPARAM 傳遞指標

2021-07-25 02:49:01 字數 746 閱讀 5878

在vc  中的定義

typedef uint_ptr            wparam;

typedef long_ptr lparam;

typedef _w64 unsigned int uint_ptr, *puint_ptr;

typedef _w64 long long_ptr, *plong_ptr;

可見wparam 是無符32位 , lparam 是長整型

當使用sendmessage 傳遞訊息時,wparam和lparam  都是可以傳遞指標的

假設要傳遞的是hdc hdc 控制代碼,到乙個對話方塊hwdialog

首先要把hdc 轉化為void* , 然後再轉化為wparam或lparam ,

在訊息處理函式中,對接收到的訊息wparam或lparam ,先轉化為void*,然後再轉化為hdc ,

// 傳送訊息

hdc hdc;

hwnd hw = createdialog(hinst , makeintresource(idd_show),hwnd,showpicture);

sendmessage(hw,wm_pr,11,(lparam)((void*)hdc)); // 使用lparam 或 wparam

// 在對話方塊處理函式中接受訊息

hdc hdm = (hdc)(void*)(lparam);

WPARAM和LPARAM的含義

具體的訊息表示 wm paint訊息,loword lparam 是客戶區的寬,hiword lparam 是客戶區的高 滾動條wm vscroll或wm hscroll訊息,loword wparam 指出了滑鼠對滾動條的操作。比如上 下 左 右 翻頁 移動等。擊鍵訊息,有wm syskeydow...

WPARAM與LPARAM的高位與低位問題

在寫訊息處理函式時,常會遇到wparam與lparam這兩個引數,這兩個引數都是dword型別的,也就是雙字或四位元組或32位長度的。有時想取這些引數裡的高位字或低位字,用什麼方法呢?查msdn說有兩個巨集函式可用 取高位字 word hiword dword dwvalue 取低位字 word l...

正確使用 (按位或)和 (邏輯或)

最近發現有些人寫source時,分不清 按位或 和 邏輯或 if requestcategorys in array itemcategory roleid requestcategorys else 這樣寫的結果是不管 requestcategorys是true或false,in array函式總...