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; }
相關文章
相關標籤/搜索