一、创建光标(插入符)
问题1:什么时候创建光标?
问题2:在什么地方创建光标?
创建光标的函数:void CreateSolidCaret( int nWidth, int nHeight );
nWidth:
nHeight:
问题3:如何获取系统定义的窗口边界的宽度、高度?
如得到窗口边界的宽度,程序代码如下:
void CTest05View::OnDraw(CDC* pDC)
{
}
这样就可以知道窗口边界的宽度了。
问题4:在视图类中添加WM_CREATE消息响应后,使用CreateSolidCaret()创建了光标,运行之后,光标并没有显示出来。为什么?
The CreateSolidCaret member function automatically destroys the previous caret shape, if any, regardless of which window owns the caret. Once created, the caret is initially hidden. To show the caret, theShowCaret member function must be called.
使用CreateSolidCaret成员函数创建光标,会自动销毁先前的光标。如果有,无论是哪个窗口拥有的光标都会销毁。一旦创建了,光标的初始化是被隐藏的。为了显示光标,要调用ShowCaret成员函数。
解决以上问题后,我们可以写出一个程序,显示出光标了。
int CTest05View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
}
问题5:以上程序中的插入符大小是我们自己设置的。那如何设置插入符的大小,使它能够根据当前到设备描述表中的字体的字号而变化,就像在WORD里一样。怎么做?
1.
使用函数CDC::GetTextMetrics
BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;
lpMetrics:是指向TEXTMETRIC 结构体的指针。所以只要定义一个TEXTMETRIC 结构体,然后把地址传给它就好。PS:LP = long pointer
即使用这个函数之后,把当前设备描述表中的字体等信息都存放在了TEXTMETRIC的一个结构体中。
★
★
2.
CClientDC dc(this);
这样就可以输出符合当前设备描述表的插入符了。
完整程序代码如下:
int CTest05View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
}