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;
}
待完善 书忘在家里了。。。