VC++ トップページ

Section2.3 図形描画

関数
長方形
BOOL Rectangle( HDC hdc, int left, int top, int right, int bottom );
hdc :デバイスコンテキスト.BeginPaint()の返り値など
left :長方形の左辺 x座標
top :長方形の上辺 y座標
right :長方形の右辺 x座標
bottom:長方形の下辺 y座標
返り値:成功すればTRUE,失敗すればFALSE

多角形
BOOL Polygon( HDC hdc, LPPOINT pts, int n );
hdc :デバイスコンテキスト.BeginPaint()の返り値など
pts :POINT構造体の配列,多角形の頂点の列
n :頂点の数
返り値:成功すればTRUE,失敗すればFALSE

楕円
BOOL Ellipse( HDC hdc, int left, int top, int right, int bottom );
hdc :デバイスコンテキスト.BeginPaint()の返り値など
left :円の左端 x座標
top :円の上端 y座標
right :円の右端 x座標
bottom:円の下端 y座標
返り値:成功すればTRUE,失敗すればFALSE


使用例
描画したいウインドウ用コールバック関数のWM_PAINTの BeginPaintとEndPaintの間で用います.

ソースのダウンロード

LRESULT  CALLBACK  WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
    HDC         hdc;
    PAINTSTRUCT ps;
    POINT       points[5];
    
    //渡された message から、イベントの種類を解析する
    switch(msg){
            .
            .
            .
    //----ペイント----
    case WM_PAINT:
        hdc= BeginPaint (hWnd, &ps);
        
        Rectangle( hdc, 10, 20, 60, 70 );
        Ellipse( hdc, 10, 20, 60, 70 );
        
        //こんな風に描画のたびにいちいち代入するのはよろしくないです.
        //pointsはグローバルで宣言してそこで,
        //あるいはWM_CREATEかそこで呼ぶ初期化関数などで代入しておくのがよいと個人的に思う.
        points[0].x = 110; points[0].y = 20;
        points[1].x = 130; points[1].y = 70;
        points[2].x =  80; points[2].y = 40;
        points[3].x = 140; points[3].y = 40;
        points[4].x =  90; points[4].y = 70;
        Polygon( hdc, points, 5 );
        TextOut(hdc, 10, 70, "使用例 sample", 13);
        
        EndPaint(hWnd, &ps);
        break;
            .
            .
            .


VC++ トップページ