边框绘制函数

函数 Rectangle ,Ellipse, RoundRect 介绍:
          Rectangle() 功能:该函数画一个矩形,可以用当前的画笔画矩形轮廓,用当前画刷进行填充 (默认画刷为白色)。

Ellipse()  功能:该函数用于画一个椭圆,椭圆的中心是限定矩形的中心。

使用当前画笔画椭圆,用当前的画刷填充椭圆 (默认画刷为白色)

RoundRect() 功能:该函数画一个带圆角的矩形,此矩形由当前画笔画轮廓,由当前画刷填充 (默认画刷为白色)。

Rectangle() 原型:BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) ;

Ellipse() 原型:BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) ;

RoundRect() 原型:BOOL RoundRect(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,

int nWidth, int nHeight);

参数:

hdc:设备环境句柄。

(nLeftRect, nTopRect):指定矩形左上角逻辑坐标。

(nRightRect, nBottomRect):指定矩形右下角的逻辑坐标。

nWidth:指定用来画圆角的椭圆的宽。

nHeight:指定用来画圆角的椭圆的高。

返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值是0。

函数 Arc, Chord, Pie 介绍:

Arc() 原型:BOOL Arc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,

int xStart, int yStart, int xEnd, int yEnd);

Chord() 原型:BOOL Arc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,

int xStart, int yStart, int xEnd, int yEnd);

Pie() 原型:BOOL Arc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,

int xStart, int yStart, int xEnd, int yEnd);

Arc() 功能:画一条椭圆弧线,从 (xStart, yStart) 连接到 (xEnd, yEnd) (实线)。

点 (xStart, yStart), (xEnd, yEnd) 分别连接到椭圆中心 (虚线)。

Chord() 功能:画一条椭圆弧线,从 (xStart, yStart) 连接到 (xEnd, yEnd) (实线)。

点 (xStart, yStart), (xEnd, yEnd) 相连接(实线)。

点 (xStart, yStart), (xEnd, yEnd) 分别连接到椭圆中心 (虚线)。

Pie() 功能:画一条椭圆弧线,从 (xStart, yStart) 连接到 (xEnd, yEnd) (实线)。

点 (xStart, yStart), (xEnd, yEnd) 分别连接到椭圆中心 (实线)。

参数:

(xStart,yStart):   起点的逻辑坐标。

(xEnd,yEnd):终点的逻辑坐标。

LineDemo代码:

#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("LineDemo") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("Program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName, TEXT ("Line Demonstration"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;

     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static int  cxClient, cyClient ;
     HDC         hdc ;
     PAINTSTRUCT ps ;

     switch (message)
     {
     case WM_SIZE:
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
          return 0 ;

     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ; 
          Rectangle (hdc,     cxClient / 8,     cyClient / 8,
                          7 * cxClient / 8, 7 * cyClient / 8) ;
          MoveToEx  (hdc,        0,        0, NULL) ;
          LineTo    (hdc, cxClient, cyClient) ;

          MoveToEx  (hdc,        0, cyClient, NULL) ;
          LineTo    (hdc, cxClient,        0) ;

          Ellipse   (hdc,     cxClient / 8,     cyClient / 8,
                          7 * cxClient / 8, 7 * cyClient / 8) ;

          RoundRect (hdc,     cxClient / 4,     cyClient / 4,
                          3 * cxClient / 4, 3 * cyClient / 4,
                              cxClient / 4,     cyClient / 4) ;

          EndPaint (hwnd, &ps) ;
          return 0 ;

     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

函数 PolyBezier, PolyBezierTo 介绍:

功能:函数 PolyBezier 和 PolyBezier 用于绘制贝塞尔曲线 。

PolyBezier() 原型:BOOL PolyBezier(HDC hdc, CONST POINT *lppt, DWORD cPoints);

PolyBezierTo() 原型:BOOL PolyBezier(HDC hdc, CONST POINT *lppt, DWORD cPoints);

参数:

hdc:指定的设备环境句柄。

lppt:POINT结构数组的指针,包括了样条端点和控制点的坐标。

其顺序是起点的坐标、起点的控制点的坐标、终点的控制点的坐标和终点的坐标。

cPoints:指明数组中的点的个数。

Bezier 代码:

#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("Bezier") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("Program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName, TEXT ("Bezier Splines"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;

     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

void DrawBezier (HDC hdc, POINT apt[])
{
     PolyBezier (hdc, apt, 4) ;

     MoveToEx (hdc, apt[0].x, apt[0].y, NULL) ;
     LineTo   (hdc, apt[1].x, apt[1].y) ;

     MoveToEx (hdc, apt[2].x, apt[2].y, NULL) ;
     LineTo   (hdc, apt[3].x, apt[3].y) ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static POINT apt[4] ;
     HDC          hdc ;
     int          cxClient, cyClient ;
     PAINTSTRUCT  ps ;

     switch (message)
     {
     case WM_SIZE:
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;

          apt[0].x = cxClient / 4 ;
          apt[0].y = cyClient / 2 ;

          apt[1].x = cxClient / 2 ;
          apt[1].y = cyClient / 4 ;

          apt[2].x =     cxClient / 2 ;
          apt[2].y = 3 * cyClient / 4 ;

          apt[3].x = 3 * cxClient / 4 ;
          apt[3].y =     cyClient / 2 ;

          return 0 ;

     case WM_LBUTTONDOWN:
     case WM_RBUTTONDOWN:
     case WM_MOUSEMOVE:
          if (wParam & MK_LBUTTON || wParam & MK_RBUTTON)
          {
               hdc = GetDC (hwnd) ;

               SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
               DrawBezier (hdc, apt) ;

               if (wParam & MK_LBUTTON)
               {
                    apt[1].x = LOWORD (lParam) ;
                    apt[1].y = HIWORD (lParam) ;
               }

               if (wParam & MK_RBUTTON)
               {
                    apt[2].x = LOWORD (lParam) ;
                    apt[2].y = HIWORD (lParam) ;
               }

               SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
               DrawBezier (hdc, apt) ;
               ReleaseDC (hwnd, hdc) ;
          }
          return 0 ;

     case WM_PAINT:
          InvalidateRect (hwnd, NULL, TRUE) ;

          hdc = BeginPaint (hwnd, &ps) ;

          DrawBezier (hdc, apt) ;

          EndPaint (hwnd, &ps) ;
          return 0 ;

     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

原文地址:https://www.cnblogs.com/M-Anonymous/p/9302980.html

时间: 2024-08-04 12:14:59

边框绘制函数的相关文章

怎样绘制函数y=x^4的图像

利用描点法绘制函数图像的方法并不局限于某个函数,而是可适用于绘制任何一个函数的图像.下面以函数y=x3为例,详细介绍利用几何画板绘制点的方法绘制函数图像. 具体的操作步骤如下: 1.执行“绘图”—“定义坐标系”命令,新建坐标系,并将原点坐标的标签设为O. 2.选中坐标系的x轴,执行“构造”—“轴上的点”命令,构造点B. 3.选中点B,执行“度量”—“横坐标”命令,度量出点B的横坐标xB. 4.选中点B的横坐标xB,执行“度量”—“计算”命令,在弹出的新建计算对话框中计算出xB3的值. 5.依次选

怎样用几何画板绘制函数y=x^4的图像

利用描点法绘制函数图像的方法并不局限于某个函数,而是可适用于绘制任何一个函数的图像.下面以函数y=x3为例,详细介绍利用几何画板绘制点的方法绘制函数图像. 具体的操作步骤如下: 1.执行"绘图"-"定义坐标系"命令,新建坐标系,并将原点坐标的标签设为O. 2.选中坐标系的x轴,执行"构造"-"轴上的点"命令,构造点B. 3.选中点B,执行"度量"-"横坐标"命令,度量出点B的横坐标xB.

OpenGL 3D图形常用绘制函数

本文整理了一些opengl常用的绘制函数,api等,以作参考. GLUT 工具箱函数     GLUT工具箱提供几种图形3维图形的函数: void glutWireSphere(GLdouble radius,GLint slices, GLint stacks);  丝状球 void glutSolidSphere(GLdouble radius,GLint slices, GLint stacks); 实心球 void glutWireCube(GLdouble size); 丝状立方体 v

Unreal engine 4 C++ 一些调试用的绘制函数

UE4中提供了很多预定义的调试绘制函数,在做调试的时候还是比较方便的.可以在场景里绘制点.线.圆.球.箭头.椎体.胶囊.甚至样条线.字符串.网格等等,基本上该有的都有了.比较赞的是,你能控制线条的厚度,调试的时候就比较直观了. 要使用这些函数,只需要包含DrawDebugHelpers.h 头文件即可.下面介绍几个主要的绘制函数: 1.绘制点 ENGINE_API void DrawDebugPoint(const UWorld* InWorld, FVector const& Position

Opencv+Python(3):在Opencv中绘制函数

在OpenCV中绘制函数 目标 学习使用OpenCV绘制不同的几何形状 你将学习这些函数:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText()等 码 在所有上述功能中,您将看到如下所示的一些常见参数: img:想要绘制形状的图像 颜色:形状的颜色.对于BGR,将它作为元组传递,例如:(255,0,0)for blue.对于灰度,只需传递标量值即可. 厚度:线或圆的厚度等.如果像圆圈这样的闭合数字传递-1,它将填充形

极坐标系 隐函数 数值求解 并 绘制 函数图像

我写了一个 极坐标系 隐函数 数值求解 并 绘制 函数图像 的 程序   DrawPolarFunc  . 项目地址 :            https://github.com/kelin-xycs/DrawPolarFunc            . 进入 项目页面 后 点击 右边绿色 的 “Clone or download” 按钮 就可以下载 项目文件 了 .  项目中 只有一个 程序文件   DrawPolarFunc.html  , 用 Html5 + javascript  写的

用Html5制作的一款数学教学程序Function Graphics(绘制函数图的程序)

最近我不仅对游戏开发感兴趣,还对函数图感兴趣,特此我开发了这个程序.以下是一些介绍和下载演示地址,喜欢的朋友可以看看: 一,产品名片 产品名:Function Graphics 版本: 0.1 开发者:Yorhom Wang 首次发行时间:2013年 4月4日 分类:教学程序 功能:画出一,二,三次函数图象 开发语言:JavaScript&HTML5 二,怎么使用 下载地址(含有源码): http://files.cnblogs.com/ducle/function_graphs.rar 在线使

【JAVA语言程序设计基础篇】--图形-- 使用抽象方法绘制函数图形

一个很好的运用抽象类的例子 <span style="font-size:14px;">package chapter15_编程练习题; import java.awt.*; import javax.swing.*; @SuppressWarnings("serial") public class Exercise15_13 extends JFrame { public Exercise15_13() { setLayout(new GridLayo

EasyX库进行图片绘制函数

引用函数:loadimage参数: // 从图片文件获取图像(bmp/jpg/gif/emf/wmf/ico)void loadimage( IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针 LPCTSTR pImgFile, // 图片文件名 int nWidth = 0, // 图片的拉伸宽度 int nHeight = 0, // 图片的拉伸高度 bool bResize = false // 是否调整 IMAGE 的大小以适应图片);12345678参数说明: >