vc在窗体上绘制扇形

原创 2006年06月17日 09:42:00

做控件的时候难免会遇到绘制图形,而扇形也是其中的一种,在查询MSDN后,经过iN次摸索,才渐渐明白了扇形的绘制方法,过程如下:

1、新建一个Dialog工程,在OnPaint里加上如下代码:

void CtestchDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;

  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CPaintDC dc(this);
  CRect rectClient;   //当前控件的矩形坐标结构
  GetClientRect(rectClient);

   // Make a couple of pens and similar brushes.
     CBrush brushBlue;
     CBrush* pOldBrush;
     CPen* pOldPen;

    brushBlue.CreateSolidBrush(RGB(0,0, 255));    //创建实心画刷  

    // Draw from 3 o'clock to 6 o'clock, counterclockwise,
    // in a blue pen with a solid blue fill. 
    pOldBrush = dc.SelectObject(&brushBlue); 
     rectClient.bottom*=2;
       dc.Pie(rectClient,
    CPoint(rectClient.right,0), //CenterPoint()为中心点
    //CPoint(rectClient.CenterPoint().x, rectClient.right));
    CPoint(rectClient.left,0));
      // Restore the previous pen.
    dc.SelectObject(pOldPen);
   CDialog::OnPaint();
  }
}

3、MSDN解释如下:

BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );

BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );

Return Value

Nonzero if the function is successful; otherwise 0.

Parameters

x1

Specifies the x-coordinate of the upper-left corner of the bounding rectangle (in logical units).

y1

Specifies the y-coordinate of the upper-left corner of the bounding rectangle (in logical units).

x2

Specifies the x-coordinate of the lower-right corner of the bounding rectangle (in logical units).

y2

Specifies the y-coordinate of the lower-right corner of the bounding rectangle (in logical units).

x3

Specifies the x-coordinate of the arc’s starting point (in logical units). This point does not have to lie exactly on the arc.

y3

Specifies the y-coordinate of the arc’s starting point (in logical units). This point does not have to lie exactly on the arc.

x4

Specifies the x-coordinate of the arc’s endpoint (in logical units). This point does not have to lie exactly on the arc.

y4

Specifies the y-coordinate of the arc’s endpoint (in logical units). This point does not have to lie exactly on the arc.

lpRect

Specifies the bounding rectangle. You can pass either a CRect object or a pointer to a RECT structure for this parameter.

ptStart

Specifies the starting point of the arc. This point does not have to lie exactly on the arc. You can pass either a POINT structure or a CPoint object for this parameter.

ptEnd

Specifies the endpoint of the arc. This point does not have to lie exactly on the arc. You can pass either a POINT structure or a CPoint object for this parameter.

Remarks

Draws a pie-shaped wedge by drawing an elliptical arc whose center and two endpoints are joined by lines. The center of the arc is the center of the bounding rectangle specified by x1, y1, x2, and y2 (or by lpRect). The starting and ending points of the arc are specified by x3, y3, x4, and y4 (or by ptStart and ptEnd). 

The arc is drawn with the selected pen, moving in a counterclockwise direction. Two additional lines are drawn from each endpoint to the arc’s center. The pie-shaped area is filled with the current brush. If x3 equals x4 and y3 equals y4, the result is an ellipse with a single line from the center of the ellipse to the point (x3, y3) or (x4, y4). 

The figure drawn by this function extends up to but does not include the right and bottom coordinates. This means that the height of the figure is y2 – y1 and the width of the figure is x2 – x1. Both the width and the height of the bounding rectangle must be greater than 2 units and less than 32,767 units.

简单的说,x1,y1,x2,y2 确定外接矩形,扇形的中心和外接矩形的中心重合

至于x3,y3,x4,y4,只是为了确定起点和终点,不一定在扇形上,系统会自动计算扇形的位置

同时,绘制出的扇形并不一定是圆的一部分,形状不是很规则,绘制的时候要注意

另外,扇形的边框是用pen来绘的,填充是用brush,如果边框不设置颜色,默认为黑色

使用VC的Picture control在窗体上显示一副图片

vc picture控件的使用 方法1.先从最简单的开始,用picture 控件来实现. 步骤: 先在资源里Import一张图片,ID为IDB_BITMAP2 然后在对...

VC++60 第九章 在窗体上写字

第九章 在窗体上写字 从前面的例程中我们看到,要在视窗式的应用程序中显示文字可用静态文本、编辑框和弹出消息框等方法。另外的一种方法是直接在窗口面版上写字,用这种方法还可以自由设置字体、大小和颜色...
  • GL_a_
  • GL_a_
  • 2016年10月13日 17:47
  • 852

如何使用双缓冲在窗体上绘制

本教程与“Simple Finger Drawing(v.1.1.0)”这个bada应用相关,你能在projects section找到这个应用。我将用它作为一个例子来演示用双缓冲这种最有效的方式(我...

java_在窗体中绘制图形

  • 2015年06月27日 00:50
  • 50KB
  • 下载

C# 利用接口在窗体间传递消息(很基础很实用)

接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。我们在实际开发中,经常要用到在窗体间传递数据。很多情况下,我们用委托把数据从子窗体传递到主窗体,这个例子我们来看...

自定义Dialog,如何实现浮动层,主要是dialog浮动在窗体上

学习目标: 1.如何自定义Dialog的外观样式和方法? 自定义一个类继承自Dialog类,然后在构造方法中,定义这个dialog的布局和一些初始化信息。 public class Menu...

怎样在窗体的关闭按钮中关闭系统

在完善机房收费系统时,突然发现了一个小功能还未实现,就是点击主窗体的关闭按钮时给出提示:                                                        ...

在窗体上创建自己的光标并输入文字

    我们知道在文本框等可以接收输入的组件中,我们可以看到闪烁的光标,并可以输入文字,如果我们在,比如窗体上时,因为不支持输入,也无法显示闪烁的光标,那我们 有办法做自己的输入吗?当然可以,下面我们...
  • bdmh
  • bdmh
  • 2011年05月31日 11:19
  • 3363

vb读取excel中的数据并在窗体上显示

Public ExcelTable As Workbook  'excel 工作表对象 Private TextBoxA() As Control      '以编辑框为基础动态构造数据网格 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc在窗体上绘制扇形
举报原因:
原因补充:

(最多只允许输入30个字)