CLR自定义.NET控件制作(4)——鼠标消息的响应
2011-07-26 21:26
218 查看
当做到第三步的自定义视图时,采用的是将自己的视图直接覆盖原来的Control视图,由此引发了原有的Control捕获不到鼠标消息,因此我们需要增加一些方法来实现的消息响应。
采用发送消息的方式,实现鼠标消息的响应,
MyView.cpp文件的实现如下:
在MyViewControl.h设计器中响应MouseDown事件,在System::Void MyViweControl:: MyViweControl _MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)中添加相应的代码,就会响应了,由于这里只有MouseDown,所以要判断鼠标左键或者是右键,则通过参数e来判断。
对于我制作的视图,鼠标滚轮和键盘的消息无法直接发送给Control,则我重写消息处理函数DefWndProc来截获滚轮消息。MyViewControl.h中代码如下:
这样,一个粗略的自定义视图就完成了,后面还会接着进行完善和优化。
采用发送消息的方式,实现鼠标消息的响应,
MyView.cpp文件的实现如下:
#include "stdafx.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #include "myview.h" IMPLEMENT_DYNCREATE(CMyView, CView) BEGIN_MESSAGE_MAP(CMyView, CView) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_RBUTTONDOWN() ON_WM_RBUTTONUP() ON_WM_MOUSEMOVE() ON_WM_CONTEXTMENU() ON_WM_MBUTTONDOWN() END_MESSAGE_MAP() CMyView:: CMyView () { // TODO: 在此处添加构造代码 m_ParentHwnd = NULL; m_pCallBack = NULL; } CMyView::~CMyView() { } void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { CMyView::OnLButtonUp(nFlags, point); // TODO: 在此添加消息处理程序代码和/或调用默认值 LONG x = point.x; LONG y = point.y; LPARAM lparam = MAKELPARAM(x,y); ::SendMessage(m_ParentHwnd, WM_LBUTTONUP, 0, lparam); } //其他的鼠标响应函数省略 //……
在MyViewControl.h设计器中响应MouseDown事件,在System::Void MyViweControl:: MyViweControl _MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)中添加相应的代码,就会响应了,由于这里只有MouseDown,所以要判断鼠标左键或者是右键,则通过参数e来判断。
对于我制作的视图,鼠标滚轮和键盘的消息无法直接发送给Control,则我重写消息处理函数DefWndProc来截获滚轮消息。MyViewControl.h中代码如下:
void MyViweControl::DefWndProc(System::Windows::Forms::Message% m) { switch (m.Msg) { //触发键盘落下消息 case WM_KEYDOWN: { this->Focus(); switch (m.WParam.ToInt32()) { case VK_F5: MessageBox::Show("F5"); break; default: break; } } case WM_KEYUP: { } break; //触发鼠标滚轮消息 case WM_MOUSEWHEEL: { short zDelta = GET_WHEEL_DELTA_WPARAM(m.WParam.ToInt32()); //判断滚轮滚动方向 long xPos = GET_X_LPARAM(m.LParam.ToInt32()); //得到当前坐标X值 long yPos = GET_Y_LPARAM(m.LParam.ToInt32()); //得到当前坐标X值 } break; default: break; } UserControl::DefWndProc(m); }
这样,一个粗略的自定义视图就完成了,后面还会接着进行完善和优化。
相关文章推荐
- CLR自定义.NET控件制作(4)——鼠标消息的响应
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- CLR自定义.NET控件制作(2)——添加自定义属性、方法和事件
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- CLR自定义.NET控件制作(1)——制作简单的自定义控件
- CLR自定义.NET控件制作(1)——制作简单的自定义控件
- CLR自定义.NET控件制作(2)——添加自定义属性、方法和事件
- (一)CLR自定义.NET控件制作——制作简单的自定义控件
- 获取鼠标消息响应时的坐标位置应该注意的几个宏
- BCB 如何实现在不同的程序间发送和响应自定义消息?
- 让MFC滑块响应鼠标左键消息
- MFC中用户自定义类响应自定义消息
- MFC中的消息响应(左键按下鼠标)和(移动鼠标)
- [转载]SysListView32控件响应鼠标单击消息
- 在MFC中添加自定义消息响应
- 对话框中添加控件时,CMyDialog类中并没有CButton类的对象,却可以响应鼠标消息,为什么?
- Button按钮响应鼠标按下与弹起消息
- MFC中用户自定义消息的消息响应函数原型
- C++中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)
- libvlc 双击,鼠标事件消息响应