关于这个问题,我看到有人在2004年提出过,不知道当时解决了没。
http://bbs.csdn.net/topics/50435702具体的描述如下:
我重载了Button,并对OnPaint、OnLButtonDown、OnLButtonUp、OnEraseBkgnd这四个事件进行了处理。但是发现在CDialog无法触发重载按钮的onclick事件。
重载按钮的代码如下:class CMyBitmapButton : public CButton
{
DECLARE_DYNAMIC(CMyBitmapButton)public:
CMyBitmapButton();
~CMyBitmapButton();protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};
IMPLEMENT_DYNAMIC(CMyBitmapButton, CBitmapButton)CMyBitmapButton::CMyBitmapButton()
{
}CMyBitmapButton::~CMyBitmapButton()
{
}
BEGIN_MESSAGE_MAP(CMyBitmapButton, CBitmapButton)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()void CMyBitmapButton::OnLButtonDown(UINT nFlags, CPoint point)
{
//todo
}
void CMyBitmapButton::OnLButtonUp(UINT nFlags, CPoint point)
{
//todo
}
void CMyBitmapButton::OnPaint()
{
//todo
}
void CMyBitmapButton::OnEraseBkgnd(CDC* pDC)
{
//todo
}CDialog的按钮点击事件如下:BEGIN_MESSAGE_MAP(CDlgLobby, CDialog)
...
ON_BN_CLICKED(IDC_TABLE_1_1, &CDlgLobby::OnSelectTable1)
...
END_MESSAGE_MAP()先在MyDialog上面放一个Button,然后通过CMyBitmapButton m_hTable1_1;
m_hTable1_1.SubclassDlgItem(IDC_TABLE_1_1, this);关联到自定义的按钮.现在的问题是MyDialog收不到onclick消息,该怎么处理
http://bbs.csdn.net/topics/50435702具体的描述如下:
我重载了Button,并对OnPaint、OnLButtonDown、OnLButtonUp、OnEraseBkgnd这四个事件进行了处理。但是发现在CDialog无法触发重载按钮的onclick事件。
重载按钮的代码如下:class CMyBitmapButton : public CButton
{
DECLARE_DYNAMIC(CMyBitmapButton)public:
CMyBitmapButton();
~CMyBitmapButton();protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};
IMPLEMENT_DYNAMIC(CMyBitmapButton, CBitmapButton)CMyBitmapButton::CMyBitmapButton()
{
}CMyBitmapButton::~CMyBitmapButton()
{
}
BEGIN_MESSAGE_MAP(CMyBitmapButton, CBitmapButton)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()void CMyBitmapButton::OnLButtonDown(UINT nFlags, CPoint point)
{
//todo
}
void CMyBitmapButton::OnLButtonUp(UINT nFlags, CPoint point)
{
//todo
}
void CMyBitmapButton::OnPaint()
{
//todo
}
void CMyBitmapButton::OnEraseBkgnd(CDC* pDC)
{
//todo
}CDialog的按钮点击事件如下:BEGIN_MESSAGE_MAP(CDlgLobby, CDialog)
...
ON_BN_CLICKED(IDC_TABLE_1_1, &CDlgLobby::OnSelectTable1)
...
END_MESSAGE_MAP()先在MyDialog上面放一个Button,然后通过CMyBitmapButton m_hTable1_1;
m_hTable1_1.SubclassDlgItem(IDC_TABLE_1_1, this);关联到自定义的按钮.现在的问题是MyDialog收不到onclick消息,该怎么处理
解决方案 »
- 哪里有VC make详细用法的资料,还有关于dsw,dsp,vcproj,sln格式的资料?
- 如何得到程序从启动后已过去的时间(毫秒)
- 请问在DOS操作平台下能够开启多个进程吗?
- 请教:在一个类的成员函数中来个“delete this;”,会出现什么结果?
- VC.NET 2003将出,是否意味着VC.NET只是过滤性产品?我们可否由VC6直跨到VC.NET 2003呢?
- 如何填充两弧线之间形成的一段范围
- S.O.S!关于用VC++编写远程控制
- 看了这句话,我不知还该不该学COM了。
- 有用BCG界面库的吗?里面的折线图示例,怎么显示不对呀??
- 如何在VC++6.0中嵌入汇编语句?
- 创建线程出错
- 一个程序的界面,Spy++指到哪个控件得到的句柄都是一样的(有图)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 CButton::OnLButtonDown(nFlags, point);
}
现在按照您的说法,我又给加回去了。发现release版本不会报错,debug版本就报截图的那个错误
{
IsLButtonDown = FALSE;
}CMyBitmapButton::~CMyBitmapButton()
{
}
BEGIN_MESSAGE_MAP(CMyBitmapButton, CButton)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()