好吧,我正在尝试使用MFC构建一些小型Windows应用程序,并试图了解工作原理,并在绘制国家标志时,我遇到了问题。下面的代码行在中间矩形的中心绘制三个矩形和一个圆,接下来需要做的是将辐条画成圆形,即8个直径相隔45度角。
void CMainWindow::OnPaint (){
CPaintDC dc(this);
for (int i=0;i <=100;i+=50) {
dc.SetBkMode(TRANSPARENT);
CRect rect;
CPen pen(PS_SOLID, 1, RGB(0,0,0));
CPen *oldPen = dc.SelectObject(&pen);
if (i == 0){
CBrush brush(RGB(255,130,0));
CBrush *oldBrush = dc.SelectObject(&brush);
dc.Rectangle(75,(i+50),275,(i+100));
}
else if(i == 50) {
CBrush brush(RGB(255,255,255));
CBrush *oldBrush = dc.SelectObject(&brush);
dc.Rectangle(75,(i+50),275,(i+100));
CPen pen2(PS_SOLID, 1,RGB(0,0,255));
CPen *oldPen = dc.SelectObject(&pen2);
dc.Ellipse(150,100,200,150);
}
else {
CBrush brush(RGB(34,139,34));
CBrush *oldBrush = dc.SelectObject(&brush);
dc.Rectangle(75,(i+50),275,(i+100));
}
}
我不知道怎么做,我试图在MFC库中找到它但没有运气!
答案 0 :(得分:1)
这是sin()cos()方法的一个例子。 我没有看到将整个代码块放在for循环中的意义,显示我删除了那部分。
#include "math.h"
#define PI 3.1415926535898
void DrawIndiaFlag(CDC & dc , int x, int y)
{
dc.SetBkMode(TRANSPARENT);
CRect rect;
CPen pen(PS_SOLID, 1, RGB(0,0,0));
CPen *oldPen = dc.SelectObject(&pen);
{
CBrush brush(RGB(255,130,0));
CBrush *oldBrush = dc.SelectObject(&brush);
dc.Rectangle(x,(y),x+200,(y+50));
dc.SelectObject(oldBrush);
}
{
CBrush brush(RGB(255,255,255));
CBrush *oldBrush = dc.SelectObject(&brush);
dc.Rectangle(x,(50+y),x+200,(y+100));
CPen pen2(PS_SOLID, 1,RGB(0,0,255));
CPen *oldPen = dc.SelectObject(&pen2);
dc.Ellipse(x+75,y+50,x+125,y+100);
// Draw spokes
int nOriginX = x+100;
int nOriginY = y+75;
int nRadius = 25;
int nSpokes = 24;
double fAngle = 2*PI/nSpokes;
for (int i =0; i<nSpokes; i++)
{
dc.MoveTo(nOriginX,nOriginY);
int nX = (int)ceil(cos((fAngle)*i)*(nRadius)+nOriginX);
int nY = (int)ceil(sin((fAngle)*i)*(nRadius)+nOriginY);
dc.LineTo(nX,nY);
}
dc.SelectObject(oldPen);
}
{
CBrush brush(RGB(34,139,34));
CBrush *oldBrush = dc.SelectObject(&brush);
dc.Rectangle(x,(100+y),x+200,(150+y));
dc.SelectObject(oldBrush);
}
dc.SelectObject(oldPen);
}
答案 1 :(得分:0)
我不熟悉您正在使用的API,但您可以;
答案 2 :(得分:0)
我认为你所追求的是CDC::LineTo
方法(你可以使用CDC::MoveTo
来达到起点)。更多信息:
“从当前位置绘制一条线,但不包括x和y(或点)指定的点...使用所选笔绘制线条。当前位置设置为x,y或指出。“