要求

1、 在客户区输出一条顺时针45度的直线、一个正方形、一个大圆;

2、 在客户区输出一个图标;

3、 当按下鼠标左键时,将以鼠标坐标为圆心画直径为20个单位的小圆。

  1. 首先设置两个变量,用来保存颜色和线宽。这样就但是通过程序设置圆或者线条的颜色和宽度了。(加入在view类的构造函数中)
COLORREF color;
int penwidth;</span>

    2. 画45度直线的实现代码例如以下:

CClientDC dc(this);
CPen pen(PS_SOLID,penwidth,color);
dc.SelectObject(&pen);
dc.MoveTo(0,0);
dc.LineTo(400,400);

    3. 画矩形的代码实现例如以下:

CClientDC dc(this);
CPen pen(PS_SOLID,penwidth,color);
dc.SelectObject(&pen);
dc.Rectangle(200,200,400,400);

    4. 画圆的实现代码例如以下:(凝视掉的部分为CPen填充矩形,未凝视的是用CBrush填充矩形)

CClientDC dc(this);
//CPen pen(PS_SOLID,penwidth,color); CBrush brush=RGB(255,255,0);
CBrush* pbr=dc.SelectObject(&brush); dc.SelectObject(&brush);
dc.Ellipse(300,300,400,400);
// TODO: Add your command handler code here
//CDC* pdc=GetDC();
//pdc->Ellipse(300,300,400,400);

     5. 在客户区输出一个图标的实现代码例如以下:(提前通过编译器将程序导入)

CDC* pdc=GetDC();
BITMAP bitmap;
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);
bm.GetBitmap(&bitmap);
CClientDC dc(this);
dc.CreateCompatibleDC(pdc);
dc.SelectObject(&bm);
pdc->BitBlt(320,30,180,120,&dc,80,50,SRCCOPY);

      6. 当按下鼠标左键时,将以鼠标坐标为圆心画直径为20个单位的小圆,实现代码例如以下:(首先加入鼠标左键按下的响应事件,然后加入例如以下代码)

CClientDC dc(this);
CPen pen(PS_SOLID,penwidth,color);
dc.SelectObject(&pen);
dc.Ellipse(point.x-10,point.y-10,point.x+10,point.y+10);

执行截图例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

參考博客:用MFC “菜单响应事件” 实现画图

本程序的下载地址:点击下载  http://download.csdn.net/detail/rl529014/9498564

MFC文档(SDI)应用:画图程序(画圆、画线、鼠标事件)的更多相关文章

  1. MFC文档视图结构学习笔记

    文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理 ...

  2. Open Cascade创建自己的MFC文档程序

    项目初始设置在Visual studio中创建一个单文档MFC项目(本例以MFCTest为名称): 在项目属性的VC++页面设置包含目录.库目录,在链接器的输入中添加OCC库目录下的所有.lib文件名 ...

  3. 理解MFC 文档、视图、框架[转]

    理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...

  4. 深入分析MFC文档视图结构(项目实践)

    k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer ...

  5. VC++环境下单文档SDI与OpenGL多视图分割窗口的实现-类似3DMAX的主界面

    本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面.首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话 ...

  6. 操作系统实验 windows编程多线程 生产者消费者问题 画圆画方(内置bug版)

    实验3:随便写的 #include <windows.h> #include <string> #include <stdio.h> #pragma warning ...

  7. 基于MFC的单文档,多文档,对话框应用程序

    从类的角度区分: 基于对话框(3个类): CAboutDlg 程序名App 程序名Dlg 单文档(5个类): CAboutDlg CMainFrame 程序名App 程序名Doc 程序名View 多文 ...

  8. MFC 修改 单文档 SDI 窗体 标题

    程序主窗口标题栏的一般形式为: 文档标题—主窗口标题 1.修改文档标题 修改CExamDoc::onNewDocument()函数为: BOOL CExamDoc::OnNewDocument() { ...

  9. MFC文档、视图和框架

    文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档        文档对象用于管理和维护数据,包括保存数据.取出数据以及 ...

随机推荐

  1. jQuery写一个简单的弹幕墙

    概述 近几年由于直播,弹幕流行起来,之前看到过用js制作弹幕墙的思路,觉得很有趣.自己就花了点时间把他做成了更灵活的jQuery插件,现在分享出来. 详细 代码下载:http://www.demoda ...

  2. 原创+转发:微信小程序navigator、redirectTo、switchTab几种页面跳转方式

    什么是事件? 事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 详解(以常见的tap点击事情为例) 模板.wxml代码: <view id="tapTest ...

  3. nexus 介绍

    http://juvenshun.iteye.com/blog/349534

  4. 【LeetCode】50. Pow(x, n) (3 solutions)

    Pow(x, n) Implement pow(x, n). 按照定义做的O(n)肯定是TLE的. 利用这个信息:x2n = (xn)2 有个注意点,当n为负是,直接取反是不可行的. 由于int的表示 ...

  5. SDUT 2623 The number of steps (概率)

    The number of steps Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Mary stands in a stra ...

  6. java JAXB + STAX(是一种针对XML的流式拉分析API)读取xml

    JDK1.5需要添加jar包,1.6以后就不需要了<dependency> <groupId>stax</groupId> <artifactId>st ...

  7. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截

    程序猿修仙之路--数据结构之你是否真的懂数组?   数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少. ...

  8. Python学习笔记016——面向对象

    面向对象是指用类来描述一个对象(实例),用类来建立实例与实例的关联关系 对象 : object     实例 : instance 1 类 1.1 什么是类 类是用来描述对象的工具,用类可以创建一个或 ...

  9. Solutions for the Maximum Subsequence Sum Problem

    The maximum subarray problem is the task of finding the contiguous subarray within a one-dimensional ...

  10. linux内存回收机制

    无论计算机上有多少内存都是不够的,因而linux kernel需要回收一些很少使用的内存页面来保证系统持续有内存使用.页面回收的方式有页回写.页交换和页丢弃三种方式:如果一个很少使用的页的后备存储器是 ...