Directx(Win32消息机制)


Win32消息机制


当用户出发输入设备出发某个时事件,操作系统将事件所对应的消息发送到该队列中,应用程序在消息循环中消息队列中不断提取消息,通过事件处理程序(通常命名WndProc)中根据消息种类,执行不同程序



WIN32项目解注

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) //参数:窗口句柄,消息,消息参数,消息参数
{
    switch( msg )                                     //处理消息
    {
        case WM_DESTROY:               //当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
            PostQuitMessage( 0 );
            return 0;
        case WM_KEYDOWN:              //其他消息响应事件
            switch( wParam )
            {
            case VK_UP:
               OnUpPressed();
                break;
            case VK_DOWN:          //执行相应操作
               OnDownPressed();
                break;
            case VK_LEFT:
                OnLeftPressed();
                break;
            case VK_RIGHT:
               OnRightPressed();
                break;
            case VK_SPACE:
              OnSpacePressed();
                break;
            case VK_RETURN:
               OnEnterPressed();
                break;
            }
            break;
        case WM_KEYUP:
               switch( wParam )
            {
            case VK_UP:
               OnUpReleased();
                break;
            case VK_DOWN:
                OnDownReleased();
                break;
            case VK_LEFT:
               OnLeftReleased();
                break;
            case VK_RIGHT:
                OnRightReleased();
                break;
            case VK_SPACE:
                kServ.OnSpaceReleased();
                break;
            case VK_RETURN:
                kServ.OnEnterReleased();
                break;
            }
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}


int WINAPI wWinMain( HINSTANCE hInst,HINSTANCE,LPWSTR,INT )
{
    WNDCLASSEX wc = { sizeof( WNDCLASSEX ),CS_CLASSDC,MsgProc,0,0,
                      GetModuleHandle( NULL ),NULL,NULL,NULL,NULL,
                      L"DirectX Framework Window",NULL };         //窗体对象  释
    wc.hIconSm = (HICON)LoadImage( hInst,MAKEINTRESOURCE( IDI_APPICON16 ),IMAGE_ICON,16,16,0 );
    wc.hIcon   = (HICON)LoadImage( hInst,MAKEINTRESOURCE( IDI_APPICON32 ),IMAGE_ICON,32,32,0 );
    RegisterClassEx( &wc );
    
    RECT wr;
   
    AdjustWindowRect( &wr,WS_OVERLAPPEDWINDOW,FALSE );
    HWND hWnd = CreateWindowW( L"DirectX Framework Window",L"WindowName",
                              WS_OVERLAPPEDWINDOW,wr.left,wr.top,wr.right-wr.left,wr.bottom-wr.top,
                              NULL,NULL,wc.hInstance,NULL );  //创建窗口 

    ShowWindow( hWnd,SW_SHOWDEFAULT );
    UpdateWindow( hWnd );

  

    
    MSG msg; //消息循环
    ZeroMemory( &msg,sizeof( msg ) );
   
    while( msg.message != WM_QUIT )   //循环
    {
        if( PeekMessage( &msg,NULL,0,0,PM_REMOVE ) )   //无论消息队列有无消息,都会返回。PM_REMOVE为消息检索方式
        {
            TranslateMessage( &msg );  //转换消息
            DispatchMessage( &msg );   //派发消息
        }
        else
        {
            //逻辑
        }
    
    }

    UnregisterClass( L"DirectX Framework Window",wc.hInstance );
    return 0;
}
			
待完善 书忘在家里了。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值