繪製矩形
調用 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; }