鱼C论坛

 找回密码
 立即注册
查看: 4291|回复: 17

windows程序设计的问题

[复制链接]
发表于 2013-1-22 15:43:12 | 显示全部楼层 |阅读模式
5鱼币
  1. While(true)
  2. {
  3. if(GetMessage(&msg,NULL,0,0))
  4.     break;
  5. TranslateMessage(&msg);
  6. DispatchMessage(&msg);
  7. }
复制代码
当你结束程序后,窗口是没有了。但是去“任务管理器”里看,还能看到那个进程。为什么?
求解求解求解,先谢谢了

最佳答案

查看完整内容

这个是我写的你看看
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-22 15:43:13 | 显示全部楼层
  1. #include <windows.h>

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

  3. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  4.                     PSTR szCmdLine, int iCmdShow)
  5. {
  6.      static TCHAR szAppName[] = TEXT ("HelloWin") ;
  7.      HWND         hwnd ;
  8.      MSG          msg ;
  9.      WNDCLASS     wndclass ;
  10.          int a;

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

  21.      if (!RegisterClass (&wndclass))
  22.      {
  23.           MessageBox (NULL, TEXT ("This program requires Windows NT!"),
  24.                       szAppName, MB_ICONERROR) ;
  25.           return 0 ;
  26.      }
  27.      
  28.      hwnd = CreateWindow (szAppName,                  // window class name
  29.                           TEXT ("The Hello Program"), // window caption
  30.                           WS_OVERLAPPEDWINDOW,        // window style
  31.                           CW_USEDEFAULT,              // initial x position
  32.                           CW_USEDEFAULT,              // initial y position
  33.                           CW_USEDEFAULT,              // initial x size
  34.                           CW_USEDEFAULT,              // initial y size
  35.                           NULL,                       // parent window handle
  36.                           NULL,                       // window menu handle
  37.                           hInstance,                  // program instance handle
  38.                           NULL) ;                     // creation parameters
  39.      
  40.      ShowWindow (hwnd, iCmdShow) ;
  41.      UpdateWindow (hwnd) ;
  42. /*   
  43.      while (GetMessage (&msg, NULL, 0, 0))
  44.      {
  45.           TranslateMessage (&msg) ;
  46.           DispatchMessage (&msg) ;
  47.      }
  48. */
  49.          while(1)
  50.          {
  51.                  if( ! GetMessage (&msg, NULL, 0, 0))
  52.                          break;
  53.                  TranslateMessage(&msg);
  54.                  DispatchMessage(&msg);
  55.          }
  56.      return msg.wParam ;
  57. }

  58. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  59. {
  60.      HDC         hdc ;
  61.      PAINTSTRUCT ps ;
  62.      RECT        rect ;
  63.      
  64.      switch (message)
  65.      {
  66.          
  67.      case WM_PAINT:
  68.           hdc = BeginPaint (hwnd, &ps) ;
  69.          
  70.           GetClientRect (hwnd, &rect) ;
  71.          
  72.           DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
  73.                     DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
  74.          
  75.           EndPaint (hwnd, &ps) ;
  76.           return 0 ;
  77.          
  78.      case WM_DESTROY:
  79.           PostQuitMessage (0) ;
  80.           return 0 ;
  81.      }
  82.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  83. }
复制代码
这个是我写的你看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 16:03:12 | 显示全部楼层
帮小弟看看。。。我点错了  还没想明白
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-22 16:45:47 | 显示全部楼层

我还是很久以前看的windows程序设计,但是我可以确定的是你在消息处理的回调函数中少了写东西,至于那消息该怎么写我忘记了,但是你只要看下你的回调函数就明白了!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-22 21:36:24 | 显示全部楼层
case WM_DESTROY:
                        PostQuitMessage( 0);
                        return 0;

估计你是没写这个消息处理
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 21:41:27 | 显示全部楼层
友来友网 发表于 2013-1-22 21:36
case WM_DESTROY:
                        PostQuitMessage( 0);
                        return 0;

http://zhhdesigner.blog.163.com/ ... 632010111571540534/
这是我在网上查的getmessage和peekmessage中看的,有时间还请看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 21:44:17 | 显示全部楼层
◇﹎濰一﹖ 发表于 2013-1-22 16:45
我还是很久以前看的windows程序设计,但是我可以确定的是你在消息处理的回调函数中少了写东西,至于那消息 ...

http://zhhdesigner.blog.163.com/ ... 632010111571540534/
小弟是在这个帖子里面看到的这个问题。我自己改了个程序。。。结果就是进程没有结束,只有窗口结束了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-22 22:03:02 | 显示全部楼层
While(true)
{
if(GetMessage(&msg,NULL,0,0))
    break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}


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

这两个不是一样吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-22 22:05:23 | 显示全部楼层
窗口 过程函数 也上来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 22:06:57 | 显示全部楼层
友来友网 发表于 2013-1-22 22:03
While(true)
{
if(GetMessage(&msg,NULL,0,0))

你改一个程序看看  简单替换一下
然后运行,两个程序前后进行比较。。。就会发现任务管理器里面还有进程
我一开始也认为一样:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 22:14:03 | 显示全部楼层
hy19970612 发表于 2013-1-22 22:05
窗口 过程函数 也上来
  1. #include "Windows.h"
  2. #include "tchar.h"
  3. HWND hWinMain;
  4. TCHAR szClassName[] = _T("MyClass");
  5. TCHAR szCaptionMain[] = _T("My First Window!");
  6. TCHAR FontName[] = _T("宋体");
  7. WNDCLASSEX stdWndClass;
  8. WPARAM keyChar = 0x20; //0x20 是空格的ascii 码,保证没有按键的时候程序正常显示。
  9. BOOL MouseClick = FALSE;
  10. POINT hitPoint;
  11. LRESULT CALLBACK ProcWinMain( HWND hWnd,
  12. UINT Msg,
  13. WPARAM wParam,
  14. LPARAM lParam
  15. )
  16. {
  17. PAINTSTRUCT stPs;
  18. HDC hDC;
  19. HFONT hFont,hOldFont;
  20. switch(Msg)
  21. {
  22. case WM_PAINT:
  23. {
  24. hDC = BeginPaint(hWnd,&stPs);
  25. hFont = CreateFont(24,16,0,0,400,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,
  26. CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,FontName);
  27. hOldFont = (HFONT)SelectObject(hDC,hFont);
  28. SetTextColor(hDC,RGB(200,200,50));
  29. SetBkColor(hDC,RGB(0,0,255));
  30. TextOut(hDC,0,0,(char *)&keyChar,1);
  31. if(MouseClick)
  32. {
  33. TextOut(hDC,hitPoint.x,hitPoint.y,szCaptionMain,lstrlen(szCaptionMain));
  34. }

  35. SelectObject(hDC,hOldFont);
  36. EndPaint(hWnd,&stPs);
  37. }
  38. break;
  39. case WM_LBUTTONDOWN:
  40. {
  41. hitPoint.x = LOWORD(lParam);
  42. hitPoint.y = HIWORD(lParam);
  43. MouseClick = TRUE;
  44. InvalidateRect(hWnd,NULL,FALSE);
  45. }
  46. break;
  47. case WM_RBUTTONDOWN:
  48.         {
  49.                 hitPoint.x=LOWORD(lParam);
  50.                 hitPoint.y = HIWORD(lParam);
  51.                 MouseClick = TRUE;
  52.                 InvalidateRect(hWnd,NULL,FALSE);
  53.         }
  54. break;
  55. case WM_CHAR:
  56. {
  57. keyChar = wParam;
  58. InvalidateRect(hWnd,NULL,TRUE);
  59. }
  60. break;
  61. case WM_DESTROY:
  62. {
  63. PostQuitMessage(NULL);
  64. }
  65. break;
  66. default:
  67. return DefWindowProc(hWnd, Msg, wParam, lParam );
  68. }
  69. return 0;
  70. }
  71. int WINAPI WinMain( HINSTANCE hInstance,
  72. HINSTANCE hPrevInstance,
  73. LPSTR lpCmdLine,
  74. int nCmdShow
  75. )
  76. {
  77. MSG stMsg;
  78. WNDCLASSEX stdWndClass;
  79. RtlZeroMemory(&stdWndClass, sizeof(stdWndClass));
  80. stdWndClass.hCursor = LoadCursor(0,IDC_ARROW);
  81. stdWndClass.cbSize = sizeof(stdWndClass);
  82. stdWndClass.style = CS_HREDRAW|CS_VREDRAW;
  83. stdWndClass.lpfnWndProc = ProcWinMain;
  84. stdWndClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
  85. stdWndClass.lpszClassName = szClassName;
  86. stdWndClass.hInstance = hInstance;
  87. RegisterClassEx(&stdWndClass);
  88. hWinMain = CreateWindowEx(WS_EX_CLIENTEDGE,szClassName,szCaptionMain,\
  89. WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,hInstance,NULL);
  90. if(!hWinMain)
  91. return 0;
  92. ShowWindow(hWinMain,SW_SHOWNORMAL);
  93. UpdateWindow(hWinMain);
  94. while(TRUE)
  95. {
  96. if (GetMessage(&stMsg,NULL,0,0))
  97. {
  98.         TranslateMessage(&stMsg);
  99.         DispatchMessage(&stMsg);
  100. }


  101. }
  102. return stMsg.wParam;
  103. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 22:15:02 | 显示全部楼层
友来友网 发表于 2013-1-22 22:03
While(true)
{
if(GetMessage(&msg,NULL,0,0))

我把我改的程序贴上来了{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-22 22:25:28 | 显示全部楼层

While(true)
{
if( !GetMessage(&msg,NULL,0,0))
    break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}


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

仔细看了下
这样才一样, if( !GetMessage(&msg,NULL,0,0))
你在看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-22 23:00:18 | 显示全部楼层
友来友网 发表于 2013-1-22 22:28
这个是我写的你看看

谢谢  我的错误
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-24 15:06:29 | 显示全部楼层
看一下吧,呵呵
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-24 16:22:01 | 显示全部楼层
回复看一下我是不是会员,,到底是不是呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-25 10:40:49 | 显示全部楼层
卡卡西偏南45度 发表于 2013-1-24 16:22
回复看一下我是不是会员,,到底是不是呢

恭喜
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-27 15:46:14 | 显示全部楼层

呵呵呵,同喜同喜{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-8 22:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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