第25章 円・楕円を描く


今回は、円・楕円の描画です。 楕円を描く関数はellipseです。

BOOL Ellipse( HDC hdc, // デバイスコンテキストハンドル int nLeftRect, //X1 int nTopRect, //Y1 int nRightRect, //X2 int nBottomRect //Y2 );

まず、楕円が収まる長方形を考えます。 この長方形の左上の座標が(X1, Y1)となります。 右下が(X2, Y2)となります。この長方形が 正方形であれば円となります。 使い方は簡単ですね。では、サンプルのプログラムを 早速作ってみましょう。

// grph03.cpp #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void DrawCircle(HDC, int, int, int, int); void ShowText(HDC); char szClassNme[] = "grph03"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hWnd; MSG lpMsg; WNDCLASS myProg; if (!hPreInst) { myProg.style =CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc =WndProc; myProg.cbClsExtra =0; myProg.cbWndExtra =0; myProg.hInstance =hInstance; myProg.hIcon =NULL; myProg.hCursor =LoadCursor(NULL, IDC_ARROW); myProg.hbrBackground =GetStockObject(WHITE_BRUSH); myProg.lpszMenuName =NULL; myProg.lpszClassName =szClassNme; if (!RegisterClass(&myProg)) return FALSE; } hWnd = CreateWindow(szClassNme, "猫でもわかるプログラミング", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (GetMessage(&lpMsg, NULL, 0, 0)) { TranslateMessage(&lpMsg); DispatchMessage(&lpMsg); } return (lpMsg.wParam); } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; int n; switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); for (n = 0; n <= 4; n++) { ShowText(hdc); } for (n = 0; n <=200; n+=5) { DrawCircle(hdc, n, n, n+100, n+150); } EndPaint(hWnd, &ps); break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return (0L); } void DrawCircle(HDC hdc, int x1, int y1, int x2, int y2) { HPEN hPen, hOldPen; HBRUSH hBrush, hOldBrush; hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); hBrush = GetStockObject(NULL_BRUSH); hOldPen = SelectObject(hdc, hPen); hOldBrush = SelectObject(hdc, hBrush); Ellipse(hdc, x1, y1, x2, y2); SelectObject(hdc, hOldPen); SelectObject(hdc, hOldBrush); DeleteObject(hPen); return; } void ShowText(HDC hdc) { static y = 10; TextOut(hdc, 10, 20, "猫でもわかるプログラミング", 26); TextOut(hdc, 10, 40, "制作・著作 粂井康孝", 20); return; }

hBrushはストックブラシなので削除していない点に注意してください。



[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Apr/30/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。