这个是用最简单的方法,移动客户区,圆会不见,所以下一篇我还要改进。

首先新建一个MFC单文件,在资源那里的菜单下,建立画笔,可以弹出红画笔,蓝画笔和绿画笔,,给出ID_RED,ID_BLUE,ID_GREEN并且在视类下建立类向导添加command函数,这时候,我们要想下怎么表示这些颜色,我的做法是,在视类定义一个公有整型变量int m_pencolor,还要设置三个布尔变量(表示打钩状态,等下会说),(可以默认选红色)在视类头文件加上

{。。。

public:
bool statu2;//绿画笔打钩状态
bool statu1;//蓝画笔打钩状态
bool statu;//红画笔打钩状态
int m_pencolor;

CPoint point;

。。。

}

构造函数初始化 设置

statu=1;statu1=0;statu2=0;

m_pencolor=1;

point.x=230;

point.y=300;

我们默认选的是红画笔,当我们点击其他颜色的笔时,要在相应画笔前面打钩,这时候需要一个更新函数,也是建立类向导,选择视类的更新函数

void CXfView::OnUpdateRed(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_pencolor=1)

pCmdUI->SetCheck(statu);//把菜单选中 设置3个布尔值

}

void CXfView::OnUpdateBlue(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_pencolor=2)
pCmdUI->SetCheck(statu1);

}

void CXfView::OnUpdateGreen(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_pencolor=3)

pCmdUI->SetCheck(statu2);

}

command函数那里写上代码:

void CXfView::OnRed()

{ // TODO: Add your command handler code here

m_pencolor=1;

}

void CXfView::OnBlue()

{// TODO: Add your command handler code here

m_pencolor=2;

}

void CXfView::OnGreen()

{// TODO: Add your command handler code here

m_pencolor=3;

}

然后颜色现在是可以选择了,那么我们要怎样用鼠标画圆呢?

右击视类,添加window message hanlder

void CXfView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
COLORREF color;
switch(m_pencolor)//这里是用选择语句判断选择什么颜色
{
case 1:
m_pencolor=RGB(255,0,0);//m_pencolor=1为红色
statu=1;//这里还要再在视类设置布尔三个变量,用来表示菜单栏那里是否打钩,

//这里选择红画笔,打钩
statu1=0;
statu2=0;
break;
case 2:
m_pencolor=RGB(0,0,255);
statu=0;
statu1=1;
statu2=0;
break;
case 3:
m_pencolor=RGB(0,255,0);
statu=0;
statu1=0;
statu2=1;
break;
}
CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID,10,m_pencolor);//实心线
CClientDC dc(this);
pOldPen= dc.SelectObject(&NewPen);

dc.Ellipse(point.x-50,point.y-50,point.x+50 ,point.y+50);//画圆
dc.SelectObject(pOldPen);//这句话(我也不太懂)

CView::OnLButtonDown(nFlags, point);
}

这样就基本好了,这里是临时写的,之前试过是可以的,不知会不会遗漏什么,欢迎大家批评指正。

这个是不能实现重绘的,以后完善(呵呵,这些都是我的作页来着)

实现MFC菜单画笔画圆,并且打钩的更多相关文章

  1. PostScript的简单例子-用粗线画一个圆

    一 近期需要用到PostScript,查询资料学习PS的语法 简单的画一个圆的例子 %!PS-Adobe-3.0 /inch{72 mul} def 4.25 inch 5.5 inch 1.5 in ...

  2. 看opengl 写代码(4) 画一个圆

    opengl 编程指南 P30 以下代码 是 用 直线 连起来 画一个圆. // circle.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...

  3. html、css如何画实心圆

    css3画实心圆 实现方法相当简单,css代码如下: .circle{ width:100px; height:100px; border-radius:50px; /* 图形的半径 */ }

  4. zrender源码分析--初探如何画一个圆

    今天是想看看使用zrender框架如何去,画一个圆,再加“circle”的文字在圆心. 然后开始代码: 如何部署代码,让zrender跑起来这边就不说了,官方例子就有写,地址是:https://git ...

  5. SDL系列之 - 用SDL动态地画一个圆喽 && 设置背景色

    #include <SDL.h> #include <stdlib.h> #include <string.h> #include <math.h> # ...

  6. Bresenham算法画填充圆及SDL代码实现

    画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯 ...

  7. vc2008中mfc菜单、控件等汉字显示为问号或乱码的解决方法

    在vc2008中建立基于mfc的project.在向导的Application type页面中如果在resource language选项中选择"英语(美国)"(图一),那么在pr ...

  8. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

  9. [游戏学习25] MFC 橡皮筋画线效果

    >_<:这是给出窗口内外不同情况的处理展示的例子. >_<:MouseCap.h #include<afxwin.h> class CMyApp :public C ...

随机推荐

  1. turn.js 图书翻页效果

    今天用turn.js 做图书的翻页效果遇到问题: 图片路径总是出错 调了一天,总算调出来了 我用的thinkphp,其他的不知道是不是一样 三 个地方要改动: 1.后台查出地址 注意的地方:1.地址要 ...

  2. MYSQL分库分表和不停机更改表结构

    在MYSQL分库分表中我们一般是基于数据量比较大的时间对mysql数据库一种优化的做法,下面我简单的介绍一下mysql分表与分库的简单做法. .分库分表 很明显,一个主表(也就是很重要的表,例如用户表 ...

  3. codeForce-589D Boulevard(判断线段是否相交)

    题目大意:n个人.一个区间.每个人都会在某个时间段内按相同的速度(所有人的速度都一样,都是1或-1)在他的区间内从一个端点走到另一个端点(只走一次).问每个人会与几个人碰面. 题目分析:将时间看成一个 ...

  4. Android学习二:Http操作

    1.初步认识HTTP HTTP(Hypertext Transfer Protocol超文本传输协议)是网络应用层协议,建立在TCP/IP基础上,HTTP使用可靠的TCP连接,默认端口是80. 较常用 ...

  5. 【redis】 redis 创建集群时,Waiting for the cluster to join.... 一直等待

    redis 搭建集群时,一直join.... ./redis-trib.rb  create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1: ...

  6. [转]Dll注入经典方法完整版

    Pnig0s1992:算是复习了,最经典的教科书式的Dll注入. 总结一下基本的注入过程,分注入和卸载 注入Dll: 1,OpenProcess获得要注入进程的句柄 2,VirtualAllocEx在 ...

  7. LeetCode "Integer Break"

    A typical CS style DP based solution: class Solution(object): def __init__(self): self.hm = {} def i ...

  8. shell 脚本定时创建月份表

    #!/bin/shuser='root'pass='root'name='vfc_sport' # 数据表名定义timestamp=`date -d "next month" +% ...

  9. Javascript Promise对象学习

    ES6中的Promise对象 var p = new Promise(function(resolve, reject){ window.setTimeout(function(){ console. ...

  10. Android主流UI开源库整理(转载)

    http://www.jianshu.com/p/47a4a7b99364 标题隐含了两个层面的意思,一个是主流,另一个是UI.主流既通用,一些常规的按钮.Switch.进度条等控件都是通用控件,因此 ...