程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> WIN32用戶界面設計基礎之Caret篇

WIN32用戶界面設計基礎之Caret篇

編輯:vc教程

  當窗口擁有鍵盤焦點或者處於激活狀態時,可以創建一個Caret,失去焦點之前必須銷毀該Caret。CreateCaret()函數用來創建Caret,系統將該函數指定的位置Pixel取反得到Caret。Caret建立後用ShowCaret()顯示Caret並使其閃爍。獲得閃爍速度(Flash Time)用GetBlinkTime()*2,設置閃爍時間用SetBlinkTime()/2,Flash Time是Caret從復原到反色再到復原的周期,而Get/SetBlinkTime()得到和設置的是Caret從復原到反色或者從反色到復原的時間,因此要乘/除2。獲得Caret用GetCaretPos(),參數為一個POINT結構,存放Caret在當前窗口中的位置,SetCaretPos()在Caret不可見的情況下仍然起作用。暫時隱藏Caret使用HideCaret(),再顯示用ShowCaret(),徹底銷毀Caret用DestroyCaret。

  一、 創建並顯示Caret

  改變或顯示一個窗口的Caret,應捕獲其WM_SETFOCUS消息

  1、 CreateCaret()函數
    CreateCaret(hWnd,(HBITMAP)NULL,30,60)

    hWnd:擁有Caret的窗口句柄

    NULL:如果使用位圖Caret,此參數為一個HBITMAP,該HBITMAP可以通過LoadBitmap、CreateBitmap和CreateDIBitmap獲得,如果為NULL,將建立一個實心矩形光標。

    30,60:光標的大小單位為邏輯單位,如果非NULL的位圖句柄,這兩個參數被忽略。

   使用位圖光標

HBITMAP hbm;
hbm=LoadBitmap((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_BITMAP1));
CreateCaret(hWnd,(HBITMAP)hbm,0,0);

  2、 為了精確確定Caret的大小,可以傳遞SM_CXBORDER和SM_CYBORDER給GetSystemMetics()函數獲得以Pixel為計量單位的窗口的邊框的寬和高,據此計算Caret的大小。

  二、 使Caret隨鼠標的移動而移動

  1、 捕獲WM_MOUSEMOVE消息:

    int x:
    int y;
    x=LOWord(lParam);
    y=HIWord(lParam);

  獲得事件發生時鼠標的位置

  2、 將Caret移至光標處:

SetCaretPos(x,y)

  3、 在隨鼠標移動的過程中Caret的閃爍效果不明顯,鼠標停留片刻後,Caret恢復正常閃爍。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved