游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10619|回复: 26

以下的消息循环为什么用for(;;)死循环???

[复制链接]

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2004-12-14 21:17:00 | 显示全部楼层 |阅读模式
#include <windows.h>
//#include <window.h>
int InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam,
                                           LPARAM lParam );

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
          //hPrevInstance=NULL;
        // TODO: Place code here.
        if (!InitWindow(hInstance,nCmdShow))
                return FALSE ;
      
        MSG msg;
        for (;;)
        {
                if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
                {
                        if (msg.message==WM_QUIT)break;
            TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
        }
       

   
        return msg.wParam;
}

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
        HWND hwnd;
        WNDCLASS wc;
        wc.style = CS_SAVEBITS;
        wc.lpfnWndProc = (WNDPROC)WinProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 1;
        wc.hInstance = hInstance;
        wc.hIcon = NULL;
        wc.hCursor = NULL;
        wc.hbrBackground = CreateSolidBrush (RGB(200, 0, 0)); //暗红色的背景
        wc.lpszMenuName = NULL;
        wc.lpszClassName = "wctext";
    RegisterClass(&wc);
        hwnd = CreateWindow("wctext","My first program",
                               WS_MAXIMIZE,0,0,
                       GetSystemMetrics( SM_CXSCREEN ), //此函数返回屏幕宽度
                       GetSystemMetrics( SM_CYSCREEN ), //此函数返回屏幕高度
                       NULL,NULL,hInstance,NULL);
        if( !hwnd ) return FALSE;
        ShowWindow(hwnd,SW_SHOWMAXIMIZED);//显示窗口
        UpdateWindow(hwnd);//刷新窗口
        return TRUE;

}
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam,
                                                 LPARAM lParam )
{
   
        switch(message)
        {
                case WM_KEYDOWN:
                        switch(wParam)
                        {
               case  VK_ESCAPE:
                                   MessageBox(hWnd,"你准备退出","退出",MB_OK);
                                   PostMessage(hWnd, WM_CLOSE, 0, 0);//给窗口发送WM_CLOSE消息
                   break;

                        }
        return 0;

        }



}
[em6]

1

主题

60

帖子

60

积分

注册会员

Rank: 2

积分
60
发表于 2004-12-14 21:30:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

it's not deadlock...

if (msg.message==WM_QUIT)break;

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2004-12-14 21:32:00 | 显示全部楼层

Re: 以下的消息循环为什么用for(;;)死循环???

我运行时就是死循环。
   [em7]

1

主题

60

帖子

60

积分

注册会员

Rank: 2

积分
60
发表于 2004-12-14 21:34:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

按esc键试试?

26

主题

417

帖子

476

积分

中级会员

总版主

Rank: 3Rank: 3

积分
476
发表于 2004-12-14 21:35:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

if (msg.message==WM_QUIT)break;


这样估计行,呵呵
if (msg.message==WM_CLOSE ||
  msg.message==WM_QUIT  )break;

因为 WM_KEYDOWN是Post的WM_CLOSE,而非WM_QUIT

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2004-12-14 21:36:00 | 显示全部楼层

Re: 以下的消息循环为什么用for(;;)死循环???

if (msg.message==WM_QUIT)break;
如果没有WM_ QUIT消息就会死循环的。。。
  这样的程序不是有问题吗???

    请指教!! [em10]

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2004-12-14 21:39:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

你好:“爱心战士”请留下QQ可以吗??
   谢谢!

26

主题

417

帖子

476

积分

中级会员

总版主

Rank: 3Rank: 3

积分
476
发表于 2004-12-14 21:40:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

谁是”爱新战士“???

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2004-12-14 21:40:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

不论是谁。可以的话就留下QQ。谢谢!

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2004-12-14 21:42:00 | 显示全部楼层

Re:以下的消息循环为什么用for(;;)死循环???

有什么办法啊??我一运行就死循环??
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 17:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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