6.1
使用滑鼠
6.1.1
滑鼠時間和滑鼠訊息
根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類:客戶區滑鼠訊息和非客戶區滑鼠訊息。
1.客戶去滑鼠訊息
2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,
windows
只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠訊息不受這種限制,只要滑鼠通過某個視窗的客戶區,該視窗便會收到
wm_mousemove
訊息。6.1.2
處理客戶區滑鼠訊息
1.滑鼠訊息處理函式
mfc在
cwnd
類中提供了針對每一種滑鼠訊息的訊息處理函式,通過
visualc++
提供的對映機制,當發生滑鼠時,系統系統即呼叫對應的訊息處理函式,使用者可以改寫它們這樣當發生滑鼠訊息時,系統即呼叫使用者提供的訊息處理函式。
3.滑鼠訊息處理函式的引數
eg. onmousemove
(uint nflags , cpoint point);
onlbuttonup(uint nflags , cpoint point);
其兩個滑鼠訊息處理函式的引數都是相同的:
(1)nflags
包含額外的滑鼠鍵和鍵盤鍵的訊息,以指出發生訊息時某些滑鼠鍵與鍵盤間的狀態,可能的取值有以下幾個:
mk_control
:鍵盤上的
ctrl
鍵被按下。
mk_lbutton
:滑鼠左鍵被按下。
mk_mbutton
:滑鼠中鍵被按下。
mk_rbutton
:滑鼠中右鍵被按下。
mk_shift
:鍵盤上的
sift
鍵被按下。
if(nflags&mk_shift) //
結果若為非零值則表示鍵被按下
(2)point
引數包含滑鼠指標的座標位置,其型別為
cpoint
類。cpoint
類是mfc
預定義的用來描述點的類,其包含兩個資料成員x和
y,point.x
內為滑鼠指標的橫座標,
point.y
內位滑鼠指標的從座標。
6.1.3
滑鼠捕捉
為使所用滑鼠訊息均定向到某一視窗,而不管滑鼠游標位於何處,就必須對滑鼠加以捕捉,下面列出了與捕捉滑鼠有光的兩函式。
1.setcapture
()函式用於捕捉滑鼠,其函式原型如下:
cwnd::setcapture ();
2.releasecapture()
函式用於釋放對滑鼠的捕捉,其函式原型如下:
cwnd::releasecapture ();
一旦視窗捕捉了滑鼠,其他視窗無法得到滑鼠訊息,因此,當該視窗不再需要捕獲所有的滑鼠訊息時,應及時呼叫
releasecapture
()函式釋放滑鼠,以便其他視窗可以正常接收訊息。
6.2響應鍵盤
6.2.1
鍵盤事件
1.與鍵盤有關的概念(1
)焦點鍵盤由多個應用程式共享,但當在鍵盤上按下乙個鍵時,只有乙個視窗能接收到該鍵盤訊息,能接收到鍵盤訊息的視窗稱為有「輸入極點」的視窗。具有焦點的視窗可能是活動是活動視窗,也可能是活動視窗的子視窗。
當乙個視窗獲得輸入焦點時,
windows
向其傳送一條
wm_setfoucs
訊息而當其失去輸入焦點時,
windows
向其傳送
wm_killfocus
訊息。(
2)鍵盤掃瞄碼與虛擬鍵**
鍵盤上每乙個有意義的鍵都對應著乙個唯一的標識值,稱為鍵盤掃瞄碼,鍵盤掃瞄碼與具體的鍵盤硬體有關,為了使應用程式不依賴於具體硬體,
windows
系統中不使用虛擬鍵**,它是由
windows
系統根據鍵盤掃瞄碼轉換而成的一種標準的鍵識別符號,對應用程式而言,它與具體裝置無關。
2.鍵盤事件及對應的鍵盤訊息
鍵盤訊息與其他訊息不一樣,除按鍵本身能產生訊息外,這些訊息還被
windows
轉換成其他的訊息再次發給擁有輸入焦點的視窗。
鍵盤訊息:
wm_keydown
非系統鍵按下
wm_char
字元訊息,由
wm_keydown
衍生wm_deadchar
死字元訊息,由
wm_keydown
衍生wm_keyup
非系統鍵釋放
wm_syskeydown
系統鍵按下
wm_syschar
系統字元訊息,由
wm_syskeydown
衍生wm_sysdeadchar
系統字元訊息,有
wm_syskeydown
衍生wm_syskeyup
系統鍵釋放
(1)系統鍵指
alt鍵與其他鍵的組合,這些鍵的功能是啟用程式選單或者系統選單的選項,以及切換活動視窗等系統功能。
(2)死字元是指本身不能顯示但能修改其他字元顯示的字元,主要出現在非英語鍵盤上
6.2.2
處理鍵盤事件
1.鍵盤事件處理函式
應用程式通常只需處理
wm_keydown
,wm_keyup
和wm_char
訊息,對這
3個訊息
mfc在
cwnd
類中提供了相應的處理函式。
訊息處理函式
wm_keydown
void onkeydown (uint nchar , uintnrepcnt, uint nflags)
wm_char
void onkeydown (uint nchar , uintnrepcnt, uint nflags)
wm_keyup
void onkeydown (uint nchar , uintnrepcnt, uint nflags)
onkeydown ()
與onkeyup ()
函式的引數。
nchar :
鍵的偽程式碼
nrepchar :
重複計數,若應用程式的處理速度慢與使用者按鍵的速度,
windows
會把幾個
wm_keydow
或wm_keyup
訊息合併到單個訊息中並相應增加重複計數。
nflags :
提供一些特殊訊息,按位使用各位含義
當發生鍵盤訊息,
visual c++
的對映機制將自動呼叫這些函式,使用者可以改寫這些函式,這樣訊息發生時將呼叫使用者自己定義的函式。
onchar
:鍵碼(
ascii
碼)nrepcnt
:按鍵重複次數,同
onkeydown
()與onkeyup
()函式的這一引數一樣
nflags
:提供一些特殊資訊,按位使用
4.鍵盤事件的處理原則
wm_char
訊息通常是最有用的訊息,它的訊息引數中包含可顯示字元的
ascii
碼。能區分字母大小寫,但不能處理非顯示字元。
wm_keysown
和wn_keyup
的訊息引數中包含鍵的偽程式碼,它可處理非顯示字元,但虛擬鍵不去分大小寫字母,故處理字母比較麻煩。若確實需要這兩個訊息中處理字母的大小,需要使用
api函式
getkeystate ()
獲得shift
鍵和capslock
鍵的狀態,才能判定是大寫字母韓式小寫字母。
通常需要處理可顯示字元時響應
wm_char
訊息。
第六章總結
為了解決連續計算的問題需求,而產生了迴圈控制結構。若重複次數已知,則為技術控制,若次數未知,結構為條件控制則為條件控制結構。迴圈結構分兩種結構,三種語句。一 當型迴圈,先判斷,再執行。while語句,滿足條件即執行迴圈。for語句。for語句為一種特殊的當型迴圈,也是最常用的迴圈結構。其結構為 初始...
第六章總結
一 迴圈控制結構 1 學過 for 迴圈 怎麼用 for 初始化表示式 迴圈控制表示式 增值表示式 初始化表示式 for 迴圈控制表示式 增值表示式 初始化表示式 for 迴圈控制表示式 感悟 for迴圈多用於計數控制的迴圈 如果知道迴圈次數,多用for迴圈 for語句中間的迴圈表示式,可以與迴圈變...
第六章總結
1.dom操作分類 dom core getelementbyid 等方法都是domcore的組成部分 html dom 他提供了一些更簡單的 標記來描述各種html元素屬性,如document.forms獲取表單物件 css dom 通過改變style物件的各種屬性,呈現不同的樣式,如elemen...