VC用鼠标画圆圈

vc++鼠标键盘消息 添加左键按下鼠标消息处理的步骤: 1、Ctrl+W打开MFC ClassWizard对话框 2、在Message Maps选项卡中,在Class Name下拉列表中选择CMy2DCADView视图类,在Object Ids列表框中选择第一个列表项CMy2DCADView,双击WM_LBUTTONDOWN消息,就为树突类添加上了鼠标左键按下的消息处理函数OnLButtonDown 阅读详情
 要求很简单:
用鼠标画圆圈,鼠标按下开始画,鼠标移动调整大小,鼠标弹起就画好了.

找了两天的GOOGLE,居然没找到,画圆的API又不太好用啊,累死人,不过问题是难不到我的

还是找到点资料,不过是画矩形的,有矩形了当然圆就不远了.

class CDrawcirleView : public CView
{
protected: // create from serialization only
        CDrawcirleView();
        DECLARE_DYNCREATE(CDrawcirleView)
         CRect     rect;   //定义个矩形变量
        bool   m_bCaptured; //截获鼠标标志
         bool   bInvert;      //转换标志
         CBrush   *m_pBrushOld;  //画刷指针
          int   m_countShapes;  //计数,不要也可
.......
}
//初始化变量
CDrawcirleView::CDrawcirleView()
{
        m_bCaptured=false;
        bInvert=false;
         m_countShapes=0;
         m_pBrushOld=NULL;
        // TODO: add construction code here

}

//转换函数
void CDrawcirleView::InvertShape(CDC *pDC, CRect &s, bool bInvert)
{
        ASSERT(pDC!=NULL);  //是否有效   
                int   nModeOld;     //旧模式   
                if(bInvert)    //判断
                {   
                      nModeOld=pDC->SetROP2(R2_NOT);  //与背景相反   
                }   
                SetPenBrush(pDC);   //设置画刷
        pDC->Ellipse(s);       //根据矩形画圆
        if(bInvert)    //再判断
                {   
                      pDC->SetROP2(nModeOld);  //恢复原来的模式   
                }   
  ResetPenBrush(pDC);     //重新设置恢复画刷

}

//设置画刷
void CDrawcirleView::SetPenBrush(CDC *pDC)
{
         ASSERT(pDC!=NULL);   
        m_pBrushOld=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);   

}
//重新设置画刷
void CDrawcirleView::ResetPenBrush(CDC *pDC)
{
  ASSERT(pDC!=NULL);   
  ASSERT(m_pBrushOld!=NULL);   
  pDC->SelectObject(m_pBrushOld);   
  m_pBrushOld=NULL;
}
//鼠标左键按下响应
void CDrawcirleView::OnLButtonDown(UINT nFlags, CPoint point)
{
        // TODO: Add your message handler code here and/or call default
        Invalidate();   //每次点左键就刷新一次
        SetCapture();   //捕获鼠标
         m_bCaptured=true;  //设置标志
         rect.left=rect.right=point.x;   //设置矩形起点为鼠标点击处
         rect.top=rect.bottom=point.y;   
        CView::OnLButtonDown(nFlags, point);
}

//鼠标滑动响应
void CDrawcirleView::OnMouseMove(UINT nFlags, CPoint point)
{
        // TODO: Add your message handler code here and/or call default
    if(m_bCaptured)  //要捕获鼠标标志为真才执行
        {
                ClientDC     dc(this);  //设备装置
                InvertShape(&dc,rect,TRUE); //转换
                rect.bottom=point.y;    //设置右下脚坐标
                rect.right=point.x;
                        InvertShape(&dc,rect,TRUE);   
         }
          
        CView::OnMouseMove(nFlags, point);
}
//鼠标弹起
void CDrawcirleView::OnLButtonUp(UINT nFlags, CPoint point)
{
        // TODO: Add your message handler code here and/or call default
       
         if(m_bCaptured)  //判断   
         {   
                ::ReleaseCapture();  //释放   
                m_bCaptured=false;  //设置标志为假
                CClientDC   dc(this);
                InvertShape(&dc,rect,TRUE);  //转换
                 rect.right=point.x;   
                 rect.bottom=point.y;   
                 InvertShape(&dc,rect,false);  //转换
        //        m_countShapes++;  //计数
         }
        CView::OnLButtonUp(nFlags, point);
}


主要作用应该在转换函数上,我不解的是
以鼠标单击处为坐标原点
万一鼠标停在了其第二,三象限处,为何还能正确画出圆???

高手指教!!!
VC++ MFC图像查看器:鼠标悬停实时局部放大(StretchBlt实现) 一个开箱即用的VC++ MFC图像查看工程,基于原生GDI的StretchBlt函数实现实时局部放大镜效果。加载BMP位图(如bitmap1.bmp)后,鼠标在视图中移动时自动框选并放大指定区域,放大倍数和位置随鼠标坐标动态调整,全程不依赖OpenCV、DirectX等第三方库。项目结构完整,含标准MFC三类文件——文档类(IMAGEDoc.cpp/h)、视图类(IMAGEView.cpp/h)负责图像载入、StretchBlt缩放绘制与鼠标响应逻辑,框架类(MainFrm.cpp/h)管理主窗口与工具栏; 阅读详情

相关推荐

鼠标响应画圆

编写一个单文档应用程序,当按下鼠标左键时,以鼠标点击位置为圆心、以20像素为直径输出一个圆,并且在圆心输出这个圆的编号(第一次按下鼠标左键时圆心处输出“1”)。

C语言画圆(详细解释易懂)

代码 #include<iostream> #include<cmath> using namespace std; int main() { for(double y=10;y>=-10;y-=1) { for(int i=0;i<10;i++) cout<<" "; double x=2.5*(10-sqrt(100-y*y)),t; for(t=0;t<x;t+=1) cout<<"

qq_41655082的博客 1万+

c语言图形学(鼠标点击画椭圆)

c语言图形学 用 鼠标点击画椭圆 mouse函数应用 源代码

C语言——中点画圆算法和Bresenham画圆算法(easyx图形库)

一、中点画圆法 首先是中点画圆法,考虑圆心在原点,半径为R的圆在第一象限内的八分之一圆弧,从点(0, R)到点(R/ , R/ )顺时针方向确定这段圆弧。假定某点Pi(xi, yi)已经是该圆弧上最接近实际圆弧的点,那么Pi的下一个点只可能是正右方的P1或右下方的P2两者之一,如图所示: 构造判别函数:F(x, y)= x2 + y2 – R2 当F(x, y)= 0,表示点在圆上,当F...

MMagicLoren的博客 2万+

C语言画图程序 ----画圆。

该程序可在TC20下运行。运行可以显示所画圆的 大小位置。背景色,前景色,图色。相信会对你 有用。

CST电子枪仿真实战:从零搭建粒子追踪模型到磁场聚焦优化

本文提供了一份CST电子枪仿真实战指南,详细讲解了从零开始搭建粒子追踪模型的全过程。内容涵盖项目初始化、Track Solver求解器基础、几何建模、粒子源定义,并重点介绍了如何通过引入和优化静磁场(如聚焦线圈配置)来实现电子束的聚焦,帮助工程师高效预测和优化束流品质。

game4的博客 336

c语言计算机图形来画八分画圆,【计算机图形学】基本图形元素:圆的生成算法...

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.youkuaiyun.com/xiaowei_cqu/article/details/7747205圆的特征圆被定义为到给定中心位置(xc,yc)距离为r的点集。圆心位于原点的圆有四条对称轴x=0,y=0, x=y和x=-y。若已知圆弧上一点(x,y),可以得到其关于四条对...

weixin_34140828的博客 1405

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6226

bresenham算法画圆c语言,Bresenham算法画圆及Open Gl实现

输入圆的半径R。计算初始值d=1-R、x=0、y=R。绘制点(x,y)及其在八分圆中的另外七个对称点。判断d的符号。若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。当x ≤y时,重复步骤3和4。否则结束。Open Gl实现头文件#include #include #include #includ...

weixin_33404412的博客 727

VC Spyglass CDC实战:如何快速定位和解决重汇聚问题(附详细调试步骤)

本文深入探讨了在SoC设计中利用VC Spyglass进行CDC验证时,如何高效定位和解决棘手的重汇聚问题。通过实战演练,详细解析了重汇聚的本质、VC Spyglass的检测逻辑,并提供了从报告筛选、GUI原理图分析到制定设计修复或约束豁免方案的全套调试步骤,帮助工程师快速攻克这一常见验证难题。

weixin_29219539的博客 754

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

趣味C语言07:绘制圆

趣味C语言系列 02— 绘制圆。增加编程的趣味性,感受编程之美!一起来看看如何绘制圆吧!

Code_流苏:在代码中寻诗意,在实践中觅真知 9612

第 4 课 树莓派5的换源与中文输入法

树莓派换源、中文输入法的安装

嵌入式老牛的博客 2288

基于C++画一个圆圈并且可以拖动

VC++画一个圆圈 并且可以拖动,这个程序的编写需要二个步骤,一个是通过画图程序画出一个圆圈,另外步骤是添加鼠标事件,用鼠标拖动圆圈随意移动位置,其实超简单,不过打基础的朋友可以看下,VC高手达人绕行。 项目源代码: 部分代码: 程序运行截图: ...

C++学习群:1037025565 1525

新手小白如何学习编程

学习目标推荐第一门语言优势网站 / APP 开发(前端)JavaScript浏览器原生支持,能快速做出可视化效果后端 / 服务器 / 数据分析Python语法简洁像英语,库多、应用广(入门友好)游戏开发先用电竞入门,再转专业引擎硬件 / 嵌入式(比如单片机)C 语言贴近硬件,行业标准办公自动化(Excel / 文档处理)Python快速解决重复工作(比如批量改文件)👉新手首选推荐。

2501_94331842的博客 2233

TIBCO Jaspersoft Studio报表开发 使用教程-进阶版

本文学习内容容器定制二级目录三级目录 容器定制 二级目录 三级目录

吉哲的博客 7521

vc中圆形跟随者鼠标移动

1.全局变量: const CSize m_sizeEllipse; CPoint m_pointTopLeft;  CSize  m_sizeOffset;   BOOL   m_bCaptured; 初始化: m_sizeEllipse(100, -100), m_pointTopLeft(0, 0), m_sizeOffset(0, 0) 2, OnDraw(CDC* p

QinBaoyan的专栏 1096

代数拓扑与AI架构:AI应用架构师深入探索数学研究如何分析复杂系统的结构特性

随着人工智能技术的飞速发展,AI系统变得越来越复杂。AI应用架构师需要有效的工具和方法来理解、设计和优化这些复杂系统。代数拓扑作为数学的一个分支,提供了独特的视角和技术来分析复杂系统的结构特性。本文旨在帮助AI应用架构师深入了解代数拓扑,以及如何将其应用于AI架构设计中,提升对复杂系统的分析能力。首先,我们会介绍代数拓扑和AI架构相关的核心概念及其联系,通过有趣的故事引入主题,让读者轻松理解复杂概念。接着,深入探讨代数拓扑的核心算法原理,结合具体的编程语言代码示例详细阐述。

大模型应用工坊 670

VC中mapx图元颜色的改变

各位高人,我求VC中mapx图元颜色改变的方法。具体: 我在VC中嵌入了mapx控件,基本功能已经实现,现在想做到:当鼠标点击(单、双都可)某个图元(如矩形)时,该图元颜色改变;鼠标移动到另外某个图元并进行鼠标点击时,上一个颜色改变效果撤消,新图元变色效果出现!!! 万分感谢!!!!!!!!!!!!!!! 大家帮帮忙啊!! 大家帮帮忙啊!!怎么高手都眼睁睁的看着不说话啊??55555

zhihu008的专栏 7418

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[推荐] VC与我的这四年[奇迹冬瓜] [问题点数:100分,结帖人runner2012] ——有感

************************************************************************* runner2012发表于: 2014-01-02 09:55:41                           下面是贴内容 http://bbs.youkuaiyun.com/topics/390683938 ***************

bluevox3000的专栏 764

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC++中的NULL_PEN和NULL_BRUSH

VC++书上有这么的一段代码 BallMovingView.h添加 int cx,cy,r; double dx,dy,dl; int rl,rt,rr,rb; CClientDC *mdc; CBrush bsh; BallMovingView.cpp // CBallMovingView 消息处理程序 void CBallMovingView::OnLButto

gsls200808的专栏 3115

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC++ 触屏右键功能不管用

正常功能:长按住某个位置,出现一个圆圈,代表激活右键。 但是VC程序没有这个圆圈,右键也不激活。 解决办法: 在需要响应右键的HWND的消息处理中增加: case WM_TABLET_QUERYSYSTEMGESTURESTATUS: { //什么都不做,直接返回 return 0; } 如果是MFC程序,增加消息映射: ON_MESSAGE(WM_TABLET_QUERYS...

iMatt的专栏 549

VC6绿色版配置全攻略:在Win10/11上运行经典开发环境

集成开发环境(IDE)是程序员进行软件开发的核心工具,其通过整合编辑器、编译器、调试器等组件,极大提升了编码效率。在Windows平台开发史上,Visual C++ 6.0(VC6)作为一款经典的IDE,其简洁的工程管理、直接的编译链接流程,至今仍是理解底层构建原理的绝佳教材。对于**遗留代码维护**与特定**教学环境**而言,VC6因其对老旧MFC项目及课程设计的完美兼容,依然具有不可替代的技术价值。本文聚焦于如何通过获取并配置完整的绿色版VC6,解决其在新系统上的兼容性问题,使其能在现代Windows系

weixin_34378969的博客 396

Open gl 的不规则图形的4联通种子递归填充和扫描线种子递归填充算法实现

http://blog.youkuaiyun.com/jiangxinyu/article/details/7911876

qxbailv15的专栏 4538

VC++界面编程之--实现一个画板并提供文字输入功能(MsPaint)

画板的实现非常有趣,首先要新建一张HBITMAP来保存原来的绘制内容,然后需要创建一个可拉伸的输入框,供用户输入文字。必要时还得提供UnDo功能,供用户取消上一次绘制的功能。 利用业余时间,我制作了一个画板程序,包含了以下几个功能: 1. 可动态拉伸及移动位置的编辑框,供用户输入文字。 2. 可画直线,圆圈,箭头,线段及线条。 3. 可使用CTRL+Z组合键,撤销上一次的绘制。

renstarone的博客 6089

easyx为基础的五子棋游戏

game start

Explorer0314的博客 1757
上一篇: VC 预编译找不到头文件
下一篇: 通讯录源代码
gnuser
博客等级 码龄20年 35粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值