我们用MFC开发应用程序时,通常在窗口中放置大量的控件,通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息,例如我们在对话窗口中加入一个静态文本控件(CState类),这时在ClassWizard中此控件没有任何消息,也就无法完成所要求的控制。VC++中为我们提供了一个API函数GetWindowRect(),此函数可以获得窗口中所有控件的位置,这样我们就可以在窗口的消息中利用位置判断来实现事件控制。
基于以上原理,可以轻松的实现超链接控制和动态提示以及窗口区域事件捕获等功能。以超链接控制为例,通常我们在对话框中加入电子邮件或主页的超链接,超链接一般要求获得焦点后鼠标变形,并且能响应OnClick事件,下面简单介绍其实现原理。
1.首先创建基于对话框的Sample工程。
2.在Sample工程的资源文件中引入光标文件将其ID设为“IDC_HAND”,在SAMPLE工程中的DIALOG对话框中加入静态文本控件将其ID设为“IDC_LINK”,Caption设为“http://netvc.6to23.com”
3.在对话类的头文件(SampleDlg.h)添加数据成员
protected:
RECT m_pRectLink; //用于保存静态文本框的屏幕坐标
4.获取控件坐标
在对话类成员函数OnInitDialog()中添加以下代码(sampleDlg.cpp):
GetDlgItem(IDC_LINK) -> GetWindowRect(&m_pRectLink);
//将静态文本的屏幕坐标存放在m_pRectLink中