先来看看什么是屏幕"热点",当我们在Windows 提供的帮助文件或上网浏
览网页时,就指当鼠标移动到屏幕的某一块区域(例如一幅图像或一个按钮)内
时,鼠标指针变成了一只"手",有时还会出现一些提示性的文字。这图像或按
钮所在的区域就是"热点"。
如果在窗口中设置鼠标光标,则Windows会向当前窗口发送WM_SETCURSOR
消息。窗口接受WM_SETCURSOR消息并作相应的处理。在程序中我们通过判断鼠
标当前位置来捕捉"热点"。如果鼠标位于"热点"内,则设置"手"形指针并显示
提示文字。如果鼠标离开了"热点",则将鼠标指针恢复为原来的形状。下面是
具体的实现步骤。
1.生成一个窗体
用VC的AppWizard(应用程序向导)生成一个工程项目Test,在生成过程中,
指定窗体类型为CDialog based(对话框)形式。
2.在项目中增加资源
将位图文件material.bmp和鼠标指针文件Hand.cur用Import(导入)方式增
加到该项目的资源文件中。分别给这两个资源指定ID号为IDB_PIC和IDC_HAND。
3.在窗体中增加控件
在窗体中加入一个Picture(图像)控件。属性设置如下:ID=IDC_PICTURE,
TYPE=Bitmap,Image=IDB_PIC。Visible,Group,Tabstop,Notify四项选中。
加入一个Button(按钮)控件。属性设置如下:ID=IDC_BUTTON1,Visible,
Tabstop两项选中。
加入一个Static Text(静态文本)控件,属性设置如下:ID=IDC_TEXT,
Visible项不选中.
4.增加相应的代码
在VC下的ClassWizard(类向导)中,选择CTestDlg类的WM_SETCURSOR消息
处理入口及其相互对应的成员函数OnSetCursor并作如下修改。
BOOL CTestDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// 在此处加入代码
switch(pWnd->GetDlgCtrlID()) // 得到鼠标所在位置的控件的ID号
{
case IDC_PICTURE: // 鼠标位于"热点"1(图像框)区域内
{
// 设置鼠标指针为"手"形指针
SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
// 将提示文字可见
GetDlgItem(IDC_TEXT)->ShowWindow(SW_SHOW);
// 显示"This is a picture!"一行字
GetDlgItem(IDC_TEXT)->SetWindowText("This is a picture!");
return TRUE;
}
break;
case IDC_BUTTON1: //鼠标位于"热点"2(按钮)区域内
{
SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
GetDlgItem(IDC_TEXT)->ShowWindow(SW_SHOW);
// 显示"This is a button!"一行字
GetDlgItem(IDC_TEXT)->SetWindowText("This is a button!");
return TRUE;
}
break;
default: // 鼠标离开了"热点"
{
// 将提示性文字隐藏
GetDlgItem(IDC_TEXT)->ShowWindow(SW_HIDE);
// 将鼠标指针设置为标准的鼠标指针
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
return TRUE;
}
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
5.编译并运行项目。
在Project的Settings项中设置WIN32 RELEASE(发行模式)后编译并
运行该工程。这时,屏幕上出现一个窗体,当鼠标移动到位图或按钮上时
,鼠标都变成了一只"手"。在底部会分别出现"This is a
picture!",
"This is a button!"一行字。当鼠标离开这两个"热点"时,鼠标指针
又恢复为原来的形状。
捕捉屏幕“热点”
最新推荐文章于 2025-08-10 16:08:53 发布