#include<windows.h>
#include<stdlib.h>
#include<string.h>
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HFONT CreateFont(HDC hDC,int nCharHeight,BOOL bItalic);
int i=0;
int x[11],y[11];
int color[11];
POINT pt;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG Message;
if(!InitWindowsClass(hInstance))
return FALSE;
    if(!InitWindows(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
   return Message.wParam;
}
//消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{  HDC hDC;
   HFONT hF;
   PAINTSTRUCT ps;
   TEXTMETRIC tm;
   char str[]=" Hello VC   ";
   switch(iMessage)
   {
   case WM_CREATE:
   SetTimer(hWnd,10,100,NULL);
   GetCursorPos(&pt);
   for(i=0;i<11;i++)
   {
   x[i]=pt.x;
   y[i]=pt.y;
 color[i]=25*(i-1);
  }
   break;
   case WM_PAINT:
   hDC=BeginPaint(hWnd,&ps);
   hF=CreateFont(hDC,40,0);
   SelectObject(hDC,hF);
   GetTextMetrics(hDC,&tm);
   for(i=10;i>1;i--)
   {
   x[i]=x[i-1]+50;
       y[i]=y[i-1];
         } 
   GetCursorPos(&pt);
   x[1]=pt.x;
   y[1]=pt.y;
   for(i=1;i<11;i++)
   {
   SetTextColor(hDC,RGB(255-color[i],color[i],255));
   TextOut(hDC,x[i],y[i],&str[i],1);
   }
   color[1]=color[10];
   for(i=10;i>1;i--)
   color[i]=color[i-1];
   DeleteObject(hF);
   EndPaint(hWnd,&ps);
   return 0;
   case  WM_TIMER:
InvalidateRect(hWnd,NULL,1);
break;
   case WM_DESTROY:
PostQuitMessage(0);
KillTimer(hWnd,1);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
   return 0;}BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"IDI_APPLICATION");
WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="鼠标-键盘综合应用设置示例";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow("鼠标-键盘综合应用设置示例",
                 "Mouse Text Application",
WS_OVERLAPPEDWINDOW,
0,
0,
                        800,
600,
NULL,
NULL,
hInstance,
NULL
   );
if(!hWnd)
return  FALSE;
  ShowWindow(hWnd,nCmdShow);
  UpdateWindow(hWnd);
  return TRUE;
}
HFONT CreateFont(HDC hDC,int nCharHeight,BOOL bItalic)
{
 HFONT hFont;
 hFont=CreateFont(
 nCharHeight,
     0,
     0,
 0,
 400,
 bItalic,
 0,
 0,
 ANSI_CHARSET,
 OUT_DEFAULT_PRECIS,
 CLIP_DEFAULT_PRECIS,
 DEFAULT_QUALITY,
 DEFAULT_PITCH|FF_DONTCARE,
 "Arial");
 if(hFont==NULL) return NULL;
 else
return hFont;
}

解决方案 »

  1.   

    WM_CREATE是初始话执行一次的,如果放在WM_PAINT代码看着好象简单了,但多执行了n次,影响速度的
      

  2.   

    WM_CREATE中的for那一块程序 是用于初始化。只在创建时才调用一次。
      

  3.   

    paint执行的次数太多。
    还有,GetCursorPos(&pt); 
    会使画面的效果也不一样。
      

  4.   

    for(i=0;i <11;i++) 
      { 
      x[i]=pt.x;
      y[i]=pt.y; 
    color[i]=25*(i-1); 
      } 
    ==================
    这一块的作用是对数组初始化,只要一次就行了,放到WM_PAINT中的话会被初始化多次的