win32 使用者介面設計基礎之cursor篇

2021-06-16 04:45:56 字數 2953 閱讀 3559

一、   標準滑鼠替換

windows提供了一系列標準滑鼠,其標示字首均為idc_,用setsystemcursor()函式可以替換系統的標準滑鼠。setsystemcusor()有兩個引數,第乙個為乙個通過loadcursor()(loadcursor()函式以被loadimage()函式取代)、createcursor()或copycursor()獲得的cursor指標。例如:

hcursor   hnewcur;

hnewcur=loadcursor(hinst,makeintresource(newcursor);newcursor為hinst中的乙個cursor,

setsystemcursor(hnewcur,ocr_normal);使用使用者定義滑鼠替換系統預設滑鼠,當使用者再次使用loadcursor(null,idc_arrow);載入標準滑鼠時獲得的將是使用者載入的而非系統預定義的滑鼠  

二、   更換cursor的方法

1、   新建cursor

此方法最為煩瑣,但使用者擁有完全的控制權,比如可以自主設立hotspot的位置,而不是預設的左上角,具體方法是先填寫乙個iconinfo結構:

typedef   struct   iconinfo     iconinfo;    

填寫好後呼叫createiconindirect()得到乙個hicon控制代碼,如果你建立的是滑鼠,將其轉換成hcursor即可,例如:

iconinfo   ii;

hcursor   hnewcur;

ii.ficon=false;

ii.yhotspot=0;

ii.yhotspot=0;

ii.hbmmask=loadbitmap(hinst,makeintresource(idbcursormask));

ii.hbmcolor=loadbitmap(hinst,makeintresource(idb_cursor));

hnewcur=(hcursor)createiconindirect(&ii);  

2、   載入cursor

載入是最常用的方法,被載入的滑鼠可以是vc整合開發環境中設計好的cursor,也可以是.ani或.cur檔案。

1)   從檔案中載入:

loadcursorfromfile();例如:loadcursorfromfile( "c: ")載入乙個動畫滑鼠。  

2)   從整合開發環境中載入:

loadcursor(hinst,makeintresource(newcursor));newcursor可以在資源編輯器中設計。還要說明的是loadimage()是較loadcursor()、loadbitmap()和loadcursorfromfile()更新的函式,它集多個函式的功能於一身,用起來更加方便,主要的區別在於其多了乙個標誌來說明載入的是點陣圖、圖示函式滑鼠。

三、   使用cursor

1)   setcursor()

捕獲視窗的wm_mousemove或者wm_setcursor訊息,在其處理函式中新增對setcursor()的呼叫,例如:

setcursor(hnewcur);其中hnewcur為乙個通過上述的任意一種方法獲得的hcursor

2)   setclasslong()

捕獲wm_mousemove訊息只對有視窗函式的視窗有效,而對像button控制項則無法使用。應當使用setclasslong()函式替換button類的滑鼠,例如:

hwnd   hbutton;

hcursor   hnewcur;

hnewcur=loadcursorfromfile( "c://winnt//cursors ");

hbutton=(hwnd)getdlgitem(idc_button);//idc_button為要改變滑鼠的控制項id

setclasslong(hbutton,gcl_hcursor,(long)hnewcur);  

3)   registerclass()或registerclas***()函式

這是最麻煩的方法,但是可以作用於屬於同乙個視窗類的所有視窗。在registerclass()或registerclas***()之前,填寫wndclass時,將乙個自定義的cursor控制代碼賦值給hcursor,例如

wndclas***   wcx;

wcx.hcursor=loadcursor(hinst,makeintresource(newcur));  

四、   滑鼠操作函式

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);//根據原位置計算得到新位置    

WIN32使用者介面設計基礎之Menus 篇

2002 04 05 09 53 出處 yesky 三 選單的動態更改 1 插入新的選單項insertmenuitem 首先填寫menuinfo結構 typedef struct tagmenuiteminfo menuiteminfo,lpmenuiteminfo 然後呼叫insertmenu 函...

Android 使用者介面設計之TextView

2.文字的鏈結 將文字中的 號碼,email url layout 中的xml 檔案中進行新增 另一種是在 activity 的oncreate 方法中新增 xml檔案設定 all,map,none,email,phone 以及web 在這我們以設定為 phone 為例。號碼不是尚矽谷老師的,隨便編...

Android 使用者介面設計之TextView

5.富文字 先說一下什麼是富文字,富文字就是對文字中一些特殊文字或者的特殊顯示。例如我們我們發一段話 你還沒有還我 100塊錢。這句話我們要強調 100塊錢 這是後我們可以把它顯示為特殊的顏色,這其實就是一種富文字。有時候我們 qq聊天經常發表情,其實這也是一種富文字。富文字,可以支援一部分的 ht...