版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)下鼠標(biāo)操作原理軟件組整理 目 錄1、鼠標(biāo)的類型及與主板的連接關(guān)系2、鼠標(biāo)工作原理3、鼠標(biāo)硬件原理圖4、HID協(xié)議與操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介5、操作系統(tǒng)HID接口6、圖形顯示基本原理與操作系統(tǒng)焦點(diǎn)模型7、應(yīng)用程序鼠標(biāo)捕獲與程序處理鼠標(biāo)的類型按照與電腦的連接方式來(lái)分的話有串口鼠標(biāo)、PS/2鼠標(biāo)和USB鼠標(biāo)。如下圖所示:鼠標(biāo)與主板的連接關(guān)系鼠標(biāo)分別連接到主板的串口、PS2、USB口。串口PS2口USB口鼠標(biāo)工作原理光電鼠標(biāo)工作原理示意圖,激光鼠標(biāo)原理與之類似。鼠標(biāo)光學(xué)跟蹤引擎部分橫截面示意圖光學(xué)鼠標(biāo)主要由四部分的核心組件構(gòu)成,分別是發(fā)光二極管、透鏡組件、光學(xué)引擎(Optical Engine)
2、以及控制芯片組成。光學(xué)鼠標(biāo)通過(guò)底部的LED燈,燈光以30度角射向桌面,照射出粗糙的表面所產(chǎn)生的陰影,然后再通過(guò)平面的折射透過(guò)另外一塊透鏡反饋到傳感器上。當(dāng)鼠標(biāo)移動(dòng)的時(shí)候,成像傳感器錄得連續(xù)的圖案,然后通過(guò)“數(shù)字信號(hào)處理器”(DSP)對(duì)每張圖片的前后對(duì)比分析處理,以判斷鼠標(biāo)移動(dòng)的方向以及位移,從而得出鼠標(biāo)x, y方向的移動(dòng)數(shù)值。再通過(guò)SPI傳給鼠標(biāo)的微型控制單元(Micro Controller Unit)。鼠標(biāo)的處理器對(duì)這些數(shù)值處理之后,傳給電腦主機(jī)。傳統(tǒng)的光電鼠標(biāo)采樣頻率約為3000 Frames/sec(幀/秒),也就是說(shuō)它在一秒鐘內(nèi)只能采集和處理3000張圖像。鼠標(biāo)硬件原理圖1鼠標(biāo)硬件原
3、理圖2HID協(xié)議簡(jiǎn)介一、應(yīng)用場(chǎng)合USB HID類是比較大的一個(gè)類,HID類設(shè)備屬于人機(jī)交互操作的設(shè)備。用于控制計(jì)算機(jī)操作的一些方面,如USB鼠標(biāo),USB鍵盤,USB游戲操縱桿,USB觸摸板,USB軌跡球、電話撥號(hào)設(shè)備、VCR遙控等等設(shè)備。另外,使用HID設(shè)備的一個(gè)好處就是,操作系統(tǒng)自帶了HID類的驅(qū)動(dòng)程序,而用戶無(wú)需去開(kāi)發(fā)很麻煩的驅(qū)動(dòng)程序,只要直接使用API調(diào)用即可完成通信。所以很多簡(jiǎn)單的USB設(shè)備,喜歡枚舉成HID設(shè)備,這樣就可以不用安裝驅(qū)動(dòng)而直接使用。HID協(xié)議簡(jiǎn)介二、USB HID類可采用的通信管道所有的HID設(shè)備通過(guò)USB的控制管道(默認(rèn)管道,即端點(diǎn)0)和中斷管道與主機(jī)通信。USB H
4、ID規(guī)范定義的HID設(shè)備可用端點(diǎn)包含三種管道:1、控制(端點(diǎn)0)( 必選) 傳輸U(kuò)SB描述符、類請(qǐng)求代碼以及供查詢的消息數(shù)據(jù)等2、中斷輸入 (必選) 傳輸從設(shè)備到主機(jī)的輸入數(shù)據(jù)3、中斷輸出 (可選 )傳輸從主機(jī)到設(shè)備的輸出數(shù)據(jù)HID協(xié)議簡(jiǎn)介控制管道主要用于以下3個(gè)方面: 1、接收/響應(yīng)USB主機(jī)的控制請(qǐng)示及相關(guān)的類數(shù)據(jù)。 2、在USB主機(jī)查詢時(shí)傳輸數(shù)據(jù)(如響應(yīng)Get_Report請(qǐng)求等)。 3、接收USB主機(jī)的數(shù)據(jù)。中斷管道主要用于以下兩個(gè)方面: 1、USB主機(jī)接收USB設(shè)備的異步傳輸數(shù)據(jù)。 2、USB主機(jī)發(fā)送有實(shí)時(shí)性要求的數(shù)據(jù)給USB設(shè)備;從USB主機(jī)到USB設(shè)備的中斷輸出數(shù)據(jù)傳輸是可選的,
5、當(dāng)不支持中斷輸出數(shù)據(jù)傳輸時(shí),USB主機(jī)通過(guò)控制管道將數(shù)據(jù)傳輸給USB設(shè)備。HID協(xié)議簡(jiǎn)介三、USB HID設(shè)備的描述符HID設(shè)備的描述符除了5個(gè)USB的標(biāo)準(zhǔn)描述符(設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符、字符串描述符,還包括3個(gè)HID設(shè)備類特定描述符:HID描述符、報(bào)告描述符、實(shí)體描述符。HID協(xié)議簡(jiǎn)介除了HID的三個(gè)特定描述符組成對(duì)HID設(shè)備的解釋外,5個(gè)標(biāo)準(zhǔn)描述符中與HID設(shè)備有關(guān)的部分有:設(shè)備描述符中bDeviceClass、bDeviceSubClass和bDeviceProtocol三個(gè)字段的值必須為零。接口描述符中bInterfaceClass的值必須為0 x03,bInt
6、erfaceSubClass的值為0或1,為1表示HID設(shè)備符是一個(gè)啟動(dòng)設(shè)備(Boot Device,一般對(duì)PC機(jī)而言才有意義,意思是BIOS啟動(dòng)時(shí)能識(shí)別并使用您的HID設(shè)備,且只有標(biāo)準(zhǔn)鼠標(biāo)或鍵盤類設(shè)備才能成為Boot Device。如果為0則只有在操作系統(tǒng)啟動(dòng)后才能識(shí)別并使用您的HID設(shè)備),bInterfaceProtocol的取值含義如下表所示:表2、HID接口描述符中bInterfaceProtocol的含義bInterfaceProtocol的取值(十進(jìn)制) 含義0 NONE1 鍵盤2 鼠標(biāo)3255 保留HID協(xié)議簡(jiǎn)介下面僅對(duì)這3個(gè)HID設(shè)備類特定描述符中的HID描述符進(jìn)行說(shuō)明。HI
7、D描述符關(guān)聯(lián)于接口描述符,因而如果一個(gè)設(shè)備只有一個(gè)接口描述符,則無(wú)論它有幾個(gè)端點(diǎn)描述符,HID設(shè)備只有一個(gè)HID描述符。HID設(shè)備描述符主要描述HID規(guī)范的版本號(hào)、HID通信所使用的額外描述符、報(bào)表描述符的長(zhǎng)度等。其他信息請(qǐng)自行百度。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介 HID 設(shè)備驅(qū)動(dòng)簡(jiǎn)介為簡(jiǎn)化USB設(shè)備的開(kāi)發(fā)過(guò)程,USB提出了設(shè)備類的概念。HID設(shè)備類,即人機(jī)接口設(shè)備。典型的HID設(shè)備如鍵盤、鼠標(biāo)。所有設(shè)備類都必須支持標(biāo)準(zhǔn)USB描述符和標(biāo)準(zhǔn)USB設(shè)備請(qǐng)求。如果有必要,設(shè)備類還可以自行定義其專用的描述符和設(shè) 備請(qǐng)求,這分別被稱為設(shè)備類定義描述符和設(shè)備類定義請(qǐng)求。另外,一個(gè)完整的設(shè)備類還將指明其接口和端點(diǎn)的
8、使用方法,如如接口所包含端點(diǎn)的個(gè)數(shù)、端點(diǎn)的最大 數(shù)據(jù)包長(zhǎng)度等。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介HID設(shè)備既可以是低速設(shè)備也可以是全速設(shè)備,其典型的數(shù)據(jù)傳輸類型為中斷IN傳輸,即它適用于主機(jī)接收USB設(shè)備 發(fā)來(lái)的小量到中等量的數(shù)據(jù)。HID具有以下的功能特點(diǎn):1)適用于傳輸少量或中量的數(shù)據(jù);2)傳輸?shù)臄?shù)據(jù)具有突發(fā)性;3)傳輸?shù)淖畲笏俾视邢拗?4)無(wú)固 定的傳輸率。HID設(shè)備類除支持標(biāo)準(zhǔn)USB描述符外(設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符和字符串描述符),還自行 定義了3種類描述符,分別為HID描述符(主要用于識(shí)別HID設(shè)備所包含的其他類描述符)、報(bào)告描述符(提供HID設(shè)備和主機(jī)間交換數(shù)據(jù)的格式)和
9、物理描 述符。一個(gè)HID設(shè)備只能支持一個(gè)HID描述符;可以支持一個(gè)或多個(gè)報(bào)告描述符;物理描述符是可選的,大多數(shù)HID設(shè)備不需要使用它。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介 USB HID設(shè)備驅(qū)動(dòng)原理設(shè)備的USB 人機(jī)交互設(shè)備必須遵循以下的USB開(kāi)始程序,如右圖所示:1) 插入設(shè)備 USB設(shè)備第一次連接到總線時(shí),雖然接上了電源,但是總線仍然沒(méi)有任何功能,一定要到重置總線為止才可以開(kāi)始運(yùn)作。注意,一旦USB在D端使用了 1.5k的提升電阻,就會(huì)立即通知總線的集線器,有一個(gè)低速設(shè)備(1.5Mb/s)剛被連接上。而程序以設(shè)備地址0開(kāi)始運(yùn)行。 設(shè)備插上時(shí),電源打開(kāi)重置的過(guò)程: 重置執(zhí)行初始設(shè)置并出發(fā)總線重置中斷-位于
10、中止模式下知道總線被重置為止等待設(shè)備列舉執(zhí)行程序循環(huán)操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介2) 總線重置 接著主機(jī)將會(huì)辨認(rèn)新的USB設(shè)備并重置它。在總線重置過(guò)程中,除了設(shè)定堆棧指針外,也出發(fā)所有被使用到的中斷。(總線重置的中斷服務(wù)程序ISR功能)3) 設(shè)備列舉。 主機(jī)會(huì)負(fù)責(zé)檢測(cè)與設(shè)定所有連接至根集線器的設(shè)備,辨別與設(shè)定一個(gè)USB設(shè)備的程序,稱為設(shè)備列舉。主機(jī)首先會(huì)送出SETUP封包以讀取默認(rèn)地址0的設(shè)備描 述符。當(dāng)收到描述符后,主機(jī)將會(huì)指定新的USB地址給設(shè)備。從設(shè)備所返回的信息中,主機(jī)就會(huì)知道設(shè)備所支持的數(shù)據(jù)端點(diǎn)的數(shù)量。完成設(shè)備列舉。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介4) 數(shù)據(jù)捕捉與轉(zhuǎn)換 這里以鍵盤為例,在固件中將以周
11、期性的方式,把掃描的形式寫入到掃描矩陣的列I/O端口傷(接口2),并且在行I/O接口傷讀取結(jié)果值以決定哪個(gè)鍵被按下 了。通過(guò)鍵盤掃描后所得到的數(shù)據(jù)碼,可以使用中斷傳輸以端點(diǎn)1來(lái)傳送給主機(jī)。設(shè)備就將鍵盤的8B數(shù)據(jù)放置在IN令牌包隨后跟隨的資料封包的數(shù)據(jù)域位內(nèi),再 返回給主機(jī)。 當(dāng)含有LED的按鍵(如NumLock ,Caps lock 與 Scroll lock)被按下或放開(kāi)時(shí),主機(jī)就會(huì)送出含有設(shè)定報(bào)告(Set_Report)要求的SETUP封包,通過(guò)控制傳輸傳至設(shè)備的端口0上。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介 USB HID設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)的流程說(shuō)明USB總線與設(shè)備間的交互都是通過(guò)USBD即USB總線驅(qū)
12、動(dòng)程序完成。USBD起著中間橋梁作用,解釋USB設(shè)備類驅(qū)動(dòng)程序發(fā)來(lái)的命令并將其劃分為一系列的USB事務(wù),然后發(fā)送給USB主控制器驅(qū)動(dòng)程序。具體流程是插入一個(gè)USB設(shè)備后,主機(jī)檢測(cè)到有設(shè)備接入,USBD就從鏈表中查找匹配HID設(shè)備類。為每一個(gè)接入的 HID設(shè)備驅(qū)動(dòng)建立一個(gè)對(duì)應(yīng)的USB_HID_SIO_CHAN結(jié)構(gòu)來(lái)對(duì)該HID設(shè)備驅(qū)動(dòng)進(jìn)行管理。這里的USB_HID_SIO_CHAN結(jié)構(gòu)是 USBD為每一個(gè)HID設(shè)備所分配的一個(gè)關(guān)鍵的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。此后由USB主控制器驅(qū)動(dòng)程序來(lái)負(fù)責(zé)硬件底層的驅(qū)動(dòng)。 而HID設(shè)備移除時(shí),會(huì)調(diào)用函數(shù)usbHIDDeviceAttachCallback() ,這時(shí)先判斷是
13、否有與該HID設(shè)備綁定的結(jié)構(gòu),有則清除該結(jié)構(gòu)。 而HID設(shè)備移除時(shí),會(huì)調(diào)用函數(shù)usbHIDDeviceAttachCallback() ,這時(shí)先判斷是否有與該HID設(shè)備綁定的結(jié)構(gòu),有則清除該結(jié)構(gòu)。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介從框圖中,可以看出除了USB標(biāo)準(zhǔn)定義的一些描述符外,HID設(shè)備還必須定義HID描述符。另外設(shè)備和主機(jī)的通信是通過(guò)報(bào)告的形式來(lái)實(shí)現(xiàn)的,所以還必須定義報(bào)告描述符;而物理描述符不是必需的。還有就是HID描述符是關(guān)聯(lián)于接口(而不是端點(diǎn))的,所以設(shè)備不需要為每個(gè)端點(diǎn)都提供一個(gè)HID描述符。接口描述符中bInterfaceClass的值必須為0 x03,bInterfaceSubClass的
14、值為0或1,為1表示HID設(shè)備符是一個(gè)啟動(dòng)設(shè)備(Boot Device,一般對(duì)PC機(jī)而言才有意義,意思是BIOS啟動(dòng)時(shí)能識(shí)別并使用您的HID設(shè)備,且只有標(biāo)準(zhǔn)鼠標(biāo)或鍵盤類設(shè)備才能成為Boot Device。如果為0則只有在操作系統(tǒng)啟動(dòng)后才能識(shí)別并使用您的HID設(shè)備)。操作系統(tǒng)HID驅(qū)動(dòng)簡(jiǎn)介成功注冊(cè)一個(gè)沒(méi)有被初始化的HID設(shè)備的程序流程如右圖所示。USB HID設(shè)備驅(qū)動(dòng)程序的簡(jiǎn)單介紹見(jiàn)下頁(yè)。操作系統(tǒng)HID接口設(shè)備文件一般注冊(cè)為“/dev/input/mouse0”,對(duì)應(yīng)的驅(qū)動(dòng)程序及接口如下:/輸入子系統(tǒng)層的操作-drivers/input/input.copen /dev/input/mouse0
15、mousedev_open() /drivers/input/mousedev.c /*打開(kāi)鼠標(biāo)類輸入設(shè)備*/input_open_device()input_handle-dev-open/驅(qū)動(dòng)層物理設(shè)備的操作-drivers/usb/input/usbmouse.cusb_mouse_open()注冊(cè)Input Handler 驅(qū)動(dòng)層只是把輸入設(shè)備注冊(cè)到輸入子系統(tǒng)中,在驅(qū)動(dòng)層的代碼中本身并不創(chuàng)建設(shè)備結(jié)點(diǎn)。應(yīng)用程序用來(lái)與設(shè)備打交道的設(shè)備結(jié)點(diǎn)的創(chuàng)建由Event Handler層調(diào)用Input core中的函數(shù)來(lái)實(shí)現(xiàn)。操作系統(tǒng)HID接口而在創(chuàng)建具體的設(shè)備節(jié)點(diǎn)之前,Event Handler層需要
16、先注冊(cè)一類設(shè)備的輸入事件處理函數(shù)及相關(guān)接口static int _init mousedev_init(void)/注冊(cè)輸入事件處理、連接、斷開(kāi)、設(shè)備(文件)操作函數(shù) input_register_handler(&mousedev_handler);/創(chuàng)建輸入設(shè)備節(jié)點(diǎn)devfs_mk_cdev(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX), S_IFCHR|S_IRUGO|S_IWUSR, input/mice);static struct input_handler mousedev_handler = .event
17、= mousedev_event,/REL(相對(duì)坐標(biāo))、按鍵、ABS(絕對(duì)坐標(biāo))、SYNC等事件處理 .connect = mousedev_connect, .disconnect = mousedev_disconnect, .fops = &mousedev_fops,/鼠標(biāo)打開(kāi)、poll、讀寫等操作 .minor = MOUSEDEV_MINOR_BASE, .name = mousedev, .id_table = mousedev_ids,;操作系統(tǒng)HID接口下面集中分析mousedev_event事件處理:分析數(shù)據(jù)事件結(jié)構(gòu)體linux/input.h中有定義,這個(gè)文件還定
18、義了標(biāo)準(zhǔn)按鍵的編碼等struct input_event struct timeval time; /按鍵時(shí)間 _u16 type; /類型,在下面有定義 _u16 code; /要模擬成什么按鍵 _s32 value;/是按下還是釋放;code:事件的代碼.如果事件的類型代碼是EV_KEY,該代碼code為設(shè)備鍵盤代碼.代碼植0127為鍵盤上的按鍵代碼,0 x1100 x116 為鼠標(biāo)上按鍵代碼,其中0 x110(BTN_ LEFT)為鼠標(biāo)左鍵,0 x111(BTN_RIGHT)為鼠標(biāo)右鍵,0 x112(BTN_ MIDDLE)為鼠標(biāo)中鍵.其它代碼含義請(qǐng)參看include/linux/inp
19、ut.h文件. 如果事件的類型代碼是EV_REL,code值表示軌跡的類型.如指示鼠標(biāo)的X軸方向REL_X(代碼為0 x00),指示鼠標(biāo)的Y軸方向REL_Y(代碼為0 x01),指示鼠標(biāo)中輪子方向REL_WHEEL(代碼為0 x08).操作系統(tǒng)HID接口對(duì)HID接口的測(cè)試結(jié)果如右圖所示。圖形顯示基本原理隨著計(jì)算機(jī)科學(xué)技術(shù)的迅猛發(fā)展,借助于計(jì)算機(jī)的圖形顯示技術(shù)、圖像處理技術(shù)和模式識(shí)別技術(shù)均取得了重大進(jìn)展。僅在電視節(jié)目制作系統(tǒng)中,就有電視字幕機(jī)、三維動(dòng)畫工作站和非線性編輯系統(tǒng)等幾大應(yīng)用領(lǐng)域。而在這幾大應(yīng)用領(lǐng)域中,都離不開(kāi)計(jì)算機(jī)圖形顯示技術(shù)。圖形顯示基本原理談到計(jì)算機(jī)圖形顯示技術(shù),可分為硬件和軟件兩
20、大部分,且這兩大部分密切相關(guān)。就廣義的圖形來(lái)說(shuō),可以分為由計(jì)算機(jī)生成的字幕與圖形、由掃描儀輸入的圖 形、由圖像卡輸入的活動(dòng)圖像及由該卡捕捉到的單幀圖像(可以用某一規(guī)定的圖形格式來(lái)存儲(chǔ))等。當(dāng)這些圖形圖像以文件形式存儲(chǔ)下來(lái)時(shí),可以有靜態(tài)或動(dòng)態(tài)、低 分辨率或高分辨率等數(shù)十種格式。圖形顯示基本原理1圖形適配器及其顯示模式從1981年問(wèn)世的ibmpc機(jī)到當(dāng)今的第4代Core系列微機(jī),其圖形顯示方式都是通過(guò)圖形適配器送到光柵掃描幀緩沖式顯示器進(jìn)行顯示的,而圖形適配器則是一塊插在計(jì)算機(jī)主板上總線擴(kuò)充槽內(nèi)的插卡,它溝通了主機(jī)與顯示器的聯(lián)系,一般簡(jiǎn)稱作顯示卡。圖形顯示基本原理2光柵圖形顯示器的工作原理在圖形顯
21、示卡上都有一個(gè)由視頻存儲(chǔ)器vram組成的顯示緩沖區(qū),它接受并暫存計(jì)算機(jī)送來(lái)的圖形圖像數(shù)字信息,經(jīng)da轉(zhuǎn)換為模擬信號(hào)后,再送到顯示器 去顯示。早期的mda卡上僅有4kb容量的顯示緩沖存儲(chǔ)器,到標(biāo)準(zhǔn)vga卡時(shí)容量增至512kb。增強(qiáng)vga卡一般為1mb容量,而目前擴(kuò)展功能的顯示卡 上,顯示緩沖區(qū)(顯存)的容量已達(dá)到2Gb甚至更大。顯示緩沖區(qū)可以看成是一個(gè)與屏幕上像素分布一一對(duì)應(yīng)的二維矩陣,其中的每一個(gè)存儲(chǔ)單元對(duì)應(yīng)著屏幕上的一個(gè)像素,其位置可以由二維坐標(biāo)(x,y)來(lái)表示。顯示緩沖區(qū)的存儲(chǔ)單元與顯示器屏幕坐標(biāo)的對(duì)應(yīng)關(guān)系可以由下頁(yè)圖片所示。圖形顯示基本原理圖形顯示基本原理3圖形顯示過(guò)程圖形的顯示過(guò)程應(yīng)該
22、從硬件和軟件兩個(gè)方面來(lái)說(shuō)。就硬件方面來(lái)說(shuō),當(dāng)電子束掃描到屏幕上某一像素的位置(坐標(biāo))時(shí),顯示器中的顯示處理器 dpu(display processing unit)會(huì)同時(shí)從對(duì)應(yīng)的顯示緩沖單元中取出像素值,并以此查找彩色表的地址,從該地址處得到該像素的紅、綠、藍(lán)三基色分量,經(jīng)da轉(zhuǎn)換后分別控制三基 色電子槍或LCD顯示電路,使屏幕上該像素顯示出三基色的混合色。在圖2示例中,彩色表的紅、綠分量分別為15,而藍(lán)分量為0,因此,屏幕上該像素的顏色會(huì)是黃色。圖形顯示基本原理就軟件方面來(lái)說(shuō),要完成圖形顯示的初始化及圖形的加工。這里,初始化的意思是要將計(jì)算機(jī)的顯示方式設(shè)置為顯示器所能夠顯示的某一種模式,并
23、將所有的顯示緩沖單元清零,另外,對(duì)彩色表的每一個(gè)單元要分別填上預(yù)定的顏色值,使彩色索引與具體的顏色聯(lián)系起來(lái)。圖形加工則是圖形軟件的主要任務(wù),其主要內(nèi)容是:根據(jù)需要顯示的圖形內(nèi)容,隨時(shí)改寫顯示緩沖單元的內(nèi)容。這是因?yàn)槠聊簧巷@示的圖形是由顯示卡上顯示緩沖區(qū)中的內(nèi)容唯一決定的。一旦在顯示緩沖單元中寫入要求的彩色索引值,圖形就自然在屏幕上顯示出來(lái)了。操作系統(tǒng)焦點(diǎn)模型無(wú)論是 Windows 應(yīng)用程序還是 Linux 應(yīng)用程序的開(kāi)發(fā)人員,焦點(diǎn)( focus )都是一個(gè)非常常見(jiàn)的一個(gè)概念。那么焦點(diǎn)究竟是什么呢?簡(jiǎn)單的說(shuō),焦點(diǎn)決定了由哪個(gè)窗口或者控件接收鍵盤或鼠標(biāo)輸入信息,因此,它又被稱作輸入焦點(diǎn)。對(duì)于用戶來(lái)
24、說(shuō),最直觀的感覺(jué)是,有光標(biāo)閃動(dòng)的窗口或者被高亮的控件就有焦點(diǎn)。操作系統(tǒng)焦點(diǎn)模型很多初級(jí)應(yīng)用程序員或者 Windows 用戶有這樣一個(gè)誤解,認(rèn)為凡是鼠標(biāo)點(diǎn)擊的窗口就是焦點(diǎn)窗口。當(dāng)出現(xiàn)有的窗口或者控件點(diǎn)擊后沒(méi)有反應(yīng)的現(xiàn)象時(shí),就認(rèn)為是焦點(diǎn)出現(xiàn)了問(wèn)題。事實(shí)上,焦點(diǎn)僅僅控制著鍵盤的輸入,而鼠標(biāo)輸入與焦點(diǎn)沒(méi)有直接關(guān)系。用戶之所以有這樣的誤解是由于另一個(gè)概念,系統(tǒng)的焦點(diǎn)模式(focus mode )。焦點(diǎn)模式?jīng)Q定了鼠標(biāo)如何使一個(gè)窗口獲得焦點(diǎn)。操作系統(tǒng)焦點(diǎn)模型一般來(lái)說(shuō),焦點(diǎn)模式被分為三種: click-to focus :這種模式就是指鼠標(biāo)點(diǎn)擊的窗口就可獲得焦點(diǎn)。這是Windows用戶最常見(jiàn)的一種模式。鼠標(biāo)點(diǎn)
25、擊的窗口會(huì)被激活,被置于所有窗口的最前面,并接收鍵盤輸入。 focus-follow-mouse :有的地方也稱這種模式為 pointer focus 。它是指鼠標(biāo)下的窗口可以獲取焦點(diǎn)。當(dāng)鼠標(biāo)移到一個(gè)可以獲得焦點(diǎn)的窗口的范圍內(nèi),用戶不需要點(diǎn)擊窗口的某個(gè)地方就可以激活這個(gè)窗口,接收鍵盤輸入。但是,這個(gè)窗口不一定會(huì)被置于所有窗口的最前面。當(dāng)鼠標(biāo)移出這個(gè)窗口的范圍時(shí),這個(gè)窗口也會(huì)隨之失去焦點(diǎn)。 sloppy focus :這種模式與 focus-follow-mouse 一樣,當(dāng)鼠標(biāo)移至某窗口的范圍內(nèi)的時(shí)候,該窗口會(huì)獲得焦點(diǎn)。與 focus-follow-mouse 不同的是,當(dāng)鼠標(biāo)移出這個(gè)窗口范圍
26、時(shí),焦點(diǎn)也不會(huì)隨之改變。只有當(dāng)鼠標(biāo)移動(dòng)到別的可以接收焦點(diǎn)的窗口時(shí),系統(tǒng)焦點(diǎn)才改變。不同的系統(tǒng)對(duì)焦點(diǎn)模式的支持不同,所使用的焦點(diǎn)模型也有很大的區(qū)別。操作系統(tǒng)焦點(diǎn)模型Linux X 系統(tǒng)中的焦點(diǎn)系統(tǒng)Linux 上的界面系統(tǒng)使用的是 X 窗口系統(tǒng)。X 是一個(gè)面向網(wǎng)絡(luò)的窗口系統(tǒng),它采用了 Client-Server 的模型。Client 可以看做是X系統(tǒng)下運(yùn)行的應(yīng)用程序。X Server 為各個(gè) Client 提供了界面方面的服務(wù)。Client 和 Server 可以不在同一臺(tái)機(jī)器上運(yùn)行,它們通過(guò)網(wǎng)絡(luò)發(fā)送請(qǐng)求和消息。操作系統(tǒng)焦點(diǎn)模型Windows 上的焦點(diǎn)是一個(gè)局部的概念,每個(gè)線程都擁有自己的焦點(diǎn)窗口
27、。但是在 X 系統(tǒng)中,焦點(diǎn)是一個(gè)全局的概念。整個(gè)系統(tǒng)中只有一個(gè) X 窗口擁有 X 焦點(diǎn)。應(yīng)用程序可以通過(guò) XSetInputFocus 來(lái)設(shè)置焦點(diǎn)窗口。與 Windows 不同的是,在 Linux 上不可見(jiàn)的窗口是不能被設(shè)置為焦點(diǎn)窗口的。在 X 系統(tǒng)中, X Server 會(huì)在窗口獲得或者失去焦點(diǎn)時(shí)發(fā)送 FocusIn 和 FocusOut 事件通知Client。但是和 Windows 不同的是,并不是所有窗口都能在焦點(diǎn)切換時(shí)收到通知,只有創(chuàng)建時(shí)選擇了 FocusChangeMask 的窗口才能接收到焦點(diǎn)變化事件。操作系統(tǒng)焦點(diǎn)模型Linux上鼠標(biāo)與鍵盤輸入模型操作系統(tǒng)焦點(diǎn)模型X 系統(tǒng)有著非常特
28、殊的鍵盤輸入模型。在一般情況下(沒(méi)有應(yīng)用調(diào)用了 XGrabKey 或者XGrabKeyboard 的情況下),X 系統(tǒng)下鍵盤輸入不僅與焦點(diǎn)有關(guān),還與鼠標(biāo)位置相關(guān)。如果當(dāng)前鼠標(biāo)位于焦點(diǎn)窗口之外,那么,和 Windows 一樣,X Server 會(huì)將鍵盤或鼠標(biāo)事件發(fā)送給焦點(diǎn)窗口。但是,如果鼠標(biāo)位于焦點(diǎn)窗口的子窗口上,那么,鍵盤事件會(huì)直接發(fā)送給這個(gè)子窗口。應(yīng)用程序鼠標(biāo)捕獲與程序處理前面我們已經(jīng)講過(guò)鍵盤與鼠標(biāo)事件的處理,這次聊聊鼠標(biāo)事件處理。我們從隊(duì)列里獲取到事件以后,可以檢測(cè)事件的類型,鼠標(biāo)事件有兩個(gè):鼠標(biāo)鍵(按下、松開(kāi))和鼠標(biāo)移動(dòng)。一般的檢測(cè)代碼如下:應(yīng)用程序鼠標(biāo)捕獲與程序處理SDL_Event
29、myEvent;/事件 int quit=0; while (!quit) while (SDL_PollEvent(&myEvent) switch (myEvent.type)/檢測(cè)事件類型 case SDL_QUIT: quit = 1; break; case SDL_MOUSEBUTTONDOWN:/鼠標(biāo)按下 break; case SDL_MOUSEBUTTONUP:/鼠標(biāo)鍵松開(kāi) break; case SDL_MOUSEMOTION:/鼠標(biāo)移動(dòng) break; 應(yīng)用程序鼠標(biāo)捕獲與程序處理在SDL_MOUSEBUTTONDOWN、SDL_MOUSEBUTTONUP事件中,我們可以檢測(cè)鼠標(biāo)按鍵信息,然后加以處理。鼠標(biāo)按鍵事件的結(jié)構(gòu):復(fù)制代碼typedef struct SDL_MouseButtonEvent Uint8 type; /
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑材料采購(gòu)及環(huán)保驗(yàn)收合同3篇
- 二零二五年度生豬養(yǎng)殖技術(shù)培訓(xùn)服務(wù)協(xié)議3篇
- 2025年度養(yǎng)生館加盟店開(kāi)業(yè)扶持與運(yùn)營(yíng)指導(dǎo)合同3篇
- 二零二五年度事業(yè)單位聘用合同:事業(yè)單位教育培訓(xùn)機(jī)構(gòu)教務(wù)人員聘用協(xié)議3篇
- 2025年度高科技企業(yè)上市擔(dān)保合同3篇
- 二零二五年度公司股權(quán)轉(zhuǎn)讓與業(yè)務(wù)拓展合同2篇
- 二零二五年度內(nèi)架承包與建筑信息化管理協(xié)議3篇
- 二零二五年度電力設(shè)施檢修與優(yōu)化升級(jí)維修服務(wù)合同3篇
- 二零二五年度高爾夫球場(chǎng)會(huì)員卡儲(chǔ)值優(yōu)惠合同3篇
- 2025年度碼頭港口集裝箱堆場(chǎng)管理合作協(xié)議3篇
- 空靈鼓社團(tuán)教學(xué)計(jì)劃
- (法律資料)城管執(zhí)法操作實(shí)務(wù)
- 網(wǎng)上商城 售后服務(wù)范本
- 軍隊(duì)文職專用簡(jiǎn)歷(2023年)
- 人教版四年級(jí)話說(shuō)溫州(表格式)
- 真題解析1-2021年上??鐚W(xué)科案例分析(茭白案例)
- 豎井工程地質(zhì)勘察報(bào)告
- 2024屆安徽省物理八年級(jí)第一學(xué)期期末復(fù)習(xí)檢測(cè)試題含解析
- 實(shí)用衛(wèi)生統(tǒng)計(jì)學(xué)題庫(kù)(附參考答案)
- 醫(yī)院醫(yī)務(wù)科科長(zhǎng)崗位競(jìng)聘答辯PPT課件(帶內(nèi)容)
- 快上來(lái)吧要開(kāi)車了課件
評(píng)論
0/150
提交評(píng)論