按钮控件的 BCN_HOTITEMCHANGE 事件响应函数使用心得

我们有一个对话框,对话上有一个编辑框和一个按钮,我们想实现这样一个功能:当用户把鼠标移到按钮上时,在编辑框中给用户提示,鼠标移开后恢复原来显示内容。有很多方法可以实现这个功能,我们现在使用按钮控件的 BCN_HOTITEMCHANGE 事件响应函数来实现它。

第一步:在对话框编辑器中编辑对话框,添加编辑框(IDC_EDIT)和按钮(IDOK)控件:

第二步:添加该对话框的类,右键点击对话框选择添加类即可。我这里是用基于对话框的工程,所以默认就有该类。最后在类视图中显示出该类,类名是随便取的:

第三步:打开该类的属性对话框,点击雷电状按钮添加 BCN_HOTITEMCHANGE 事件响应函数

选择 BCN_HOTITEMCHANGE 右边的下拉框,点击<Add> OnBnHotItemChangeOk

添加的响应函数应该如下:

  1. void C按钮控件的BCN_HOTITEMCHANGE消息响应函数Dlg::OnBnHotItemChangeOk(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3.     // This feature requires Internet Explorer 6 or greater.
  4.     // The symbol _WIN32_IE must be >= 0x0600.
  5.     LPNMBCHOTITEM pHotItem = reinterpret_cast<LPNMBCHOTITEM>(pNMHDR);
  6.     // TODO: Add your control notification handler code here
  7.     *pResult = 0;
  8. }

第四步:添加编辑框所对应的CString变量,右键单击该类选择添加成员变量

在打开的对话框中,如下填写:

可以在OnInitDialog函数中初始化它:

  1. BOOL C按钮控件的BCN_HOTITEMCHANGE消息响应函数Dlg::OnInitDialog()
  2. {
  3.     CDialog::OnInitDialog();
  4.                 ……省略了其他自动生成的代码
  5.     // TODO: 在此添加额外的初始化代码
  6.     m_Edit = L"初始化";
  7.     UpdateData(FALSE);
  8.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  9. }

第五步:在刚才的事件响应函数中添加代码,这里的pHotItem指向一个NMBCHOTITEM结构体,利用该结构体的成员dwFlags 可以判断鼠标是否在按钮上,MSDN是这样说明的:

dwFlags
Specifies the action of the mouse. This parameter can be one of the following values.
HICF_ENTERING
The mouse is entering the button.
HICF_LEAVING
The mouse is leaving the button.

  1. void C按钮控件的BCN_HOTITEMCHANGE消息响应函数Dlg::OnBnHotItemChangeOk(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3.     // This feature requires Internet Explorer 6 or greater.
  4.     // The symbol _WIN32_IE must be >= 0x0600.
  5.     LPNMBCHOTITEM pHotItem = reinterpret_cast<LPNMBCHOTITEM>(pNMHDR);
  6.     // TODO: Add your control notification handler code here
  7.     if( pHotItem->dwFlags & HICF_ENTERING )
  8.     {
  9.         CString temp = m_Edit;
  10.         m_Edit = L"芝麻关门";
  11.         UpdateData(FALSE);
  12.         m_Edit = temp;
  13.     }
  14.     else
  15.     {
  16.         UpdateData(FALSE);
  17.     }
  18.     *pResult = 0;
  19. }

最后运行一下,看效果

鼠标移动到按钮上(注意此时按钮边框是黄色的):

离开按钮:

全文完

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值