求解-win32画直线,该怎么处理

求解--win32画直线
要求:用WIN32(C++)画一条直线,用MoveToEx()和LineTo()实现,以下是小弟的实现:假设鼠标点下左键后,系统获得该点A的坐标,再点下一点B后获得该点坐标,将AB两点连起来即可。想作出如下改进:如果再点两点C、D,则保留AB,同时连结CD,请大侠指导。以下是原代码:


#include   <windows.h>

LRESULT   CALLBACK   WndProc(HWND,UINT,WPARAM,LPARAM);

int   WINAPI   WinMain(HINSTANCE   hInstance,HINSTANCE   hPrevInstance,PSTR   szCmdLine,int   iCmdShow)
{
static   TCHAR   szAPPName[]   =   TEXT( "DrawLine ");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

wndclass.style =   CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc =   WndProc;
wndclass.cbClsExtra =   0;
wndclass.cbWndExtra =   0;
wndclass.hInstance =   hInstance;
wndclass.hIcon =   LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor =   LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =   (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName =   NULL;
wndclass.lpszClassName =   szAPPName;

if   (!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT( "This   Program   requires   windows   XP! "),szAPPName,MB_ICONERROR);
return   0;
}
hwnd   =   CreateWindow(szAPPName,TEXT( "Drawing   Line "),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return   msg.wParam;
}
static   int   flag1   =   0;
static   int   flag2   =   0;
int   iCount   =   0;

LRESULT   CALLBACK   WndProc(HWND   hwnd,UINT   message,WPARAM   wParam,LPARAM   lParam)
{
static   POINT   pt[3];
HDC hdc;
PAINTSTRUCT   ps;

switch   (message)
{
case   WM_LBUTTONUP:
if   (flag1   ==   0)
{


pt[0].x   =   LOWORD(lParam);
pt[0].y   =   HIWORD(lParam);
flag1   =   1;
}
if   (flag1   ==   1)
{
pt[1].x   =   LOWORD(lParam);
pt[1].y   =   HIWORD(lParam);
flag2   =   1;
pt[2]=pt[0];pt[0]=pt[1];pt[1]=pt[2];
InvalidateRect(hwnd,NULL,TRUE);
}

break;
case   WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
if   (flag1   ==   1   &&   flag2   ==   1)
{
MoveToEx   (hdc,   pt[0].x,   pt[0].y,   NULL);
LineTo(hdc,pt[1].x,pt[1].y);

}
EndPaint(hwnd,&ps);
return   0;
case   WM_DESTROY:
PostQuitMessage   (0)   ;
                return   0   ;
}
return   DefWindowProc   (hwnd,   message,   wParam,   lParam)   ;
}

------解决方案--------------------
..............
static POINT pt[4];
..................
case WM_LBUTTONUP:
if (flag1 <= 4)
{
pt[flag1 ].x = LOWORD(lParam);
pt[flag1 ].y = HIWORD(lParam);
flag1++;
}
if (flag > = 2)
{
InvalidateRect(hwnd,NULL,TRUE);
}

break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);