请问:如何填充圆?

hx_visa 2007-08-01 03:42:01
我在dlg上花了一个圆,请问如何填充
另外由于我不断的重画,(好像是这个原因)那个圆来不及显示出来。。。
请问如何让这个圆显示出来。。。谢谢。。
...全文
552 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hx_visa 2007-08-02
  • 打赏
  • 举报
回复
好,谢谢大家。。。我中午结贴。。。
BEYOND_Q 2007-08-01
  • 打赏
  • 举报
回复
FillRgn()就行了。
记住先要创建一个圆形区域。用CRgn对象创建。还要创建一个画刷填充。
菜牛 2007-08-01
  • 打赏
  • 举报
回复
去掉黑色边框,同样要选择画笔:
CPen* pOldPen = (CPen*)dc.SelectStockObject(NULL_PEN);
...绘图
dc.SelectObject(pOldPen);
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
颜色出来了。。。但又一个黑色的边框。。我如何去掉。。。啊 。。。。真是辛苦大家了
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
怎么填充上圆的颜色啊。。。用了画刷。。。但还是一个空心圆。。。
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
多谢了。。。我先试一下。。。不行在请教。。。
菜牛 2007-08-01
  • 打赏
  • 举报
回复
带参数的CBrush对象已经创建了一个画刷,下面调用CreateHatchBrush会出现异常。不要调用FloodFill了。TextOut输出的文字颜色没有设置,默认是黑色,看看背景色是不是也是黑的?
abrush.DeleteObject();放在dc.SelectObject(poldbrush);后面,GDI资源从DC中选出后才可以销毁。
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
abrush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
把这句注释调不出异常了。。。但还是不能显示出字来,圆也没画上。。。
该显示字的地方是一大条黑方块。。。
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
画刷那点好像出错了。。。总有异常。。。是不是我释放的不对
我把源代码全考出来吧。。。帮我看看。。。谢谢了。。。
hipposoft 2007-08-01
  • 打赏
  • 举报
回复
现成的函数啊
FillRect
查查MSDN
这都是基本问题了.
任何VC的书就是讲这些东西
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
// WaveShow.cpp : implementation file
//

#include "stdafx.h"
#include "WaveShow.h"
#include ".\waveshow.h"

// CWaveShow

IMPLEMENT_DYNAMIC(CWaveShow, CWnd)
CWaveShow::CWaveShow()
{
space = 5;
num = 24;
titleHeight=40;
m_bkColor = RGB(255,255,255); //白色
m_frgColor = RGB(0,0,0); //黑色
m_height = new double[num];
}

CWaveShow::~CWaveShow()
{
delete[] m_height;
}


bool CWaveShow::SetData(double *dvale) //设置各个条形高度的参数
{
memcpy(m_height,dvale,num*sizeof(double) );
Invalidate();
return true;
}

bool CWaveShow::SetBkClr(COLORREF clr) //设置背景
{
m_bkColor=clr;
return true;
}

bool CWaveShow::SetFrgClr(COLORREF clr) ///设置前景
{
m_frgColor=clr;
return true;
}


bool CWaveShow::SetNum(int n) //设置条形数量
{
this->num = n;
return true;
}

bool CWaveShow::SetSpace(int n) //设置条形的间隔像素
{
this->space = n;
return true;
}

bool CWaveShow::SetTitleHeight(int n) //设置顶层像素
{
this->titleHeight=n;
return true;
}
BEGIN_MESSAGE_MAP(CWaveShow, CWnd)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
END_MESSAGE_MAP()

BOOL CWaveShow::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return CWnd::OnEraseBkgnd(pDC);
}

void CWaveShow::OnPaint()
{
CPaintDC dc(this); // device context for painting

//先定义一个矩形对象,来确定客户区
CRect cr;
GetClientRect(&cr);

//下面的操作跟内存有关
CDC memDC;
CBitmap memBitmap;
memDC.CreateCompatibleDC(NULL);
memBitmap.CreateCompatibleBitmap(&dc,cr.Width(),cr.Height());
CBitmap *oldBitmap = memDC.SelectObject(&memBitmap);

//填充背景
memDC.FillSolidRect(cr,m_bkColor);
int vw = int( cr.Width()/num); //起始位置
int vh = cr.Height()-titleHeight;

int i;
for (i = 0; i < num ; i++) //num 是条型图的数量
{
double height=m_height[i]; //height 是高度
if (height <= 0)
{
continue;
}
else if(height > vh)
{
height = vh;
}
//开始确定画矩形
CRect waveRect;
waveRect = CRect(CPoint (i*vw+1,cr.bottom),CSize(vw-1,-(int)height));

//打算用不同的画笔配合下面的画边框一起使用。。。效果不好。。。Rectangle函数本来就有了边框
//CPen aPen;
//aPen.CreatePen(PS_SOLID,10,RGB(100,0,127));
//CPen* pOldPen=dc.SelectObject(&aPen);

memDC.Rectangle(&waveRect);
memDC.FillSolidRect(waveRect,m_frgColor);

//画边框,没有效果。。。Rectangle函数本来就有了边框
//dc.MoveTo(i*vw+1,0);
//dc.LineTo(i*vw+1,height);
//dc.LineTo((i+1)*vw-1,height);
//dc.LineTo((i+1)*vw-1,0);

CBrush abrush(RGB(255,0,0));
abrush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
CBrush *poldbrush = memDC.SelectObject(&abrush);

memDC.Ellipse(cr.left+2,cr.top-2,cr.left+titleHeight,cr.top-titleHeight);
memDC.FloodFill(cr.left+15,cr.top-15,m_frgColor);
memDC.TextOut(cr.left+titleHeight+2,cr.top-2,"你好 wenti 出在哪");
memDC.TextOut(cr.left+titleHeight+2,cr.top-22,"你好 wenti 出在哪");
//abrush.DeleteObject();
dc.SelectObject(poldbrush);

}

dc.BitBlt(0,0,cr.Width(),cr.Height(),&memDC,0,0,SRCCOPY);
memDC.SelectObject(oldBitmap);
memDC.DeleteDC();
memBitmap.DeleteObject();

}
terran_ye 2007-08-01
  • 打赏
  • 举报
回复
设置成空画刷,就能显示
CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pbrush);
terran_ye 2007-08-01
  • 打赏
  • 举报
回复
用FillRect也可以
terran_ye 2007-08-01
  • 打赏
  • 举报
回复
CBrush brush(255,0,0);
CBrush *poldbrush=dc.SelectObject(&brush);

....

画完再
dc.SelectObject(poldbrush);
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
不好意思。。。能否指点一下代码。。如何创建画刷之类的。。
我是初学者。。。而且还在工作。。。不太方便找书了。。谢谢。。。
菜牛 2007-08-01
  • 打赏
  • 举报
回复
创建画刷并将画刷选入DC即可。不要忘了用完画刷后选出销毁。
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
好像不行啊。。。添了个黑方块出来。。
memDC.Ellipse(cr.left+2,cr.top-2,cr.left+28,cr.top-28);
memDC.FloodFill(cr.left+15,cr.top-15,m_frgColor);//外接方块的中点,算对了吧。。。
memDC.TextOut(cr.left+32,cr.top-2,"你好");
这样不对么
xdljf 2007-08-01
  • 打赏
  • 举报
回复
FloodFill
hx_visa 2007-08-01
  • 打赏
  • 举报
回复
我是这样画的:
在onpaint()中:
dc.Ellipse(cr.left+2,cr.top-2,cr.left+28,cr.top-28);
dc.TextOut(cr.left+32,cr.top-2,"你好");
实验1 直线段的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及bresenham算法的基本原理; 2. 掌握以上算法生成直线段的基本过程; 3. 通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及bresenham算法对任意直线段的扫描转换。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用DDA算法中点bresenham算法及bresenham算法实现任意给定两点的直线段的绘制(直线宽度和线型可自定)。 实验步骤: 1、 复习有关算法的基本原理,明确实验目的和要求; 2、 依据算法思想,绘制程序流程图; 3、 设计程序界面,要求操作方便; 4、 用C/C++语言编写源程序并调试、执行; 5、 分析实验结果 6、 对程序设计过程中出现的问题进行分析与总结; 7、 打印源程序或把源程序以文件的形式提交; 8、 按格式要求完成实验报告。 实验报告要求: 1、 各种算法的基本原理; 2、 各算法的流程图 3、 实验结果及分析(比较三种算法的特点,界面插图并注明实验条件) 4、 实验总结(含问题分析及解决方法) 实验2 的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1、 通过实验,进一步理解和掌握中点bresenham画算法的基本原理; 2、 掌握以上算法生成弧的基本过程; 3、 掌握在C/C++环境下完成用中点bresenham算法弧的绘制方法。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用中点(Besenham)算法实现弧的绘制。 实验步骤 1. 复习有关的生成算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(注意弧生成时的输入条件); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行; 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告。 实验报告要求: 1. 分析算法的工作原理; 2. 画出算法的流程图 3. 实验结果及分析(比较弧生成算法的不同) 4. 实验总结(含问题分析及解决方法) 实验3 多边形的区域填充 学时:2 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解和掌握几种常用多边形填充算法的基本原理 2. 掌握多边形区域填充算法的基本过程 3. 掌握在C/C++环境下用多边形填充算法编程实现指定多边形的填充。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用种子填充算法和扫描线填充算法等任意两种算法实现指定多边形的区域填充。 实验步骤 1. 复习有关算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(指定填充多边形); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行(最好能用动画显示填充过程); 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告。 实验报告要求: 1. 分析算法的工作原理; 2. 画出算法的流程图 3. 实验结果及分析(比较两种算法的不同) 4. 实验总结(含问题分析及解决方法)
课程的实战源码是我在 GitHub 上开源项目 spring-boot-projects 中的其中一个项目代码,目前已有 2300 多个 star,项目截图如下: 由于项目比较受大家欢迎,因此心中就出现了将它做成教学视频的想法,也就是你现在了解的这个课程《SpringBoot入门及前后端分离项目开发》,本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;这最后的项目实战为课程的主要部分,我会带着大家实际的开发一个前后端分离的 Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其中的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; 以下为实践项目的页面和功能展示,分别为:登录页面 列表页面(分页功能) 图片上传功能 富文本编辑器整合使用 实践项目的主要功能和页面就是这些,通过项目展示大家也能够感受到,在实际应用开发中的高频次功能都已经实现,稍加修改就可以运用到企业开发中,整个项目的开发模式为前后端分离的模式,即 Spring Boot 提供后端接口,前端页面通过 Ajax 异步调用接口的方式与后端服务器进行交互并将数据填充至页面中,这也是目前企业开发中比较重用的开发模式,希望大家能够了解并且能够实际的上手开发。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧