?? untitled-41.txt
字號:
盤消息(或是鼠標消息)并相應地控制插入符是您應用程序的工作。調用GetCaret-
PoS可以檢索插人符當前的位置。
我們知道,當窗口得到輸人焦點時接收WM_SETFOCUS消息,而失去輸人焦點時接收
、WM一KILLFOCUS消息。當窗口獲得輸人焦點時,下列WM_SETFOCUS處理程序將創建插人
符,把它定位,并顯示它:
voidCMainwindow::onsetFocus(CWnd。 pwnd)
8
Cr。atesolidCaret(2,。cyChar);
SetCaretPos(m-ptCaretPos);
ShowCaret();
g
而當輸人焦點失去時,WM.KILLFOCUS處理程序將保存插入符位置,隱蔽它并銷毀插入符:
voidCMainwindow::onKillFocus(CWfld。 pwnd)
Z
H。deCaret();
。ptCaretPos= GetCaretPos();
·· DestroyCaret();
S
在這些例子中,m-cyChar保存插入符的高度,。ptCaretPos保存插人符的位置。在焦點失去
時,插人符的位置被保存起來,當焦點重新獲得時,恢復原來位置。由于任何時刻僅有一個
窗口擁有輸人焦點,鍵盤消息被送到有輸人焦點的窗口,所以這種對插入符處理的方法確保
了“擁有”鍵盤的窗口也擁有了插人符。
插入符創建函數有兩個作用:定義插人符的樣子和聲明插入符的所有權。插人符實際
上是個位圖,因此可以給 CWnd:: CreateCaret提供一個位圖來設定它的外觀。但是通常您會
發現更好用的是CreatesolidCaret函數(由于不需要位圖所以它更易使用)。CreatesolidCaret
生成一個實體塊狀插人符,根據不同的處理,它可以成為矩形,水平或豎直線條,或介乎它們
之間的形狀。在上面onsetFocus例子中,語句
CreatesolidCaret(2,m-cyChar);
生成一個豎直線插人符,具有兩個像素寬,高度等于當前字體(。。yChar)字符的高度。與字
體比例對照是生成插人符的傳統方法,但是有的程序也將插人符的寬度與窗口邊框的寬度
對應。通過調用帶有 SM.CXBORDER的:: GetsystemMetrics可以獲得邊框的寬度。對于固定
調距字體,您可能比較喜歡使用塊形括人符,它的寬度和高度等于字符的寬度和高度,如:
CreatesolidCaret(In--cxChar,。cvChar);
因為存在不同的字符寬度,塊形插人符對按比例調距的字體沒有多大意義。CWnd的
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -