GDI 边框绘制函数(8)

绘制矩形

调用 Rectangle 函数能够绘制一个矩形(它将填充这个矩形):程序员

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

绘制椭圆

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

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 函数,能够绘制弧线、弓形和扇形,这三个函数参数相同:ui

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 坐标
);

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

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 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); Rectangle(hdc, cxClient / 8, cyClient / 8, cxClient * 7 / 8, cyClient * 7 / 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, cxClient * 7 / 8, cyClient * 7 / 8); RoundRect(hdc, cxClient / 4, cyClient / 4, cxClient * 3 / 4, cyClient * 3 / 4, cxClient / 4, cyClient / 4); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } 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 = 0; wndclass.cbWndExtra = 0; 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 0; } 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, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
相关文章
相关标签/搜索