MFC计算机图形学(1)

2023-05-16

这学期上了计算机图形学,用MFC来绘制简单的图形。下面就简单介绍一下用cv++来绘制图形.

VC++ 安装

VC++我基本不用的,平时写C/C++的代码都用Code::Blocks.
VC++基本都是绿色版,下载解压就可以用了,但是在中国,你知道的,下载安装的时候注意一点。(你知道的)
下载解压完,打开

\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE

正常情况下双击那个文件就可以打开vc++,
但是,却发现下面那个错误。。。。。
这里写图片描述
没错,就是那个错误,查了一下,原来是那个文件有问题,重新下一个替换才可以。好吧,重新去弄。
一番解决之后,终于可以了。
解决方法

开始绘图

打开VC++,新建一个MFC ApWizard(exe)工程,如图这里写图片描述
这里,我将工程取名demo,确定即可。
下面选择单文档,选择完成即可。如图
这里写图片描述

下面就进入了项目。如图。
这里写图片描述
CDemoView下面找到OnDraw(CDC *pDC)方法,就可以在下面写代码了。

注意

MFC文件 命名有点奇怪,它在每一个类前面都加了一个大写字母C
下面,定位到OnDraw()开始写代码。

pDC->SetPixel(x,y,RGB(255,0,0));

上面那行代码的意思是在(x,y)绘制一个红色(RGB(255,0,0))的像素点。
其颜色是根据RGB值来确定的。
下面为了显示效果,绘制一条红色的从(0,0)到(100,100)的线段来看一下效果。
代码如下:

void CDemoView::OnDraw(CDC* pDC)
{
    CDemoDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here

    for(int q=0;q<100;q++)
    {
        pDC->SetPixel(q,q,RGB(255,0,0));
    }
}

效果如下.
这里写图片描述

注意

画图的时候,界面上的坐标,原点在走上角,水平向右是x坐标,竖直向下是y坐标。极大多数程序画图都是这样的,和数学有点不一样,注意区分。
下面画一条水平的线段。
这里写图片描述

下面来画一个正方形吧。
效果如下:
这里写图片描述
代码如下:

void CDemoView::OnDraw(CDC* pDC)
{
    CDemoDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here

    for(int i=0;i<200;i++)//水平的两条边
    {
        pDC->SetPixel(i+100,100,RGB(255,0,0));
        pDC->SetPixel(i+100,300,RGB(255,0,0));
    }
    for(int j=0;j<200;j++)//竖直的两条边
    {
        pDC->SetPixel(100,j+100,RGB(255,0,0));
        pDC->SetPixel(300,j+100,RGB(255,0,0));
    }
}

下面我们在正方形内画一个绿色的内切圆。
圆的话我们用参数方程来画图。
设圆的圆心为(x0,y0),半径为 r
则参数方程为:

x = x0 + r * cos(sita);
y = y0 + r * sin(sita);
0 <= sita <= 2 * pi;

注意,要引入math头文件

#include <cmath>

下面就可以画圆了,注意 sita 的范围是0 <= sita <= 2*pi,步长为1.0/r
下面就可以画图了。
先看效果:
这里写图片描述
代码:
“`c++
void CDemoView::OnDraw(CDC* pDC)
{
CDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

for(int i=0;i<200;i++)//水平的两条边
{
    pDC->SetPixel(i+100,100,RGB(255,0,0));
    pDC->SetPixel(i+100,300,RGB(255,0,0));
}
for(int j=0;j<200;j++)//竖直的两条边
{
    pDC->SetPixel(100,j+100,RGB(255,0,0));
    pDC->SetPixel(300,j+100,RGB(255,0,0));
}
int r = 100;
double pi = acos(-1);
for(double s=0;s<2*pi;s+=1.0/r)
{
    int x=200+r*cos(s);
    int y=200+r*sin(s);
    pDC->SetPixel(x,y,RGB(0,255,0));
}

}

练习,画出下面图形。
这里写图片描述

呵呵,现在我就不给代码了。

我才不会告诉你,我是参考答案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC计算机图形学(1) 的相关文章

  • SetWindowPos() 函数不移动窗口?

    我有一个对话框 我想将其放置在另一个对话框中 并相对于主对话框上的其中一个控件进行定位 void CspAceDlg DrawResultsArea CWnd pTabCtl GetDlgItem IDC BUILDTABS CRect r
  • MFC 控件上的文本 - Unicode 字符(例如日语)被截断

    背景 我正在开发一个 C MFC 应用程序 我们已经将其转换为显示 unicode 字符以支持外语 在大多数情况下 这是成功的并且 unicode 字符显示正确 但我遇到了一个问题 某些控件上的某些文本被截断 Example 在这里 您可以
  • 默认情况下启用或禁用菜单项。为什么?

    我有一些遗留代码 由于某种原因 菜单项在启动时被启用或禁用 我的问题是 如何 有没有办法在不调用 EnableMenuItem 函数的情况下执行此操作 MFC 有没有办法做与资源设置所说相反的事情 我也不明白为什么当最后一个子窗口关闭时 当
  • 当窗口未最大化时缺少 WM_NCLBUTTONUP 消息的奇怪问题

    我有一个处理 WM NCLBUTTONUP 消息的窗口 以便处理标题栏中自定义按钮的点击 当窗口最大化时 这非常有效 但当窗口未最大化时 WM NCLBUTTONUP 消息永远不会到达 不过我确实收到了 WM NCLBUTTONDOWN 消
  • 如何调整 CWnd 内 WPF 控件的大小?

    我正在托管 WPFUserControlMFC 内部CWnd 它工作得很好 我现在需要弄清楚如何与其父控件一起调整控件的大小 我已经迷上了OnSize我正在打电话GetWindowRect并将结果设置为我的控件 如下所示 void CChi
  • 在Linux上运行MFC程序

    我有一个相当大的基于 MFC 的程序 我的任务是让它在 Linux 上运行 我已经解释过 这需要将程序重新编写为带有 STL 的直接 C 更多工作 或者重新编写为 Qt C 更少工作 现在我被告知 我需要编写包装器以使每个 MFC 类在 L
  • 禁用/启用 MFC 功能包的功能区按钮

    我正在使用 MFC 功能包 并且功能区栏上有一些按钮 即 CMFCRibbonButton 的实例 问题是我想在某些条件下启用和禁用其中一些 但在运行时 我怎样才能做到这一点 因为没有具体的方法 我听说解决方案是在运行时附加 分离事件处理程
  • 如何通过单击 MainFrame 内的按钮来更改 MFC 视图

    我想通过单击窗口内的按钮来更改呈现的视图像这样 https i stack imgur com 3IA2o png 我的项目设置 我制作了一个没有文档 视图支持的 MFC 项目 SDI 我在设计器中又创建了两个视图并向它们添加了类 新的视图
  • 如何使用 MFC 禁用顶级菜单项并使其变灰

    我有一个对话框应用程序 我希望在对话框顶部有可单击的菜单项 这些项目不显示下拉菜单 但实际上运行关联的命令 我通过在对话框属性中设置 Popup False 并分配消息 ID 来做到这一点 但我的问题是 当项目可点击没有意义时 无法正确禁用
  • 发送WM_SETTEXT时如何避免EN_CHANGE通知?

    我有一个 CEdit 派生控件 当基本数据为空时 该控件显示字符串 N A 我最近添加了代码 以在控件获得焦点时清空控件 SetWindowText 并在用户离开焦点时将其设置回 N A SetWindowText N A 控空 唯一的问题
  • MFC编辑控件更新

    我尝试使用它添加的变量来更新编辑控件的文本 这是一个CString但我失败了 m sNrAuto some text UpdateData TRUE 我也尝试过使用UpdateWindow 但编辑控件仍为空白 我知道我可以使用SetWind
  • 更改 GLUT 调用以与 MFC/C++ 一起使用

    我有一个使用 GLUT 进行 OpenGL 渲染的程序 现在我需要它位于 MFC 项目内部 以便它可以与另一个程序组件一起使用 我已经按照这个教程进行操作 http www codeguru com cpp g m opengl openf
  • 如何中止使用 wininet 发送的请求?

    我有一个 MFC 应用程序 用于向相应的服务器发送 post 请求 这是一个http请求 用于上传文件 但有要求中止发送的请求 就像用户正在发送一个大文件一样 用户应该能够在请求完成之前取消请求 我正在使用 wininet api Http
  • MFC CImage alpha 混合出错

    我必须在图片控件上呈现由两个 PNG 文件组成的图像 其中顶部图像在某些位置具有透明像素 结果应该是plotter png 与 bar png 顶部重叠显示为 注意条上奇怪的白色轮廓 但应该是 我为它编写的代码很简单 CImage imag
  • 如何将CString转换为整数和浮点数? [复制]

    这个问题在这里已经有答案了 我正在尝试转换CStringint 和 float 但无法找到任何 C 库函数来完成此操作 请帮忙 正确的UNICODE 符合规定的方式MFC如下 CString sInt T 10 int n ttoi sIn
  • 如何将tchar指针转换为char指针

    我想将 tchar 转换为 char 这可能吗 如果是的话该怎么做 我使用unicode设置 A TCHAR要么是一个普通的char or a wchar t取决于您的项目的设置 如果是后者 您需要使用WideCharToMultiByte
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 如何在同一个类(C++、MFC)中调用工作线程?

    这是我的代码 其中包含错误 void ClassA init HANDLE hThread data thread thread is an object of struct data hThread CreateThread NULL 0
  • MFC - 显示对话框后立即执行代码(.NET 相当于 Form.Shown)

    我正在对 C MFC 项目进行一些小的更改 我是 NET 开发人员 因此 Windows 编程对我来说是新的 我需要在 CDialog 第一次完全显示 绘制 后立即启动一些方法 但仅一次 我怎样才能做到这一点 在 NET中我会处理表格所示
  • 如何向 CRichEditCtrl 添加 Unicode 支持?

    我的应用程序曾经使用 MFC CEdit 控件 并且我们对宽字符 Unicode 字符串没有任何问题 切换到CRichEditCtrl后 似乎不再支持Unicode 汉字变成了 等等 我读过 CRichEditCtrl 在底层使用 Rich

随机推荐

  • 2023最新动力节点MybatisPlus笔记——第三章进阶篇

    3 进阶篇 3 1 映射 学习过Mybatis的同学应该知道 xff0c Mybatis框架之所以能够简化数据库操作 xff0c 是因为他内部的映射机制 xff0c 通过自动映射 xff0c 进行数据的封装 xff0c 我们只要符合映射规则
  • 2023最新版动力节点MybatisPlus实战教程——高级篇

    来自B站动力节点最新版的MybatisPlus教程 xff0c 整理了笔记 第四章高级篇 4 高级篇 4 1 主键策略 4 1 1 主键生成策略介绍 首先大家先要知道什么是主键 xff0c 主键的作用就是唯一标识 xff0c 我们可以通过这
  • 一体机重装系统时不小心分区了,别的盘的数据怎样恢复

    全盘格式化是由于在重装系统时 xff0c 选择了错误的选项导致全盘分区了 xff0c 装完之后文件全部丢失 想要恢复丢失盘的文件 xff0c 需要注意 xff0c 别往现在的这个盘存入新的文件 xff08 因为现在存入的文件可能会覆盖原先D
  • DDGCN: A Dynamic Directed Graph Convolutional Network for Action Recognition

    Introduction 作者认为解决如下两个问题能有效增强GCN在动作识别中的能力 xff1a 1 在人类骨骼的不同部位中有着时空关联性 xff0c 但这些关联性是动态的 xff0c 而且在时空域中不同的动作关联性也是不同的 标椎卷积操作
  • 2023最新版动力节点MybatisPlus实战教程——拓展篇

    5 拓展篇 5 1 逻辑删除 前面我们完成了基本的增删改查操作 xff0c 但是对于删除操作来说 xff0c 我们思考一个问题 xff0c 在实际开发中我们真的会将数据完成从数据库中删除掉么 xff1f 当然是不会的 xff0c 这里我们举
  • 计算机的存储器层次结构以及一二三级缓存的区别

    hibernate 一级缓存和二级缓存的区别 xff1a 主要的不同是它们的作用范围不同 一级缓存是session级别的 也就是只有在同一个session里缓存才起作用 xff0c 当这个session关闭后这个缓存就不存在了 而二级缓存是
  • QWebEngine登录网页并获取数据

    利用QWebEngine登录需要账号密码的网页并获取想要的数据 xff0c 以某游戏网站为例 xff0c 此网站每隔一段时间会更新某些数据 1 设置QWebEngineView的url QWebEngineView setUrl 在QWeb
  • PyCharm 提示 unresolved reference

    PyCharm 外部模块导入提示 unresolved reference 解决方法是把文件夹设置为根目录 1 在项目上单击右键 gt Mark Directory as gt Sources Root 2 再次点击 xff0c 红色警告消
  • python 安装twisted库时提示缺少VC++ 14.0 (解决方案)

    说明 xff1a 出现这种问题 xff0c 不需要去安装VC 43 43 14 0 xff0c 只需要去python库上下载相应的包安装即可 1 在python库中下载twisted相应的包 xff08 whl文件 xff09 网址 xff
  • 虚拟机中ubuntu下make menuconfig命令缺少ncurses解决方法

    在台式机上按着教程弄编译内核什么的 xff0c 发现同样是RHEL5 xff0c 我的make menuconfig就缺失ncurses 然后我装的RHEL5还连不上网了 xff0c 那怎么办 xff0c 没法传东西 xff0c vmtoo
  • HDU 1215 七夕节(约数之和)

    七夕节 Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 39837 Accepted Submiss
  • 为什么无穷大总是0x3f3f3f3f?

    转自 http aikilis tk 如果问题中各数据的范围明确 xff0c 那么无穷大的设定不是问题 xff0c 在不明确的情况下 xff0c 很多程序 员都取0x7fffffff作为无穷大 xff0c 因为这是32 bit int的最大
  • CSU 1333 & Uva 12661 Funny Car Racing【最短路变形+spfa算法,链式前向星建图】

    Funny Car Racing Memory Limit 131072KB64bit IO Format lld amp llu Status Description There is a funny car racing in a ci
  • 根据Oracle数据库scott模式下的scott.emp表和dept表,完成下列操作.

    题目要求 xff1a 根据Oracle数据库scott模式下的emp表和dept表 xff0c 完成下列操作 将scott用户解锁 xff1a alter user scott account unlock scott的初始密码是tiger
  • 通过CSS选择器查找元素

    通过CSS选择器定位元素 以Google主页的搜索按钮为例 xff0c 其中HTML代码如下 xff1a lt input value 61 34 Google 搜索 34 jsaction 61 34 sf chk 34 name 61
  • STL-set (集合)之删除元素

    set概述 和vector list不同 xff0c set map都是关联式容器 set内部是基于红黑树实现的 插入和删除操作效率较高 xff0c 因为只需要修改相关指针而不用进行数据的移动 在进行数据删除操作后 xff0c 迭代器会不会
  • 经典算法之一:快速排序

    快速排序由于排序效率在同为O N logN 的几种排序方法中效率较高 xff0c 因此经常被采用 xff0c 再加上快速排序思想 分治法也确实实用 xff0c 因此很多软件公司的笔试面试 xff0c 包括像腾讯 xff0c 微软等知名IT公
  • 矩阵乘法测试

    对于时间的函数 gettimeofday 函数使用方法 xff1a http blog csdn net hurmishine article details 60326345 矩阵乘法测试 xff1a 代码 xff1a 1 为了试验简单
  • 全网最!详!细!Tarjan算法讲解。

    Tarjan算法讲解的博客网上找到三篇比较好的 现在都转载了 个人只研究了第一篇 正如博主所说 讲的标比较详细 清晰 剩下两篇也可以看一下 卿学姐视频讲解 https www bilibili com video av7330663 以下内
  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks