windows程式設計之滑鼠,鍵盤,繪製文字簡介

2022-08-02 11:45:12 字數 2148 閱讀 9477

寫了乙個小程式,大概介紹sdk裡面滑鼠點選,鍵盤輸入,文字繪製的要點。至於前面一大堆的基本視窗的建立,網上的資料很多,這裡就不做多的介紹了。這個程式主要介紹鍵盤按鍵的統計,將所有按下的鍵都寫到乙個檔案裡面。其次是點選滑鼠的操作,大概是乙個怎樣的過程。再是一些繪製文字的基本要點。先看**吧(*^__^*)

繪製文字:當您想在乙個影象輸出裝置(屏程式幕或者印表機)上繪圖時,您首先必須獲得乙個裝置描述表(裝置環境 dc)的控制代碼,將控制代碼返回給程式的時候,windows才會給您使用裝置的許可權,也就是繪製的許可權。windows就會告訴你客戶區的大小,字型,顏色等其他gui(圖形使用者介面)物件的屬性

獲取dc控制代碼的方法:

1.最常用的就是在處理wm_paint訊息時候呼叫begpaint和endpaint

hdc=beginpaint(hwnd,&ps);     

//code

endpaint(hwnd,&ps);

//ps是paintstruct的結構,hdc就是獲取的裝置描述控制代碼,beginpaint使得區域有效.這裡解釋下「無效區域」:windows把最小的需要重繪的正方形區域叫做「無效區域」,一旦出現了無效區域,馬上就會產生wm_paint訊息,要消除無效區域,用beginpaint或者validaterect讓無效區有效,這是必須的,不然無效區域的存在就會一直產生wm_pam_paint訊息

2.想要在非wm_paint獲取dc控制代碼的方法是

hdc = getdc(hwnd);

//code

releasedc(hwnd,hdc);

然而getdc不使客戶區中的任何可能的無效區域變有效

需要注意的是:必須在乙個訊息處理裡面獲取dc並且釋放dc,不能在這個訊息中獲取,而企圖在另乙個訊息中釋放。

繪製字串的要點:

1.必須在開始處和結束處分別呼叫 beginpaint 和 endpaint

2.在 beginpaint 和 endpaint 之間呼叫所有的繪製函式;

3.如果在其它的訊息處理(非wm_paint)中重新繪製客戶區,您可以有兩種選擇:

(1)用getdc和releasedc代替beginpaint和endpaint;

(2)呼叫invalidaterect或updatewindow讓客戶區無效,這將迫使windows把wm_paint放入應用程式訊息佇列,從而使得客戶區重繪。

鍵盤訊息處理:

windows將負責把擊鍵訊息送到具有輸入焦點的那個應用程式中去。儘管螢幕上可能同時有幾個應用程式視窗,但乙個時刻僅有乙個視窗有輸入焦點。有輸入焦點的那個應用程式的標題條總是高亮度顯示的。當您按下乙個鍵時,windows就會傳送乙個wm_keydown給有輸入焦點的那個應用程式,提醒它有乙個鍵被按下。當您釋放鍵時,windows又會傳送乙個wm_kyeup訊息,告訴有乙個鍵被釋放。每當你按下乙個鍵,windows傳送乙個wm_char訊息給有輸入焦點的應用程式。由於messagebox是阻塞的,再者作業系統處理訊息是迅速的,當您按下鍵的時候彈出乙個框,阻塞在那,不能進行下一次輸入,我在**中加的只是用作檢驗而已。在這個程式**中,一旦有鍵按下,呼叫invalidaterect使得區域無效,產生wm_paint訊息重繪,處理繪製的訊息裡面把按下的鍵輸出來。每次按鍵都會產生wm_char。

處理滑鼠輸入訊息

和鍵盤輸入一樣,windows自動捕捉滑鼠的動作,左,右鍵按下,移動,雙擊,滾輪之類的。但是處理滑鼠訊息和鍵盤訊息可不一樣。滑鼠的訊息不存在輸入焦點這個概念,任何滑鼠經過的視窗都會接收到滑鼠的訊息。比如滑鼠的移動訊息wm_ncmove,當然大多數都輸忽略的。對於所有的訊息,視窗過程函式傳入的引數lparam包含了滑鼠的位置,其中底位為x座標,高位為y座標,這些座標值都是相對於視窗客戶區的左上角的值,wparam中則包含了滑鼠按鈕的狀態。對於滑鼠訊息

視窗處理函式傳入的引數lparam是乙個32位長的數,其中高、底16位分別包括了x、y座標,現在做一些小處理,兩個巨集loword和hiword拿出高十六位和低十六位。

#define loword(l)           ((word)(l))

#define hiword(l)           ((word)(((dword)(l) >> 16) & 0xffff))

就差不多介紹這些,因為裡面細節很多,我只是個新手,只能了解到九牛一毛。有什麼不足,希望大家指正。(*^__^*)

參考資料《windows程式設計》

《windows+sdk程式設計系列》

ubuntu與windows共享滑鼠鍵盤

做嵌入式linux開發時,為了方便用了兩台電腦,一台windows系統,一台ubuntu系統,也是為了方便,採用synergy軟體實現兩台電腦共享滑鼠鍵盤,實測,還挺好用大笑 首先ubuntu下安裝 sudo dpkg i即可成功安裝。我的滑鼠接在了這台電腦上,故將其設定成server模式。另一台電...

linux和windows共享滑鼠鍵盤

先說下原因,因為無線滑鼠突然沒電了,需要在兩台pc間共享滑鼠。好吧查詢下方案,最後選擇synergy。synergy在windows和linux下使用全攻略 多台pc共享一套鍵盤滑鼠 多電腦之間的鍵盤滑鼠共享 網上提供的其他滑鼠鍵盤共享方案還有兩個 sharemouse mousewithoutbo...

通用滑鼠鍵盤

該程式通過並行機制處理滑鼠和鍵盤的訊息,為了簡化程式裁減了一些 該程式可用為基礎在該程式上新增 可用於文字編輯,遊戲和其他滑鼠鍵盤通用的程式.include include include include include union regs regs unsigned size void far ...