WIN32使用者介面設計基礎之Cursor篇 (轉)
時間:2002-10-31 21:28:40 閱讀 313 次
一、 標準滑鼠替換提供了一系列標準滑鼠,其標示字首均為IDC_,用SetSystemCursor()可以替換的標準滑鼠。SetSystemCusor()有兩個引數,第一個為一個透過LoadCursor()(LoadCursor()函式以被LoadImage()函式取代)、CreateCursor()或CopyCursor()獲得的Cursor指標。例如:
HCURSOR hnewCur;
hnewCur=LoadCursor(hInst,MAKEINTRE(NEWCURSOR);NEWCURSOR為hInst中的一個Cursor,
SetSystemCursor(hnewCur,OCR_NORMAL);使用使用者定義滑鼠替換系統預設滑鼠,當使用者再次使用LoadCursor(NULL,IDC_ARROW);載入標準滑鼠時獲得的將是使用者載入的而非系統預定義的滑鼠
二、 更換Cursor的方法
1、 新建Cursor
此方法最為煩瑣,但使用者擁有完全的控制權,比如可以自主設立HotSpot的位置,而不是預設的左上角,具體方法是先填寫一個ICONINFO結構:
typedef struct ICONINFO {
BOOL fIcon; 是否為圖示,將其賦值為FALSE,標示該結構用來建立滑鼠
D xHotspot; HotSpot的X座標
DWORD yHotspot; HotSpot的Y座標
HBITMAP hbmMask; 滑鼠外觀的掩模圖,用來過濾滑鼠的背景
HBITMAP hbmColor; 滑鼠外觀圖片
} ICONINFO;
填寫好後CreateIconIndirect()得到一個HICON控制程式碼,如果你建立的是滑鼠,將其轉換成HCURSOR即可,例如:
ICONINFO ii;
HCURSOR hnewCur;
ii.fIcon=FALSE;
ii.yHotspot=0;
ii.yHotspot=0;
ii.hbmMask=Loaitmap(hInst,MAKEINTRESOURCE(IDBCURSORMASK));
ii.hbmColor=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_CURSOR));
hnewCur=(HCURSOR)CreateIconIndirect(&ii);
2、 載入Cursor
載入是最常用的方法,被載入的滑鼠可以是VC整合開發環境中設計好的Cursor,也可以是.ANI或.Cur。
1) 從檔案中載入:
LoadCursorFromFile();例如:LoadCursorFromFile("C:AniCur.ANI")載入一個動畫滑鼠。
2) 從整合開發環境中載入:
LoadCursor(hInst,MAKEINTRESOURCE(NEWCURSOR));NEWCURSOR可以在資源編輯器中設計。還要說明的是LoadImage()是較LoadCursor()、LoadBitmap()和LoadCursorFromFile()的函式,它集多個函式的功能於一身,用起來更加方便,主要的區別在於其多了一個標誌來說明載入的是點陣圖、圖示函式滑鼠。
3、 使用Cursor
1) SetCursor()
捕獲視窗的WM_MOUSEMOVE或者WM_SETCURSOR訊息,在其處理函式中新增對SetCursor()的呼叫,例如:
SetCursor(hnewCur);其中hnewCur為一個透過上述的任意一種方法獲得的HCURSOR
2) SetClaong()
捕獲WM_MOUSEMOVE訊息只對有視窗函式的視窗有效,而對像Button則無法使用。應當使用setClassLong()函式替換Button類的滑鼠,例如:
HWND hbutton;
HCURSOR hnewCur;
hnewCur=LoadCursorFromFile("C:WINNTCursorsAnimCur.ANI");
hbutton=(HWND)GetDlgItem(IDC_BUTTON);//IDC_BUTTON為要改變滑鼠的控制元件ID
SetClassLong(hbutton,GCL_HCURSOR,(long)hnewCur);
3) RegisterClass()或RegisterClassEx()函式
這是最麻煩的方法,但是可以作用於屬於同一個視窗類的所有視窗。在RegisterClass()或RegisterClassEx()之前,填寫WNDCLASS時,將一個自定義的Cursor控制程式碼賦值給hCursor,例如
WNDCLASSEX wcx;
wcx.hCursor=LoadCursor(hInst,MAKEINTRESOURCE(NEWCUR));
4、 滑鼠操作函式
1) 剪下滑鼠,限制滑鼠移動
ClipCursor()函式用來剪下滑鼠,引數為一個指向RECT的指標,在通常情況下滑鼠被剪下於整個螢幕,如果一個的某個視窗要剪下滑鼠,必須先用GetClipCursor()獲得螢幕的滑鼠剪下區域,然後用ClipCursor()剪下滑鼠至程式視窗,程式退出後必須將滑鼠的剪下區域還原成螢幕矩形,以免影響其他的程式使用滑鼠。假設我們想將滑鼠限制在視窗hwnd內,應當:
RECT rt1;//存放螢幕剪下矩形
RECT rt2;//存放程式視窗剪下矩形
GetClipCursor(&rt1);//獲得當前的滑鼠剪下矩形填寫入rt1,如果滑鼠沒有被別的程式剪下,那麼整個矩形就是螢幕矩形
GetWindowRect(hwnd,&rt2);//獲得程式視窗hwnd的矩形至rt2
ClipCursor(&rt2);//剪下滑鼠之rt2
程式完成後應當:
ClipCursor(&rt1);//將滑鼠的剪下矩形還原為rt1(螢幕)
2) 跟蹤滑鼠位置
GetCursorPos()用來獲得當前滑鼠位置,SetCursorPos()設定滑鼠位置,例如:
POINT pt;//存放滑鼠位置的結構
GetCursorPos(&pt1);//獲得當前滑鼠位置
SetCursorPos(pt.x+100,pt.y+100);//根據原位置計算得到新位置
完
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993762/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA基礎:怎樣設計合適的介面(轉)Java
- Java基礎篇--設計模式Java設計模式
- WEB基礎之:CSS 使用者介面樣式WebCSS
- 《轉生成為前端程式設計師01-基礎篇》前端程式設計師
- Delphi之快速設計(程式設計篇) (轉)程式設計
- JavaScript非同步程式設計-基礎篇JavaScript非同步程式設計
- 驅動篇——核心程式設計基礎程式設計
- Android基礎及應用 介面設計Android
- Win32彙編的環境和基礎(轉)Win32
- Win32彙編的環境和基礎 (轉)Win32
- 1.7程式設計基礎之字串程式設計字串
- PERL物件程式設計基礎(轉)物件程式設計
- Go 基礎篇之 MapGo
- 第十二篇:為使用者設計良好的介面
- [.net 物件導向程式設計基礎] (16) 介面物件程式設計
- C#基礎之介面(6)C#
- Java基礎之淺談介面Java
- WTL 介面設計篇(CSkinListCtrl)
- WTL 介面設計篇(CSkinEdit)
- dart基礎之非同步程式設計Dart非同步程式設計
- Java入門之基礎程式設計Java程式設計
- WIN32 控制元件基礎Win32控制元件
- iOS動畫系列之五:基礎動畫之縮放篇&旋轉篇Swift+OCiOS動畫Swift
- java多執行緒程式設計--基礎篇Java執行緒程式設計
- Python3.7黑帽程式設計——病毒篇(基礎篇)Python程式設計
- Kafka原理分析之基礎篇Kafka
- webpack4之基礎篇Web
- WDM驅動程式設計之設計開發篇 (轉)程式設計
- iOS 8人機介面指南(一):UI設計基礎iOSUI
- 基礎才是重中之重~再說面向介面的程式設計程式設計
- DirectShow之介面實戰篇(一) (轉)
- DirectShow之介面實戰篇(二) (轉)
- DirectShow之介面實戰篇(三) (轉)
- 介面測試之基礎知識
- 自然使用者介面設計
- 設計模式討論之abstract factory篇 (轉)設計模式
- 網站設計和圖形使用者介面(GUI)設計的不同 (轉)網站GUI
- 電商設計手冊之基礎商品資訊