一个字符串移动 变色 且可以调整界面的宽度的 WINDOWS程序

一个字符串移动 变色  且可以调整界面的宽度的 WINDOWS程序

(很简单,重要的还是要知道WINDOWS程序运行的特点)

#include <windows.h>

LPCTSTR lpszAppName  =TEXT("MyApp");
LPCTSTR lpszTitle    =TEXT("My Application");

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

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow)
{  SIZE size;
   MSG      msg;
   HWND     hWnd;
   WNDCLASS wc;
 

   // Register the main application window class.
   //............................................
   wc.style         = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc   = (WNDPROC)WndProc;      
   wc.cbClsExtra    = 0;                     
   wc.cbWndExtra    = 0;                     
   wc.hInstance     = hInstance;             
   wc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
   wc.hCursor       = LoadCursor(NULL,IDC_SIZEALL);
   wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
   wc.lpszMenuName  = lpszAppName;             
   wc.lpszClassName = lpszAppName;             
 

   if ( !RegisterClass( &wc ) )
      return( FALSE );

 
   // Create the main application window.
   //....................................
   hWnd = CreateWindow( lpszAppName,
                        lpszTitle,   
                WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, 0,
                        CW_USEDEFAULT, 0, 
                        NULL,             
                        NULL,             
                        hInstance,        
                        NULL              
                      );

   if ( !hWnd )
      return( FALSE );

   ShowWindow( hWnd, nCmdShow );
   UpdateWindow( hWnd );        

   while( GetMessage( &msg, NULL, 0, 0) )  
   {
      TranslateMessage( &msg );
      DispatchMessage( &msg ); 
   }

   return( msg.wParam );
}

//窗口信息处理
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
   static int uRed = 0,  flags=0,uGreen = 0, uBlue = 0;
 static int   times=0,cxClient,cyClient,x=100;
    SIZE size;
  
     int cx=30;
    TCHAR szBuffer[40];  // wsprintf所需要的缓冲区,他返回的是字符的大小~~
    TCHAR  *SHOWWORD;
    TCHAR *LP;
 LPSIZE lpSize; //定义指向SIZE结构体的指针,后面GET--要用
    lpSize=&size;
   SHOWWORD="ABCDE";
   LP=SHOWWORD;
  

  switch( uMsg )
  {  
  
  case WM_CREATE:

 break;

 case WM_SIZE:
    cxClient=LOWORD(lParam);
    cyClient=HIWORD(lParam);
   break;
   case WM_PAINT :
   
   
   
              HDC hdc;               //  对于题目的分析  1 对Y进行左移右移cx,flags=0标置向前走,flags=1标志向后走
              PAINTSTRUCT ps;
                             //  当首字符,靠近边界时,且下一步y小于0时,可将其置为y=0位置,当判断最后一个字符超过了目前平面的位置时,
                               //可以,在最后一步,根据对字符长度的计算,重新确定Y使最后一个字符靠近边界,不留余地
                              //重点函数GetClientRect获取用户尺寸,可以再初次进入WM_CREATE中使用一次,以后
                                 //便通过窗口过程处理 WM_SIZE消息动态的获取窗口尺寸的大小
                              //通过GetTextExtentPoint32获取字符的精确大小
   
   
     hdc = BeginPaint(hWnd, &ps);
              SetTextColor( hdc, RGB(uRed, uGreen, uBlue));
        GetTextExtentPoint32(hdc,LP,lstrlen(TEXT("ABCDE")),lpSize);//此函数的使用如下,LP是指向

     if(flags==0)  //向前走的处理
     {{ x=x-cx;}
     if(x<0)
      x=0;}   
    
     if(flags==1)//向后走的处理
   
           { {  x=x+cx;}
     
     if ((x+size.cx)>cxClient)
     { x=cxClient-size.cx;
     }}
 
    TextOut(hdc,x,100,SHOWWORD,lstrlen(SHOWWORD));
  
              if(x==0)
      flags=1;
     if((x+size.cx)==cxClient)
      flags=0;
        EndPaint(hWnd, &ps);
   
    break;
 
   case WM_KEYDOWN :
    { 
     uRed = rand() % 255;
     uGreen = rand() % 255;
             uBlue = rand() % 255;
       InvalidateRect(hWnd, FALSE,TRUE);//这个函数会让整个客户区无效,从而调用WM_PAINT进行操作,最后一个参数确定是否擦除背景
             


    }
    break;

      case WM_DESTROY :
    PostQuitMessage(0);
          break;

      default :
          return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
   }

   return( 0L );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值