VC++定义光标热区,上网浏览网页时,当鼠标移动到屏幕的某一块区域(例如一幅图像或一个按钮)内时,鼠标指针变成了一只“手”,有时还会出现一些提示性的文字。这图像或按钮所在的区域就是光标热区。本例就介绍如何实现光标热区。编译并运行本例程序,如图所示,当鼠标光标放到图片和【Hot Button】按钮上时,鼠标光标形状呈手形,并在左下角显示提示文字。
VC++定义光标热区的例子
实现方法和思路:如果在窗口中设置鼠标光标,则Windows 会向当前窗口发送WM_SETCURSOR 消息。窗口接收
WM_SETCURSOR 消息并作相应的处理。在程序中我们通过判断鼠标光标当前位置来捕捉热区。如果鼠标光标位于热区内,则设置手形指针并显示提示文字。如果鼠标光标离开了热区,则恢复为原来的形状。程序代码为:
(1)利用AppWizard 创建基于对话框的应用程序HotCursor。
(2)将一个位图文件和手型鼠标指针文件用Import(导入)方式增加到该项目的资源文件中,分别给这两个资源指定ID 号为IDB_PIC 和IDC_HAND。
(3)对话框窗体中加入一个Picture(图像)控件,属性设置如下:ID=IDC_PICTURE、TYPE=Bitmap、Image=IDB_PIC,选中Visible、Group、Tabstop、Notify 这4 项;加入一个Button(按钮)控件,属性设置如下:ID=IDC_BUTTON1,选中Visible 和Tabstop 两项;加入一个Static Text(静态文本)控件,属性设置如下:ID=IDC_TEXT,不选中Visible 项。
(4)通过ClassWizard 响应WM_SETCURSOR 消息,其响应函数定义如下:
01 | BOOL CHotCursorDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) |
03 | switch (pWnd->GetDlgCtrlID()) // 得到鼠标所在位置的控件的ID 号 |
05 | case IDC_PICTURE: // 鼠标位于“热点”1(图像框)区域内 |
08 | SetCursor(AfxGetApp()->LoadCursor(IDC_HAND)); |
10 | GetDlgItem(IDC_TEXT)->ShowWindow(SW_SHOW); |
11 | // 显示“This is a picture!”一行字 |
12 | GetDlgItem(IDC_TEXT)->SetWindowText( "This is a picture!" ); |
16 | case IDC_BUTTON1: //鼠标位于“热点”2(按钮)区域内 |
18 | SetCursor(AfxGetApp()->LoadCursor(IDC_HAND)); |
19 | GetDlgItem(IDC_TEXT)->ShowWindow(SW_SHOW); |
20 | // 显示“This is a button!”一行字 |
21 | GetDlgItem(IDC_TEXT)->SetWindowText( "This is a button!" ); |
28 | GetDlgItem(IDC_TEXT)->ShowWindow(SW_HIDE); |
30 | SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); |
34 | return CDialog::OnSetCursor(pWnd, nHitTest, message); |
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。