鱼C论坛

 找回密码
 立即注册
查看: 2145|回复: 1

[已解决]GetMessage函数

[复制链接]
发表于 2015-8-12 11:01:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是鱼哥教我们的创建窗口的最基本的程序
  1. #include <Windows.h>

  2. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam , LPARAM lParam);

  3. int
  4.         WINAPI
  5.         WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
  6. {
  7.         TCHAR *szWndClsName = TEXT("new window class");
  8.         TCHAR *szWndName = TEXT("新窗口");
  9.         HWND hWnd;
  10.         MSG msg;

  11.         WNDCLASS WndClass;

  12.         WndClass.style = CS_HREDRAW | CS_VREDRAW;
  13.         WndClass.lpfnWndProc = WndProc;
  14.         WndClass.cbClsExtra = 0;
  15.         WndClass.cbWndExtra = 0;
  16.         WndClass.hInstance = hInstance;
  17.         WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  18.         WndClass.hCursor = LoadCursor(NULL, IDC_APPSTARTING);
  19.         WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  20.         WndClass.lpszClassName = szWndClsName;
  21.         WndClass.lpszMenuName = NULL;

  22.         if( !RegisterClass(&WndClass) )
  23.         {
  24.                 MessageBox(NULL, TEXT("注册窗口类失败"), TEXT("警告"), MB_OK | MB_ICONEXCLAMATION);
  25.                 return 0;
  26.         }

  27.         hWnd = CreateWindow(szWndClsName,
  28.                                                 szWndName,
  29.                                                 WS_OVERLAPPEDWINDOW,
  30.                                                 CW_USEDEFAULT,
  31.                                                 CW_USEDEFAULT,
  32.                                                 CW_USEDEFAULT,
  33.                                                 CW_USEDEFAULT,
  34.                                                 NULL,
  35.                                                 NULL,
  36.                                                 hInstance,
  37.                                                 NULL);

  38.         ShowWindow(hWnd, nCmdShow);

  39.         UpdateWindow(hWnd);

  40.         while( GetMessage(&msg, NULL, 0, 0) )
  41.         {
  42.                 TranslateMessage(&msg);

  43.                 DispatchMessage(&msg);
  44.         }

  45.         return msg.wParam;
  46. }

  47. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  48. {
  49.         HDC hDC;
  50.         PAINTSTRUCT ps;
  51.         RECT rect;
  52.         TCHAR *szTextContent = TEXT("只有一行文字");

  53.         switch(message)
  54.         {
  55.         case WM_PAINT:
  56.                 hDC = BeginPaint(hWnd, &ps);
  57.                 GetClientRect(hWnd, &rect);
  58.                 DrawText(hDC, szTextContent, -1, &rect,
  59.                         DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS);
  60.                 EndPaint(hWnd, &ps);
  61.                 return 0;

  62.         case WM_DESTROY:
  63.                 PostQuitMessage(0);
  64.                 return 0;
  65.         }

  66.         return DefWindowProc(hWnd, message, wParam, lParam);
  67. }
复制代码
这个没问题

现在把while( GetMessage(&msg, NULL, 0, 0) )中的NULL改成hWnd。那么问题来了:可以关闭窗口,但是任务管理器中显示这个窗口的进程还在,因此,修改程序后生成不成功。
改成-1,关闭窗口直接卡住了。

哪位大神指点指点哈~~
貌似对GetMessage函数不是很理解~~
最佳答案
2016-2-17 11:50:48
把WM_DESTROY下的return 0改为break试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-17 11:50:48 | 显示全部楼层    本楼为最佳答案   
把WM_DESTROY下的return 0改为break试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表