游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4085|回复: 2

求助:怎么使while(GetMessage(&msg,NULL,0,0)) 起作用(HGE

[复制链接]

37

主题

67

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2007-5-7 09:40:00 | 显示全部楼层 |阅读模式
请教:
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    MSG msg;
        hge = hgeCreate(HGE_VERSION);  //创建 hge 句柄 创建Engine接口
   
        hge->System_SetState((hgeIntState)14,(int)0xFACE0FF); //使不显示 HGE LOGO  
        hge->System_SetState(HGE_LOGFILE, "hge_tut03.log");  //生成日志
        hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);      //设置回调
        hge->System_SetState(HGE_RENDERFUNC, RenderFunc);    //
        hge->System_SetState(HGE_TITLE, "HGE Tutorial 03 - Using helper classes"); //设置窗口标题
        hge->System_SetState(HGE_FPS, 100);                  //设置最大 FPS
        hge->System_SetState(HGE_WINDOWED, true);            //是否是窗口模式  
        hge->System_SetState(HGE_SCREENWIDTH, 800);          //设置窗口的大小 宽
        hge->System_SetState(HGE_SCREENHEIGHT, 600);         //设置窗口的大小 长
        hge->System_SetState(HGE_SCREENBPP, 32);             //设置色彩深度

        hge->System_SetState(HGE_USESOUND, true);          //是否使用声音资源

   
        if(hge->System_Initiate())
        {
         hge->System_Start();       
        }

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


        return 0;
}


我的  
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;

应该是没有起作用的,
因为 HGE 的
bool CALL HGE_Impl::System_Start()
{
        MSG                msg;
        POINT        pt;
        RECT        rc;

        if(!hwnd)
        {
                _PostError("System_Start: System_Initiate wasn't called");
                return false;
        }

        if(!procFrameFunc) {
                _PostError("System_Start: No frame function defined");
                return false;
        }

        bActive=true;

        for(;;)
        {
               
                if(!hwndParent)
                {
                        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
                        {
                                if (msg.message == WM_QUIT)        break;
                                // TranslateMessage(&msg);
                                DispatchMessage(&msg);
                                continue;
                        }
                }

                GetCursorPos(&pt);
                GetClientRect(hwnd, &rc);
                MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
                if(bCaptured || (PtInRect(&rc, pt) && WindowFromPoint(pt)==hwnd)) bMouseOver=true;
                else bMouseOver=false;

                if(bActive || bDontSuspend) {
                        do { dt=timeGetTime() - t0; } while(dt < 1);
                        if(dt >= nFixedDelta)
                        {
                                fDeltaTime=dt/1000.0f;
                                if(fDeltaTime > 0.2f)
                                {
                                        if(nFixedDelta) fDeltaTime=nFixedDelta/1000.0f;
                                        else fDeltaTime=0.01f;
                                }
                                fTime+=fDeltaTime;

                                t0=timeGetTime();
                                if(t0-t0fps < 1000) cfps++;
                                else {nFPS=cfps; cfps=0; t0fps=t0;}
                                if(procFrameFunc()) break;
                                if(procRenderFunc) procRenderFunc();
                                if(hwndParent) break;
                                _ClearQueue();
                                if(!bWindowed && nHGEFPS==HGEFPS_VSYNC) Sleep(1);
                        }
                        else { if(nFixedDelta && dt+3 < nFixedDelta) Sleep(1); }
                }
                else Sleep(1);
        }
        _ClearQueue();
        bActive=false;
        return true;
}






我需要自己抓消息,因为我需要接收串口的信息

各位大哥  System_Start() 需要怎么改啊?

我希望改以后,能这样用:
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,
                                                 LPARAM lParam)
{
        HDC hdc;
        PAINTSTRUCT ps;
        RECT rect;
        char temp[128];
               
        switch(message)
        {
        case WM_CREATE:
               
                return 0;

        //获取键盘输入
        case WM_KEYDOWN:
                switch(wParam)
                {
                //按Esc键推出
                case VK_ESCAPE:
                        PostQuitMessage(0);
                        return 0;
                }
                //其余按键发声,并且开启时钟
                MessageBeep(MB_OK);
                //SetTimer(1,1000,NULL);
               
                return 0;

        //按下鼠标左键发声
        case WM_LBUTTONDOWN:
                MessageBeep(MB_OK);
         //KillTimer(1);
                 KillTimer(hwnd,1);
                return 0;

        //按下鼠标右键退出
        case WM_RBUTTONDOWN:
                PostQuitMessage(0);
                return 0;

        //鼠标位置改变,显示坐标
        case WM_MOUSEMOVE:
                //hdc = GetDC(hwnd);
                //sprintf(temp,"x: %d , y: %d",50,50);
                //TextOut(hdc,10,10,temp,strlen(temp));
                //ReleaseDC(hwnd,hdc);               
                return 0;

        case WM_PAINT:
                hdc=BeginPaint(hwnd,&ps);
                GetClientRect(hwnd,&rect);
                EndPaint(hwnd,&ps);
                return 0;
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
    case WM_TIMER:
                i++;
                if (i%2)
                {
                 hdc = GetDC(hwnd);
         sprintf(temp,"x: %d , y: %d",50,50);
         TextOut(hdc,100,100,temp,strlen(temp));
                 ReleaseDC(hwnd,hdc);
                }
                else
                {
          hdc = GetDC(hwnd);
         sprintf(temp,"x: %d , y: %d",60,60);
         TextOut(hdc,100,100,temp,strlen(temp));
                 ReleaseDC(hwnd,hdc);
                }
                 return 0;
                }

        return DefWindowProc(hwnd,message,wParam,lParam);
}



谢谢!

[em3] [em17] [em20] [em20]

16

主题

280

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
QQ
发表于 2007-5-7 20:48:00 | 显示全部楼层

Re: 求助:怎么使while(GetMessage(&msg,NULL,0,0)) 起作用(HGE

[em6]

5

主题

54

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2007-5-8 09:56:00 | 显示全部楼层

Re:求助:怎么使while(GetMessage(&msg,NULL,0,0)) 起作用(HGE

没用过你说这引擎但是你收的那些键盘消息不是可以直接从你的那个窗口的窗口过程里得到,那里直接用你写的那些case不就OK了,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 13:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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