SDK程式設計一日一學(控制項響應右鍵)

2021-05-28 13:05:28 字數 1130 閱讀 2087

我也剛學sdk,所以不知道怎麼響應控制項的右鍵單擊事件,我開始以為只要處理wm_lbuttondown就可以了,但是不行,可以響應窗體的單擊事件,但不能響應控制項的。呵呵,經過查查資料發現了幾個方法,其中乙個方法很是猥瑣,好了,先說一下那個猥瑣點的。。。

方法一是處理wm_contextmenu訊息,滑鼠右鍵單擊控制項都會響應這個訊息,但是問題來了怎麼知道單擊了那個控制項呢?這可能與wm_contextmenu訊息的wparam和lparam有關係,我不知道這兩個引數此時代表什麼,但下面**可以實現右鍵單擊事件,先獲取滑鼠位置,在用windowfrompoint獲取滑鼠位置處的控制項控制代碼,然後與我們想要右鍵單擊的那個控制項控制代碼相比較,相等的話就彈出右鍵選單。。哈哈。。該方法的確相當猥瑣。。你可以查一下wm_contextmenu訊息的wparam和lparam引數,看看有沒有給我們提供好的方法。。

case wm_contextmenu:

ulong controlid=wparam&0x0000ffff;

break;

}方法2:當控制項被單擊或其它各種擊時都會傳送乙個wm_notify訊息,這個最近我才知道,唉!早知道有這個訊息,我就。。。。,好了有了這個訊息,我們就可以正規的處理控制項的右鍵功能了,當有這個訊息時,wparam為發生事件的控制項id,lparam為乙個指向nmhdr結構的指標,這個指標是什麼呢?如下:

typedef struct tagnmhdr

nmhdr;

typedef nmhdr far * lpnmhdr;

這個結構裡面的那個code就是通知嗎,這個通知嗎可能是:

●nm_click——使用者在控制項上按下了滑鼠左鍵。 ●

nm_dblclk——使用者在控制項上雙擊滑鼠左鍵。 ●

nm_killfocus——控制項失去了鍵盤輸入焦點。 ●

nm_outofmemory——控制項在執行中記憶體耗盡。 ●

nm_rclick——使用者在控制項上按下了滑鼠右鍵。 ●

nm_rdblclk——使用者在控制項上雙擊滑鼠右鍵。 ●

nm_return——使用者在控制項上按下了回車鍵。 ●

nm_setfocus——控制項得到了鍵盤輸入焦點。

所以要響應右鍵資訊,只需處理nm_rclick即可,**如下:

case wm_notify:

}break;}

我的大學 彙編一日一學

彙編基礎 1 變數及陣列的定義宣告 源文件 彙編基礎 2 21h中斷 源文件 彙編基礎 3 運算與邏輯指令 源文件 彙編基礎 4 程式控制轉移 源文件 彙編一日一學 1 hello world 源文件 彙編一日一學 2 兩個數的和 dup,堆疊段 源文件 彙編一日一學 3 呼叫呼叫彙編巨集庫程式 源...

彙編一日一學 1 Hello World

datas segment 13,10 0dh,0ah 是回車和換行符的ascii碼。回車是到本行行首,換行是到下一行當前游標位置,沿用以前的打字機設定 為字串結束標誌 string db 13,10,hello world 13,10,datas ends codes segment assume...

彙編一日一學 9 響鈴N次

試編寫一程式,要求能從鍵盤接收乙個個位數n,然後響鈴n次 響鈴的ascii碼為07 stacks segment dw128dup 0 stacks ends codes segment start input mov ah,1 輸入字元 int 21h cmp al,0 jle input cmp...