MFC 里面的多个按钮响应 LButtonDown,LButtonUp消息..

tangpeng4703 2011-04-19 10:13:54
最开始的时候,我从 CButton 派生了我自己的 CMyButton类,可以使一个按钮响应LButtonDown,LButtonUp消息
但是,如果,我里面有多个按钮想要处理 LButtonDown,LButtonUp消息,怎么做,
我不可以是一个按钮添加一个对应的 CMyXButton 类吧,再重写...

各位大大,应该有好的方法,多谢指教.

用途:上下左右,按下电机运动,抬起电机停止
...全文
323 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
LiuYinChina 2011-04-20
  • 打赏
  • 举报
回复
http://download.csdn.net/source/3208359
tangpeng4703 2011-04-20
  • 打赏
  • 举报
回复
楼上的,你做成控件的 思想是什么样的,可以说说吗?
tangpeng4703 2011-04-20
  • 打赏
  • 举报
回复
多谢各位TX,分开的太少了,下回多开点分,这样大家都有份了
qiuxin425 2011-04-19
  • 打赏
  • 举报
回复
不明白楼主什么意思

既然每个按钮实现功能不一样,就一个个响应自己的down消息吧

为什么还要继承一个类呢 直接响应不同的LButtonDown,LButtonUp不就完了
SEESEECN 2011-04-19
  • 打赏
  • 举报
回复
利用classWizard给每个button关联一个CMyButton类型的变量就可以了。
CMyButton m_btn2;
CMyButton m_btn1;

DDX_Control(pDX, IDC_BUTTON2, m_btn2);
DDX_Control(pDX, IDC_BUTTON1, m_btn1);
tangpeng4703 2011-04-19
  • 打赏
  • 举报
回复
我的意思是我不想每个按钮都定义一个 CMyButton 类,
我想在CMyButton的构造函数时把这些按钮区分开.用一个参数传进去,但是我现在传不进去,
Eleven 2011-04-19
  • 打赏
  • 举报
回复
多定义几个CMyXButton对象就可以了
gwlhw 2011-04-19
  • 打赏
  • 举报
回复
LZ类不是这样用的.CMyButton职能太多.一般你继承Button类无非实改变按键画面.你把控制电机类写入CMyButton.改变类的职能.
如果非要实显这种多职能的类.建仪.
CMyButton 定义一个public int m_iCase;
跟据m_Case 在Down或up 中控制电机.
然后在创建button后.改变m_iCase;
我几年前控制云台就是这样做的.不过现在不建仪这样做.这样做出的类实在太...
现在我做成控件.不用这样烦恼了.
无言猪 2011-04-19
  • 打赏
  • 举报
回复
直接用就行了,不用在构造函数里面处理.
无言猪 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tangpeng4703 的回复:]

楼上 的兄弟说的是,
我自己的打算是 在关联 按钮和 CMyButton 的时候,传一个参数到构造函数里,再 赋给 m_ID 变量做标识,
然后再用 switch ,
可以这样做吗?但是我不知道怎么 传到 构造函数里, 不知道怎么写.
谢谢这里的兄弟JM,都很热情...
[/Quote]
CButton有这个函数的啊
tangpeng4703 2011-04-19
  • 打赏
  • 举报
回复
楼上 的兄弟说的是,
我自己的打算是 在关联 按钮和 CMyButton 的时候,传一个参数到构造函数里,再 赋给 m_ID 变量做标识,
然后再用 switch ,
可以这样做吗?但是我不知道怎么 传到 构造函数里, 不知道怎么写.
谢谢这里的兄弟JM,都很热情...
无言猪 2011-04-19
  • 打赏
  • 举报
回复


switch (GetDlgCtrlID())
case IDC_BUTTON1:
break;
.........
Eleven 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tangpeng4703 的回复:]
我想可能是我说的意思不够清楚,说功能把.

有4个按钮
第一个按钮 DOWN 时,做事情1 ,UP 时做事情2
第二个按钮 DOWN 时,做事情3 ,UP 时做事情4
第三个按钮 DOWN 时,做事情5 ,UP 时做事情6
第四个按钮 DOWN 时,做事情7 ,UP 时做事情8

我想在同一个 CMyButton 里面实现.
[/Quote]
你的按钮又不关联CMyButton类,又想让按钮做CMyButton类中的特定操作?
qiuxin425 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tangpeng4703 的回复:]
我想可能是我说的意思不够清楚,说功能把.

有4个按钮
第一个按钮 DOWN 时,做事情1 ,UP 时做事情2
第二个按钮 DOWN 时,做事情3 ,UP 时做事情4
第三个按钮 DOWN 时,做事情5 ,UP 时做事情6
第四个按钮 DOWN 时,做事情7 ,UP 时做事情8

我想在同一个 CMyButton 里面实现.
[/Quote]

那就给你的CMyButton 类发消息吧,根据参数不同运行不同的作用 不知道我理解对不对
tangpeng4703 2011-04-19
  • 打赏
  • 举报
回复
我想可能是我说的意思不够清楚,说功能把.

有4个按钮
第一个按钮 DOWN 时,做事情1 ,UP 时做事情2
第二个按钮 DOWN 时,做事情3 ,UP 时做事情4
第三个按钮 DOWN 时,做事情5 ,UP 时做事情6
第四个按钮 DOWN 时,做事情7 ,UP 时做事情8

我想在同一个 CMyButton 里面实现.
Eleven 2011-04-19
  • 打赏
  • 举报
回复

BOOL CXXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
HWND hWnd = pMsg->hwnd;
TCHAR szClassName[MAX_PATH] = {0};
GetClassName(hWnd, szClassName, MAX_PATH);
if(0 == _tcscmp(szClassName, _T("Button")))
{
CDialog::PreTranslateMessage(pMsg);
CString str;
UINT nID = ::GetDlgCtrlID(hWnd);
str.Format(_T("ID: %d"), nID);
switch(pMsg->message)
{
case WM_LBUTTONDOWN:
{
str += _T("DOWN");
::SetWindowText(hWnd, str);
}
break;

case WM_LBUTTONUP:
{
str += _T("UP");
::SetWindowText(hWnd, str);
}
break;

default:
break;
}
return TRUE;
}
else
{
return CDialog::PreTranslateMessage(pMsg);
}
}
tangpeng4703 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qiuxin425 的回复:]
不明白楼主什么意思

既然每个按钮实现功能不一样,就一个个响应自己的down消息吧

为什么还要继承一个类呢 直接响应不同的LButtonDown,LButtonUp不就完了
[/Quote]

你是最明白我的意思的人.就是不同的 按钮 实现的UP/DOWN 功能不一样.

我不能 在创建 不同的 实例时,带进不同的 标识ID 吗?

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧