VC++50个必做例子之鼠标划线

原创 2007年09月26日 02:47:00

 在视图类开头定义

class CMouseView : public CView
...{
protected// create from serialization only
    CMouseView();
    DECLARE_DYNCREATE(CMouseView)
// my add
    CString m_ClassName;
    
int
 m_Dragging;  //鼠标状态
    HCURSOR m_HCross; //鼠标形状
    CPoint m_PointOld; //鼠标的初始地点
    CPoint m_pointOrigin; //鼠标原点
 

在构造函数中对

 

CMouseView::CMouseView()
...{
    
// TODO: add construction code here
    m_Dragging=0; //鼠标的状态为0,没有按下,1为按下
    m_HCross 
= AfxGetApp()->LoadStandardCursor(IDC_CROSS); //获得鼠标的形状
赋值

 

m_HCross 存放程序的光标句柄,AfxGetApp()获得应用程序类对象的指针,这个指针用于调用应用程序类对象的成员函数LoadStandardCursor()传送光标的句柄。光标句柄参数参考LoadStandardCursor()函数

添加一个鼠标的lbuttondown 消息,然后添加代码,(晕,书是用vc++7.0,看来很多东西以后要自己想了)

(cheat---遇到困难了吗,祝贺你,你获得了进步的机会~)

 添加

void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) 
...{
    
// TODO: Add your message handler code here and/or call default
    m_pointOrigin = point; //用鼠标的坐标的赋值
    m_PointOld 
=
 point; /用鼠标的坐标的赋值
    SetCapture();  //捕获鼠标
    m_Dragging 
= 1
; //设置鼠标状态

    RECT Rect; //定义窗口范围
    GetClientRect(
&
Rect); //获得客户区的范围
    ClientToScreen(
&
Rect); //转换为屏幕坐标
    ::ClipCursor(
&Rect); // 限定鼠标范围

 

添加鼠标移动,消息

 

void CMouseView::OnMouseMove(UINT nFlags, CPoint point) 
...{
    
// TODO: Add your message handler code here and/or call default
    ::SetCursor(m_HCross); //显示鼠标形状
    

    
if(m_Dragging)
    
...{
        CClientDC ClientDC(
this);  //获得视窗设备表述表
        ClientDC.SetROP2(R2_NOT);//生成逆转当前屏幕颜色来绘图方式,
        ClientDC.MoveTo(m_pointOrigin);//画
        ClientDC.LineTo(m_PointOld);//画起点--终点线
        ClientDC.MoveTo(m_pointOrigin);
        ClientDC.LineTo(m_PointOld);

        m_pointOrigin 
= point;

    }

    
    CView::OnMouseMove(nFlags, point);
}

添加鼠标up消息

 

void CMouseView::OnLButtonUp(UINT nFlags, CPoint point) 
...{
    
// TODO: Add your message handler code here and/or call default
    if(m_Dragging)
    
...{
       m_Dragging 
= 0;
       ::ReleaseCapture();
       ::ClipCursor(NULL);

        CClientDC ClientDC(
this);
        ClientDC.SetROP2(R2_NOT);
           ClientDC.MoveTo(m_pointOrigin);
        ClientDC.LineTo(m_PointOld);
        ClientDC.SetROP2(R2_COPYPEN);
        ClientDC.MoveTo(m_pointOrigin);
        ClientDC.LineTo(m_PointOld);
    }

    CView::OnLButtonUp(nFlags, point);
}

 

 

VC++全局钩子实现鼠标坐标值实时捕获

自从使用.NET WinForm后已经很长时间没用VC++ MFC写过程序了,今天一问友给出一道VC++的题。 题目:使用钩子(HOOK)实现鼠标在屏幕上移动时实时捕获当前位置坐标,并在程序对话框的...

【VC++游戏开发#十】2D篇 —— 人工智能(一):滚动地图 & 用鼠标控制人物的走动

Hello,大家好^_^漫长的期末考试总算结束,终于有时间继续做自己喜欢的事儿了——今天,继续我们的游戏梦想……最近,有款端游很受欢迎哈——腾讯推出的一款3D竞技端游,想必很多朋友应该玩过吧。不过说实...

VC++ ListBox 响应鼠标右键消息

微软提供的 CListBox 只能响应鼠标双击消息,那如果要响应右键必须要继承 CListBox  这个,然后去响应 WM_RBUTTONUP 或 WM_RBUTTONDOWN 消息,在这个消息映射的...
  • joneeky
  • joneeky
  • 2014年04月14日 18:25
  • 2072

vc++ 添加可以滚动整个窗口的滚动条(水平和竖直)并可使用鼠标滚动轮和键盘上的上下键控制滚动条

水平和竖直的滚动条可以在窗口的属性中添加

孙鑫VC++深入详解:Lesson9 Part7---在状态栏中显示鼠标的位置

1. 要在View中捕获WM_MOUSEMOVE消息,而不是在FRAME中,因为框架被VIEW类覆盖了. 2. 在CMainFrame中       public: CStatusBar  m_w...
  • sergery
  • sergery
  • 2013年07月13日 16:31
  • 2072

VC++鼠标、键盘的模拟操作

一、鼠标事件模拟使用的函数是mouse_event()函数,对于鼠标事件我们应该确定两个问题:1.鼠标点击了哪个键:左键、中键、右键?  2.鼠标点击的位置。 mouse_event()函数常常配合...

VC++中键盘钩子和鼠标钩子

该例的钩子都是写在一个DLL中的,和应用程序独立开来的全局钩子。 一般情况下,如果要截获鼠标和普通按键,刚可以用下边的方法 鼠标: LRESULT CALLBACK MouseProc( ...
  • InLifer
  • InLifer
  • 2011年08月21日 09:42
  • 3694

VC++把图像内容保存在数据库的例子

VC++把图像内容保存在数据库的例子 http://www.codefans.net/articles/1911.shtml   VC++结合Access,把图片数据保存在Acces...
  • chla
  • chla
  • 2014年12月29日 19:00
  • 320

解决 “VC++ 多线程编程,win32,MFC 例子(转)”在高版本上运行有错误的问题

注意:在Mutithread8 以后的例子若是要在vs2010后的版本运行,1、g_Array[i]=''W'';会提示有误,改成g_Array[i]='W';。 2、下载vc_mbcsmfc.ex...

VC++ CTabCtrl控件自定义宏使用例子

为了更方便地使用VC++中的CTabCtrl控件,特在YTabCtrl.h文件中定义了几个宏,通过使用宏,可以方便地实现TAB控件的功能。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++50个必做例子之鼠标划线
举报原因:
原因补充:

(最多只允许输入30个字)