为什么我写的WINDOWS程序窗口未响应。。

iceHawk 发布于 2012/03/31 09:23
阅读 1K+
收藏 0

/*------------------------------------------------------------
   HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
                 (c) Charles Petzold, 1998
  ------------------------------------------------------------*/

#include <windows.h>
#include<stdio.h>
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWin") ;
     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 NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
    
     hwnd = CreateWindow (szAppName,                  // window class name
                          TEXT ("The Hello Program"), // window caption
                          WS_OVERLAPPEDWINDOW,        // window style
                          CW_USEDEFAULT,              // initial x position
                          CW_USEDEFAULT,              // initial y position
                          CW_USEDEFAULT,              // initial x size
                          CW_USEDEFAULT,              // initial y size
                          NULL,                       // parent window handle
                          NULL,                       // window menu handle
                          hInstance,                  // program instance handle
                          NULL) ;                     // creation parameters
    
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
    
     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     HDC         hdc ;
     PAINTSTRUCT ps ;
     RECT        rect ;
     static POINT pt;
  static POINT pt1;
  TCHAR buffer[30], buffer1[30];
  static bool bstate;
     switch (message)
     {
     case WM_CREATE:
   
          return 0 ;
     case WM_PAINT:
   hdc = BeginPaint(hwnd,&ps);
   TextOut(hdc,0,20,buffer,wsprintf(buffer,TEXT("保存第一个坐标点:x = %i y = %i"),pt.x,pt.y));
   TextOut(hdc,0,40,buffer1,wsprintf(buffer1,TEXT("保存第二个坐标点:x = %i y = %i"),pt1.x,pt1.y));
   EndPaint(hwnd,&ps);
         return 0 ;
  case WM_KEYDOWN:
   switch(wParam) {
   case VK_F1:
    GetCursorPos(&pt); 
    InvalidateRect(hwnd,NULL,TRUE);
    return 0;
   case VK_F2:
    GetCursorPos(&pt1);
    InvalidateRect(hwnd,NULL,TRUE);
    return 0;
   case VK_F3:   
    while(1){
     SetCursorPos(pt.x,pt.y);
     mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
     mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
     Sleep(5000);
     
     SetCursorPos(pt1.x,pt1.y);
     mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
     mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
     Sleep(5000);
    }
    InvalidateRect(hwnd,NULL,TRUE);
    return 0;
   }
   return 0;
     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

加载中
0
cloud
cloud
case VK_F3:   死循环
0
小熊猫大暴走
小熊猫大暴走

引用来自“cloud”的答案

case VK_F3:   死循环
还真有人认真看了
0
cloud
cloud

引用来自“googler”的答案

引用来自“cloud”的答案

case VK_F3:   死循环
还真有人认真看了
一眼飘过去就知道了,那么明显的while(1)
0
i
iceHawk

我本来就是想死循环。。。

那么我是不是要用计时器啊。。

0
szf
szf

看样子又是做作业的~

保持消息循环畅通窗口才能平滑响应

费时操作(比如要等某个响应)

1.可以注册某消息,响应到达后,post此消息,在消息循环中case这个消息 ...

2.使用多线程,在工作线程中while(1)

0
中山野鬼
中山野鬼

引用来自“iceHawk”的答案

我本来就是想死循环。。。

那么我是不是要用计时器啊。。

别的错没看,也是飘一眼你的代码。你的代码睡多了。
0
i
iceHawk

引用来自“中山野鬼”的答案

引用来自“iceHawk”的答案

我本来就是想死循环。。。

那么我是不是要用计时器啊。。

别的错没看,也是飘一眼你的代码。你的代码睡多了。
  - -什么叫睡多了  没看懂啊
中山野鬼
中山野鬼
睡5秒是为什么?
0
灰灰
灰灰
还用WIN API来写程序?
0
i
iceHawk

引用来自“灰灰”的答案

还用WIN API来写程序?
我想学安全。。
0
兰穆达
兰穆达
系统分给每个线程的时间片是20-50ms,你在一个Callback func中sleep(5000ms)肯定有问题的。比较耗时的工作开个新线程做。
返回顶部
顶部