跪求高手解决下面的win32程序(全API函数不涉及到MFC的解决方法)(让所画的线条在窗口外不闪烁)
#include <windows.h>
#include <stdio.h>
HWND MainHwnd;
HWND TrackHwnd;
HWND Hd;
POINT point;
POINT pos;
UINT xCoor ;
UINT yCoor ;
UINT g_nXCoor;
UINT g_nYCoor;
LRESULT CALLBACK WndProcMain (HWND hWnd, UINT message, WPARAM wParam ,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev,
char * lpCmdLine, int nShowCmd )
{
WNDCLASSEX WndClassEx;
//窗口类定义
WndClassEx.cbSize = sizeof( WNDCLASSEX );
WndClassEx.style = NULL;
WndClassEx.lpfnWndProc = WndProcMain;
WndClassEx.cbClsExtra = 0;
WndClassEx.cbWndExtra = 0;
WndClassEx.hInstance = hInstance;
WndClassEx.hIcon = LoadIcon( NULL, IDI_APPLICATION ); //窗口的最小化图标为默认图标
WndClassEx.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
WndClassEx.hCursor = LoadCursor( NULL, IDC_ARROW ); //窗口采用箭头光标
WndClassEx.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//窗口背景为灰色
WndClassEx.lpszMenuName = NULL;
WndClassEx.lpszClassName = "MyWndClassMain";
::RegisterClassEx( &WndClassEx );
MainHwnd = CreateWindow ( "MyWndClassMain", "My First Windows", WS_OVERLAPPEDWINDOW,
100, 100, 600, 600, NULL, NULL, hInstance, NULL);
Hd = GetDesktopWindow();
ShowWindow (MainHwnd, nShowCmd );
UpdateWindow(MainHwnd);
MSG msg;
while( GetMessage( &msg,NULL,NULL,NULL ) )
{
TranslateMessage(&msg);
DispatchMessage( &msg );
}
return 0;
}
LRESULT CALLBACK WndProcMain (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_MOUSEMOVE:
g_nXCoor = LOWORD( lParam );
g_nYCoor = HIWORD( lParam );
GetCursorPos(&pos);
xCoor = pos.x;
yCoor = pos.y;
point.x = g_nXCoor;
point.y = g_nYCoor;
Hd = GetDesktopWindow();
//ClientToScreen(hWnd, &point);
InvalidateRect( NULL,NULL,TRUE );
/*RedrawWindow(NULL,
NULL,
NULL,
RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW | RDW_ALLCHILDREN); */
case WM_LBUTTONDOWN:
SetCapture(MainHwnd);
InvalidateRect(NULL,NULL,TRUE);
break;
case WM_LBUTTONUP:
ReleaseCapture();
InvalidateRect(NULL,NULL,TRUE);
break;
case WM_PAINT:
{
HDC hDC;
RECT rectClient;
PAINTSTRUCT PS;
hDC = GetDC(NULL);
GetWindowRect(Hd, &rectClient);
//划线
MoveToEx (hDC, pos.x, rectClient.top, NULL );
LineTo (hDC, pos.x, rectClient.bottom);
MoveToEx (hDC, rectClient.left, pos.y, NULL );
LineTo (hDC, rectClient.right, pos.y);
CHAR strMousePosition[100];
hDC = BeginPaint (hWnd, &PS);
sprintf (strMousePosition, "Mouse Pt: x= %4d y = %4d", pos.x, pos.y);
TextOut (hDC, 0, 0, strMousePosition, strlen ( strMousePosition));//文字输出
EndPaint(hWnd, &PS);
ReleaseDC(Hd,hDC);
}
break;
case WM_DESTROY:
PostQuitMessage ( 0 );
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam );
}
return TRUE;
}