窗口显示的问题
在CWinApp::InitInstance中
{
dlg.Create(ID);
dlg.ShowWindow(SW_SHOWNORMAL);
dlg1.DoModal();
}
创建了两个dialog的对话框
我自己设置了一个定时器,会有一个消息发给这个CWinApp,让它执行一个操作,拉起一个.exe程序,这一切都是没有问题的
遇到的问题是:在我定时器到时间的时候,我的鼠标一直在点击dialog,然后拉起.exe,该.exe是个全屏窗口,但是鼠标的光标还是在dialog上面
再点击一下鼠标的话,.exe的窗口就会自动最小化了,dialog就会显示在最前面
我试了很多方法,我的思路是先用ClipCursor锁定鼠标,这个的作用是不让鼠标点到dialog上面,其实这个可以去掉
关键的步骤是:
拉起.exe
Sleep(1000);
HWND hWnd = FindWindow(NULL,TEXT("test"));
PostMessage( hWnd, WM_SYSCOMMAND,SC_RESTORE, 0L);
SetForegroundWindow(hWnd);
SetWindowPos( hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
SetActiveWindow(hWnd);
就是在这里有问题,有时候还是没等.exe刚拉起,.exe的窗口就自动最小化了,我的理解是焦点还是在dialog上面
后来我试用了下
BOOL (__stdcall *BlockInput)(BOOL Flag);
BlockInput = ( BOOL (__stdcall *)(BOOL ))GetProcAddress(GetModuleHandle( "user32.dll"), "BlockInput");
if (BlockInput)
{
BlockInput(TRUE);
}
就是在启动.exe.之前,调用它,阻止输入设备的输入,效果也不是很好,还是会出现上面的情况
哪位高手有比较好的解决办法,有好的思路也可以,欢迎大家提出宝贵的意见