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) 的相关文章

  • MFC应用程序可以在Windows以外的操作系统上运行吗?

    我需要使用 VC MFC 创建一个基于对话框的 GUI 我确信它可以在 Windows 操作系统上运行 但是它可以在 Linux Unix 或 Windows 以外的其他操作系统上运行吗 QT 是一个不错的选择吗 从源代码角度来看 使用 M
  • MFC 将 CMFCToolBar 按钮更改为切换而不是按下/释放?

    我在网上找到一篇文章 说将工具栏按钮设置为保持按下的类型 只需设置一个样式TBBS CHECKBOX在按钮上 但它对我不起作用 它仍然像普通按钮一样工作 我确认样式已设置 在创建之后SetWindowText MFC 向导设置CMainFr
  • 在 Visual Studio 2013 中显示带有偏移量的控件

    最近 我将源代码从 Visual Studio 2010 迁移到 Visual Studio 2013 在 Visual Studio 2013 中构建后 控件将显示有偏移 单击下面的链接查看图像 链接到图像 https i stack i
  • 调试 MFC:“mfc100.dll”找不到或打开 pdb

    我正在尝试在调试时进入 MFC 源代码 但是 Visual Studio 显然在加载适当的符号时遇到问题 C WINDOWS symbols dll mfc100 i386 pdb PDB 与图像不匹配 我检查了其他问题 通常建议启用 符号
  • 如果我没有为其相应的命令声明消息映射条目,如何阻止 MFC 禁用我的控件?

    我有以下问题 如果我没有相应消息的消息映射条目 假设 ID MYBUTTON1 MFC 将禁用我的工具栏 CToolbar 控件 有没有解决的办法 我对菜单也有同样的问题 但我发现您可以通过将 CFrameWnd m bAutoMenuEn
  • 如何从头开始启动 MFC 应用程序?

    换句话说 来自一个空白的 win32 项目 无向导 这就是我所在的地方 预处理器定义 WIN32 链接器 gt 系统 gt 子系统 控制台 int tmain int nRetCode 0 initialize MFC and print
  • CloseWindow和WM_CLOSE有什么关系

    我现在有点困惑 是吗 WM CLOSE http msdn microsoft com en us library windows desktop ms632617 28v vs 85 29 aspx and CloseWindow htt
  • 如何最好地避免 C++/CLI 本机类型中的双重转换

    传统上 我一直使用 MFC 扩展 dll 并使用 dllimport dllexport 导入 导出 但是 当 dll 更改为使用 clr 时 此方法的成本会变得很高 因为调用可能会导致双重转换 我现在的性能受到了巨大的打击 需要停止双重重
  • 使用 CSplitterWnd 在 CChildFrame 中创建多个视图

    我正在使用 MFC MDI 我需要创建如下视图 我的 ChildWnd 分为两部分 它们是LeftView CView 和RightView CScrollView LeftView 分为两部分 TreeView 和 FormView 我怎
  • 创建非托管常规 MFC DLL 并从托管 C++ .NET 应用程序调用它时出现问题

    我有几个关于 DLL 的问题 我尝试了很多 但无法获得完整的图片 大多数示例都是用 C 等编写的 使用 VS2005 中的向导 我创建了一个非托管 MFC 常规 DLL 由于剩余代码 必须是 MFC 然后我尝试将其导入 VS2005 管理的
  • 当窗口未最大化时缺少 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
  • 如何将基数词转换为序数词

    有没有一种简单的方法可以将数字 1 2 3 转换为 1st 2nd 3rd 并且以这种方式我可以为该函数提供一种语言并具有它会返回我目标语言的正确形式吗 标准 C stl 或 boost 都可以 MFC 或 ATL win32 api 或我
  • _CrtDumpMemoryLeaks( ) == 1 在第一行代码上?

    我正在开发一个 MFC Visual C 项目 据我了解MSDN http msdn microsoft com en us library d41t22sb 28v VS 100 29 aspx CrtDumpMemoryLeaks 应该
  • MinGW支持MFC吗?

    我已经使用 MinGW 开发了 WinAPI 应用程序 没有出现任何问题 现在 我可以用 MFC 做同样的事情吗 我只是在这里猜测 但我认为您需要购买 Visual Studio 的副本才能获得使用 MFC 的许可证 MFC 也不因其对 C
  • 如何使用 MFC 禁用顶级菜单项并使其变灰

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

    我尝试使用它添加的变量来更新编辑控件的文本 这是一个CString但我失败了 m sNrAuto some text UpdateData TRUE 我也尝试过使用UpdateWindow 但编辑控件仍为空白 我知道我可以使用SetWind
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐