0

マウスのクリックで三角形/さまざまな多角形をウィンドウに描画するプログラムを作成しようとしています。ウィンドウにアプリケーションを描画していますが、ウィンドウが無効になっているときに再描画できません。

コードの重要な部分を含めようとしました。

ユーザーがマウスを動かすと、一時三角形が大きく/小さくなります。マウスの左ボタンを離すと、三角形が構造体に格納されます。この部分はうまく動作しているようで、各三角形の情報が保存されています。私は現在、構造体の厚さや色を使用していないことを心に留めておいてください。

typedef struct
{

POINT pt[3];
unsigned int colour1;
unsigned int colour2;
unsigned int colour3;
unsigned int thickness;
unsigned int printOrder;

}Triangles;

Triangles temp_tri;
Triangles triangle_store[MAX_OBJECTS];
int triCount = 0;

case WM_LBUTTONDOWN:

if(triButtonPressed) //Faulty Feature
    {
        mouse_down_x = LOWORD(lParam);
        mouse_down_y = HIWORD(lParam);

        temp_tri.pt[0].x = mouse_down_x;
        temp_tri.pt[0].y = mouse_down_y;

        mouse_down = true;

    }

case WM_MOUSEMOVE:
if(triButtonPressed)
    {
        if(mouse_down)
        {
            temp_tri.pt[1].x= LOWORD(lParam);
            temp_tri.pt[1].y = HIWORD(lParam);
            temp_tri.pt[2].x= LOWORD(lParam) *2;
            temp_tri.pt[2].y= HIWORD(lParam) *2;

            InvalidateRect(hWnd,NULL,true);
        }
    }

case WM_LBUTTONUP:
else if(triButtonPressed)
    {
        temp_tri.pt[1].x = LOWORD(lParam);
        temp_tri.pt[1].y = HIWORD(lParam);
        temp_tri.pt[2].x= LOWORD(lParam) + 90;
        temp_tri.pt[2].y = HIWORD(lParam) + 90;
        printOrder++;
        temp_tri.printOrder = printOrder;
        triangle_store[triCount] = temp_tri;
        triCount ++;
        mouse_down = false;
    }

case WM_PAINT:

for(int  i =0; i<triCount; i++)
        {

            if(o == triangle_store[i].printOrder)
            {

                rePaintTriangles(backDC);
            }
        }

if(triButtonPressed)
    {
        if(mouse_down)
        {
            triangle(backDC);
        }
    }


void triangle(HDC hdc)
{

POINT pt[3];

pt[0].x = temp_tri.pt[0].x;
pt[0].y = temp_tri.pt[0].y; //Works fine. 
pt[1].x = temp_tri.pt[1].x;
pt[1].y = temp_tri.pt[1].y;
pt[2].x = temp_tri.pt[2].x;
pt[2].y = temp_tri.pt[2].y;

Polygon(hdc,pt,3);
}

void rePaintTriangles(HDC hdc)
{


Polygon(hdc,triangle_store[triCount].pt,3); //Doesn't Work

}
4

1 に答える 1

0

BeginPaintWM_PAINT メッセージを受け取ったら、ペイントする必要がある HDC を取得するために呼び出す必要があります。

于 2012-12-19T22:50:30.257 に答える