捕捉屏幕“热点”

本文详细介绍了如何在Windows环境中设置热点与鼠标光标,包括生成窗体、增加资源、控件设置及代码实现,最终使鼠标在特定区域变为手形指针并显示提示文字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看看什么是屏幕"热点",当我们在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!"一行字。当鼠标离开这两个"热点"时,鼠标指针
又恢复为原来的形状。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值