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

首先新建一个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. WOJ-1097

    Description JYY has placed N bombs on the plane. We assume that the firepower area of each bomb is c ...

  2. ssh隧道(端口转发)

    本地转发: ssh -Nf -L [bind_address:]port:host:hostport sshServer -Nf 后台运行 -L 本地转发 [bind_address] 绑定本地地址, ...

  3. JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target

    http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ...

  4. PageRank与TrustRank影响因素分析

    PageRank(PR)里的page不是指网页,而是指Google创始人拉里?佩奇(Larry Page),是他在2001年申请的专利中以自己名字命名的,Google的PageRank根据网站的外部链 ...

  5. java 集合的使用 (一)

    1.使用整型列表 List<int> lstInt=new List<int>(); 结果不对,报的错误是:Syntax error, insert "Dimensi ...

  6. Apache Shiro 使用手册(一)Shiro架构介绍

    一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能:  认证 - 用户身份识别,常被称为用户"登录": 授权 - ...

  7. 【MySQL】InnoDB日志机制深入分析

    版权声明:尊重博主劳动成果,欢迎转载,转载请注明出处 --爱技术的华仔 Log & Checkpoint Innodb的事务日志是指Redo log,简称Log,保存在日志文件ib_logfi ...

  8. UDP发送数据测试

    一个合作伙伴说UDP发送数据,A(IP:192.168.1.100 子网掩码255.255.255.0)网段能发数据到B网段,但B(IP:192.168.2.100 子网掩码255.255.255.0 ...

  9. Angular(1)

    1.设计原则 1.YAGNI  不要把未来需求引入当前工程   2.KISS  keep it simple and stupid  语义化标记 合理注释 符合规定的命名 3.DRY(don't re ...

  10. BlockingQueue深入分析

    1.BlockingQueue定义的常用方法如下   抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() p ...