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++50个必做例子之显示

学习MFC 看了很多书,有点乱~看了孙鑫老师教程更乱~我知道自己的底子不好~ 所以找了好多文字版的~推荐:侯捷的简体中文版VC++深入浅出(快速略读)推荐:孙鑫老师的视频教程前3集 多看两边,(再快读...
  • hannsoft
  • hannsoft
  • 2007年09月26日 00:46
  • 466

java---鼠标画线

Line.java文件-------驱动类   import javax.swing.JFrame;public class Line{   public static void main(Strin...
  • xiaoyuyou
  • xiaoyuyou
  • 2009年12月02日 12:28
  • 1145

unity3D 鼠标点击拖动画线(平面)

using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public Material...
  • juan_bo
  • juan_bo
  • 2016年10月13日 16:24
  • 1020

OpenGL中与鼠标的交互——点击鼠标左键,在鼠标处画点

    下面介绍如何运用实现在鼠标点击处,实现画点。(C++实现)          要将鼠标有关的数据发送给应用程序,则需要将鼠标事件注册到glutMouseFunc(myMouse)。其中myMo...
  • yeqiu712
  • yeqiu712
  • 2009年12月07日 16:53
  • 14956

Matlab GUI鼠标画线

(代码: 1\UI_line.m) % 窗体打开前,先执行该函数 function UI_line_OpeningFcn(hObject, eventdata, handles, varargi...
  • houyanhua1
  • houyanhua1
  • 2017年10月18日 20:11
  • 215

MFC鼠标响应、鼠标画线

鼠标响应关键就是对两个函数进行操作:OnLButtonDown和OnLButtonUp; 1、使用MFC AppWizard(exe)建立一个单文档MFC工程 2、首先要在Cxxx...
  • Arcsinsin
  • Arcsinsin
  • 2013年08月09日 18:13
  • 6076

鼠标在图像中划线,返坐标值

1.比较笨的方法 function  MAS=zhongzidian(img_name,N)  [cow,rol,win]=size(img_name);  MAS=zeros(cow,rol)...
  • hkdhhy2017
  • hkdhhy2017
  • 2017年05月25日 11:15
  • 109

canvas实现鼠标划线

  • sweetllh
  • sweetllh
  • 2017年06月13日 17:30
  • 578

人有善愿 , 天必佑之 !

一个人的快乐,不是因为他拥有的多,而是因为他计较的少。  生气,就是拿别人的过错来惩罚自己。原谅别人,就是善待自己。  未必钱多乐便多,财多累己招烦恼。清贫乐道真自在,无牵无挂乐逍遥。  ...
  • zhongyi09108159
  • zhongyi09108159
  • 2012年10月29日 13:05
  • 3500

unity--鼠标画线、画图实现

在untiy有时候需要用到画线,比如说在做签名或者画图的时候,主要用的组件就是LineRenderer实现代码 using UnityEngine; using System.Collections...
  • liang_704959721
  • liang_704959721
  • 2015年04月03日 09:10
  • 4441
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++50个必做例子之鼠标划线
举报原因:
原因补充:

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