绘制矩形

调用 Rectangle 函数可以绘制一个矩形(它将填充这个矩形):

BOOL Rectangle(
HDC hdc, // 设备环境句柄
int nLeftRect, // 左边线的位置
int nTopRect, // 上边线的位置
int nRightRect, // 右边线的位置
int nBottomRect // 下边线的位置
);

绘制椭圆

调用 Ellipse 函数可以绘制一个椭圆,它和绘制矩形的参数相同:

BOOL Ellipse(
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 // 圆角上的小椭圆的高度
);

绘制弧线、弓形、扇形

分别调用 Arc、Chord、Pie 函数,可以绘制弧线、弓形和扇形,这三个函数参数相同:

BOOL Arc(
HDC hdc, // 设备环境句柄
int nLeftRect, // 左边线的位置
int nTopRect, // 上边线的位置
int nRightRect, // 右边线的位置
int nBottomRect, // 下边线的位置
int nXStartArc, // 起始点 x 坐标
int nYStartArc, // 起始点 y 坐标
int nXEndArc, // 终点 x 坐标
int nYEndArc // 终点 y 坐标
);
BOOL Chord(
HDC hdc, // 设备环境句柄
int nLeftRect, // 上边线的位置
int nTopRect, // 上边线的位置
int nRightRect, // 右边线的位置
int nBottomRect, // 下边线的位置
int nXRadial1, // 起始点 x 坐标
int nYRadial1, // 起始点 y 坐标
int nXRadial2, // 终点 x 坐标
int nYRadial2 // 终点 y 坐标
);
BOOL Pie(
HDC hdc, // 设备环境句柄
int nLeftRect, // 左边线的位置
int nTopRect, // 上边线的位置
int nRightRect, // 右边线的位置
int nBottomRect, // 下边线的位置
int nXRadial1, // 起始点 x 坐标
int nYRadial1, // 起始点 y 坐标
int nXRadial2, // 终点 x 坐标
int nYRadial2 // 终点 y 坐标
);

这三个函数使用起点和终点来控制绘图,这样程序员就可以无需自行计算精确的坐标,就能完成绘制工作。

LINEDEMO 示例程序

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

    HDC hdc;
PAINTSTRUCT ps;
static int cxClient, cyClient; switch (message) {
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return ; case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); Rectangle(hdc, cxClient / , cyClient / , cxClient * / , cyClient * / ); MoveToEx(hdc, , , NULL);
LineTo(hdc, cxClient, cyClient);
MoveToEx(hdc, , cyClient, NULL);
LineTo(hdc, cxClient, ); Ellipse(hdc, cxClient / , cyClient / , cxClient * / , cyClient * / ); RoundRect(hdc, cxClient / , cyClient / , cxClient * / , cyClient * / , cxClient / , cyClient / ); EndPaint(hwnd, &ps);
return ; case WM_DESTROY:
PostQuitMessage();
return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
} int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LPCTSTR lpszClassName = TEXT("LineDemo");
LPCTSTR lpszWindowName = TEXT("LineDemo Program"); WNDCLASS wndclass;
wndclass.cbClsExtra = ;
wndclass.cbWndExtra = ;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WindowProc;
wndclass.lpszClassName = lpszClassName;
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("This program requires Windows NT!"), lpszWindowName, MB_ICONERROR);
return ;
} HWND hwnd = CreateWindow(
lpszClassName,
lpszWindowName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
); ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd); MSG msg;
while (GetMessage(&msg, NULL, , )) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}

GDI 边框绘制函数(8)的更多相关文章

  1. 学习windows编程 day3 之窗口绘画二:边框绘制函数

    #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...

  2. 【Windows编程】系列第五篇:GDI图形绘制

    上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...

  3. C#中的GDI+图形绘制方法

    GDI+图形绘制方法 1.首先对于绘制图形,必须的先将命名空间导入:using System.Drawing.Drawing2D; 2.然后在一个事件中写入程序 首先先将Graphics这个对象实例化 ...

  4. gdi+ 高速绘制透明窗体

    gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用B ...

  5. WPF GDI+字符串绘制成图片(二)

    原文:WPF GDI+字符串绘制成图片(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...

  6. MATLAB绘制函数图

    序言 Matlab可以根据用户给出的数据绘制相应的函数图.对于单个2D函数图,需要给出一个行向量x作为函数图上离散点集的横坐标,以及一个与x列数一样的横坐标y作为函数图上点集的纵坐标. 向量x和y的取 ...

  7. WPF GDI+字符串绘制成图片(一)

    原文:WPF GDI+字符串绘制成图片(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...

  8. python之绘制函数pyplot初探

    我们想将我们手里的数据通过图形的方式展示出来,这样我们更直观的,更可以发现数据带给我们的信息.今天给大家介绍要给python中pyplot绘制函数.一般我们想将手里的数据绘制成图形,分为四大步:1.准 ...

  9. GDI+学问------ 绘制可变角度的色彩渐变效果

    GDI+ 它是GDI(Windows 图形设备接口提供的早期版本)也许是版本号,它是Microsoft Windows XP作系统即兴许版本号的图形显示技术. 它已经集成到了.Net开发环境中.所以无 ...

随机推荐

  1. Maven: java.lang.ClassNotFoundException: org.eclipse.aether.spi.connector.Transfer$State

    在mac中使用maven compile时发生以下错误: Maven: java.lang.ClassNotFoundException: org.eclipse.aether.spi.connect ...

  2. 设计模式学习–Decorator

    What Decorator:动态地给一个对象加入一些额外的职责. 就添加功能来说.Decorator模式相比生成子类更加灵活. Why Decorator模式适用于能够动态的给对象增删职责.比方qq ...

  3. poj 1664 放苹果 (划分数)

    题意:中文题目,不解释... 题解: 第一种方法是暴力深搜:枚举盘子1~n放苹果数量的所有情况,不需要剪枝:将每次枚举的情况,即每个盘的苹果数量,以字典序排序,然后存进set里 以此去重像" ...

  4. QueryString 地址栏参数

    MXS&Vincene  ─╄OvЁ  &0000002 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...

  5. linux面试之--堆、栈、自由存储区、全局/静态存储区和常量存储区

    栈,就是那些由编译器在须要的时候分配,在不须要的时候自己主动清除的变量的存储区.里面的变量一般是局部变量.函数參数等.在一个进程中.位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆 ...

  6. Manacher求最长回文

    #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助 ...

  7. 创造HTTPS的是个神

    HTTP 是一个明文传输的协议,很多网络监听工具都可以轻易窃取网络中传输的用户信息,如密码,信用卡, 直到后来发明HTTPS, 世界一下子安静了 Why HTTPS? HTTPS可以保证用户提交的信息 ...

  8. C# datagridview 删除行(转 学会、放弃博客)

    原文引入:http://zhangyanyansy.blog.163.com/blog/static/13530509720106171252978/ datagridview 删除行 2010-07 ...

  9. WebSocket在Asp.Net中的例子

    环境 以下代码环境要求:win8或win10, .net4.5+IIS8 部署到IIS8上面 转到 Windows程序和功能 -打开Windows功能里面 IIS选项启动4.5 和WebSocket支 ...

  10. 动态规划---区间dp

    今天写内网题,连着写了两道区间dp,这里就总结一下. 区间dp思想主要是先枚举f[i][j]中的i,再枚举j,再枚举一个1~j之间的变量k,一般是f[i][j] = max(f[i][j],f[i][ ...