Button按钮响应鼠标按下与弹起消息

摘要:
对话框上的按钮只能添加双击时间,不能响应鼠标按下和弹出消息。它可以通过两种方式实现:1.重载CButton类,将其子类化,并在项目中添加一个新的类CMyButton。基类是CButton。IDC在MyDlg对话框_BUTTON中添加变量,在变量类型中选择CMyButton,然后自定义变量名称,如m_myButton添加功能OnDown和OnUp功能响应按钮按下并弹出消息Select CMyButton in Classname,然后添加WM_ LBUTTONUP、WM_ LBUTTONUP消息映射功能。

对话框上的按钮本身只能添加单击双击时间,不能响应鼠标按下与弹起消息,可以通过两种方法实现:

1.重载CButton类,将该类子类化

在工程中添加一个新类CMyButton,基类为CButton。

在对话框MyDlg中为IDC_BUTTON添加变量,在变量类型里选择CMyButton,变量名自定义,如m_myButton。添加函数OnDown与OnUp函数响应按钮按下与弹起消息
在Class name中选择CMyButton,然后添加WM_LBUTTONUP,WM_LBUTTONDOWN消息映射函数。添加代码如下:
void CMyButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

((CMyDlg*)GetParent())->OnUp(this->GetDlgCtrlID());
CButton::OnLButtonUp(nFlags, point);
}
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

((CMyDlg*)GetParent())->OnDown(this->GetDlgCtrlID());
CButton::OnLButtonDown(nFlags, point);
}

然后MyDlg中实现函数

void CMyDlg::OnDown( UINT nID )
{

Switch(nID)

case IDC_BUTTON:

break;
}

void CMyDlg::OnUp( UINT nID )
{

...
}

2.重载Dialog的PreTranslateMessage函数
BOOL CTestDlgDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg-> message == WM_LBUTTONDOWN)
{
if(WindowFromPoint(pMsg-> pt) == GetDlgItem(IDC_BUTTON1))
{
}
}
else if(pMsg-> message == WM_LBUTTONUP)
{
if(WindowFromPoint(pMsg-> pt) == GetDlgItem(IDC_BUTTON1))
{
//AfxMessageBox( "Hello ");
}
}
return CDialog::PreTranslateMessage(pMsg);
}

from:http://blog.csdn.net/pandy1110/article/details/5953188

免责声明:文章转载自《Button按钮响应鼠标按下与弹起消息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dotnet core 使用 GBK 编码后台三层架构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

抽象工厂(AbstractFactory)模式

  抽象工厂模式又称工具箱模式。其实抽象工厂模式可以简单的理解为一个工厂生成一个产品族的产品。   抽象工厂模式可以向客户端提供一个接口,使得客户端在不指定产品的具体类型的情况下,创建多个产品族中的产品对象。这也是抽象工厂模式的用意。   抽象工厂模式面对的是一个产品等级结构的系统设计。   抽象工厂模式和工厂模式最大的区别就是:工厂模式针对的是一个产品等...

VS关于生成exe文件图片不显示的解决以及两种简单的打包方法

当辛辛苦苦写好一段带有图形界面的代码而exe无法进行图形输出,显然是一件十分苦恼的事情,下面就提供一种此类问题的解决方案,并且简单介绍一种最简单的打包方法以及vs的一种打包 问题描述 当代码在vs上运行时可以得到正常的图形输出 然而而通过exe文件打开却是一片漆黑 问题分析 既然vs上可以正常运行,说明代码是没有问题的,想要解决问题显然下一步需要从ex...

Eclipse添加中文javadoc

SUN官方API中文版【JDK1.6】1.6API文档(中文)的下载地址:ZIP格式用来设置javadoc,下载地址:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_zh_CN.zip CHM格式用来平时帮助查阅,下载地址:http://...

android中实现自定义广播

自定义广播分两个步骤:1、发送广播 2、接收广播 一、先看如何接收广播: 我使用的是Android Studio,File->New->Other->Broadcast Receiver,先创建一个广播类,这个创建的类会自动帮我们继承BroadcastReceiver类,接收广播,需要继承这个类 MyReceiver.java packa...

消息队列之

      对于消息队列,应该都不陌生。市场上很多类型的消息队列,五花八门。选择自己适合场景的消息队列并不容易。如何选择呢?这篇文章不会很简单的对比所有的队列的优劣,会从消息队列的本身的方式与优缺点,让大家觉得需不需要使用消息队列。   消息队列的架构模式       消息代理定义:消息代理是一种架构模式,用于消息验证、变换、路由。调节应用程序的通信,...

rocketmq-console 控制台使用详解

三、控制台的使用 1. 切换语言为简体中文 上图首页即为“驾驶舱”标签下的图标,中共有4个图:- Broker TOP 10 :是指前10个Brokder处理消息的数量。比如从上图可以看出来,我只有一个Brokder,并且此Brokder处理了1000条消息.- Broker 5min trend: 此图标可以筛选出某个Topic下5分钟的消息数量,可以...