我目睹了我不明白的行为:
我从桌面(这很重要,不是从VS)启动我的游戏应用程序的编译二进制文件,
在加载之前,我点击另一个窗口(记事本,Skype等)
几秒钟后,应用程序被加载,窗口出现(通过CreateWindow),但不成为活动(这是好的)
我点击我的应用程序窗口
而消息WM_ACTIVATEAPP不来! WM_ACTIVATE。 虽然它应该,因为我的应用程序变得活跃(我可以看到这从标题栏颜色变化,因为GetForegroundWnd开始返回我的wnd)。 WM_NCACTIVATE然后点击msg来。 之后,如果我再次点击另一个窗口,并点击回来,WM_ACTIVATEAPP / WM_ACTIVE开始如我所料。 那里发生了什么?
最小工作示例:
#include <Windows.h> static HWND hWnd = 0; static bool bExit = false; static bool bActive = false; void SetActive( bool active ) { bActive = active; } void PumpMessages() { MSG msg; while ( PeekMessage( &msg,PM_norEMOVE ) ) { if ( ::GetMessage( &msg,0 ) ) { TranslateMessage( &msg ); dispatchMessage( &msg ); } else { bExit = true; } } } static LRESULT CALLBACK WndProc( HWND hWnd,UINT uMsg,WParaM wParam,LParaM lParam ) { switch ( uMsg ) { case WM_ACTIVATEAPP: { printf( "WM_ACTIVATEAPP,wParam = %d,lParam = %dn",wParam,lParam ); SetActive( wParam != 0 ); } break; case WM_ACTIVATE: { printf( "WM_ACTIVATE,lParam ); if ( !(HIWORD(wParam)) ) // if window is not minimized { switch ( LOWORD(wParam) ) { case WA_CLICKACTIVE: // activate window case WA_ACTIVE: { SetActive( true ); break; } case WA_INACTIVE: // deactivate window { SetActive( false ); break; } } } } break; case WM_NCACTIVATE: printf( "WM_NCACTIVATE,wParam = %dn",wParam ); break; default: break; } return DefWindowProc( hWnd,uMsg,lParam ); } int main( int argc,char* argv[] ) { HINSTANCE hInstance = GetModuleHandle( NULL ); const char *pszWnd = "WndMyMy"; const char *pszApp = "AppMyMy"; int posX = 50,posY = 50; DWORD dwWidth = 800,dwHeight = 600; Sleep(2000); WNDCLASS wndClass = { CS_DBLCLKS,WndProc,hInstance,pszWnd }; ATOM atomWndClassName = RegisterClass( &wndClass ); if ( !atomWndClassName ) return 0; DWORD dwWinStyle = WS_OVERLAPPED|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBox|WS_MAXIMIZEBox; hWnd = CreateWindow( pszWnd,pszApp,dwWinStyle,posX,posY,dwWidth,dwHeight,0L,0L ); if ( !hWnd ) return 0; // show & update window ShowWindow( hWnd,SW_SHOW ); SetForegroundWindow( hWnd ); UpdateWindow( hWnd ); while ( !bExit ) { PumpMessages(); } return 0; }
谢谢!
用Cygwin安装pzmq
“你的小猫等待什么”来自哪里?
下载QT静态生成窗口
pipe理无客户区域
在窗户上安装Heroku toolbelt的工头无法find
操作系统Windows 8,
VS 2010 SP1。
在Windows中设置Heroku
Heroku toolbelt将不会运行在Windows 7用户与非拉丁字符在其中
如何停止IFileDialogparsing到他们的目标的快捷方式?
在win32编程中,我如何CreateWindowEx不出现在任务栏和alt + tab列表中?
使用closuresbuttonclosuresOpencv窗口
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。