Не могу разобраться как сделать что бы при рисовании фигуры изменение размера фигур прорисовывалось, знаю что делается это посредством WM_MOUSEMOVE но как именно не пойму.
main.cpp
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
OPENFILENAME ofn;
char szFileName[MAX_PATH];
LPTSTR szFile = L"sdfsjd;lfksjd;flksjdfl;skdjf;sldkfjs;ldkfjs;dlfkjs;dflksdjf;lskdjf;lsdkfjs;ldkfjs;ldfl";
static HBRUSH hBrush;
static HENHMETAFILE file1 = 0;
static int nextshape = 0;
static vector <Shape *> allshape;
static vector <Shape *> deletedshape;
static int countshape = 0;
//static BOOL mLine=FALSE, mRecttangle=FALSE, Ellips=FALSE, mCircle=FALSE, PAINTING=FALSE;
static Shape *shape = NULL;
POINT xy;
switch (message)
{
case WM_PAINT:
for( int i = 0; i < countshape; i++ )
allshape[i]->draw(hdc);
break;
case WM_LBUTTONDOWN:
if( shape == NULL )
{
deletedshape.clear();
switch (nextshape)
{
case 0: shape = new mRectangle(); break;
case 1: shape = new mCircle(); break;
case 2: shape = new mTriangle(); break;
case 3: shape = new mPolygon();
allshape.push_back(shape);
countshape++; break;
case 4: shape = new mText(); break;
case 5: shape = new mLine(); break;
case 6: shape = new elips(); break;
};
};
xy.x=LOWORD(lParam); //узнаём координаты
xy.y=HIWORD(lParam);
shape->addpoint(xy,1);
break;
case WM_LBUTTONUP:
xy.x=LOWORD(lParam); //узнаём координаты
xy.y=HIWORD(lParam);
shape->addpoint(xy, 1);
if( shape->allow() )
shape->addpoint(xy,1);
else
{
allshape.push_back( shape );
countshape++;
shape = NULL;
};
InvalidateRect(hWnd, NULL, false);
UpdateWindow(hWnd);
break;
case WM_RBUTTONDOWN:
if( (nextshape == 3) && (shape != NULL) )
{
xy.x = 0;
xy.y = 0;
shape->addpoint( xy, 0 );
shape = NULL;
InvalidateRect(hWnd, NULL, false);
UpdateWindow(hWnd);
};
break;
case WM_MOUSEMOVE:
if(MK_LBUTTON==wParam)
{
if (nextshape = 5)
{
xy.x=LOWORD(lParam); //узнаём координаты
xy.y=HIWORD(lParam);
hdc = GetDC(hWnd);
MoveToEx(hdc, xy.x, xy.y, NULL);
LineTo(hdc, xy.x, xy.y);
ReleaseDC(hWnd, hdc);
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 1201: nextshape = 1; break;
case 1211: nextshape = 0; break;
case 1202: nextshape = 5; break;
case 1203: nextshape = 6; break;
case 1213: nextshape = 3; break;
case 1103: PostQuitMessage(0); break;
case 1301: if(countshape <= 0 ) break;
deletedshape.push_back(allshape[countshape-1]);
countshape--;
allshape.pop_back();
InvalidateRect(hWnd, NULL, false);
UpdateWindow(hWnd); break;
case 1302: if( deletedshape.size() <= 0 ) break;
allshape.push_back(deletedshape[deletedshape.size()-1]);
countshape++;
deletedshape.pop_back();
InvalidateRect(hWnd, NULL, false);
UpdateWindow(hWnd); break;
}
}
}