📄 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 + -