我用CWinthread + CWnd做了个启动窗口,用于显示动画,sleep()一段时间后,结束该窗口线程,再显示主窗口,程序加在CXXApp的初始化函数中,但是显示的主窗口不直接显示出来,每次都得在任务栏点一下才能显示出来,怎么才能解决这个问题呢?意思是窗口线程退出后不能激活后续创建的主窗口,每次都是显示程序启动前的最后一个活动窗口
解决方案 »
- 管道的效率
- 求教GetFieldValue(1, area)与GetFieldValue((short)0, var, SQL_C_SLONG)
- 为什么我的通信线程不能使用主线程的CSokcet全局变量
- 将24位真彩色转换为256色的bmp图像的问题
- 请高人指教ATL做的DLL如何屏蔽弹出广告,浮动广告
- 请问应该如何在一个拥有多行的CEdit控件中把选中的一行加重显示(令其颜色反转成黑色),并且在程序中取得所选中的字符串?
- 并口和串口的操作在windows98和win2000server下有区别吗??????
- 为什么键入回车不换行???
- 求救!关于图形学
- ping对等网中的另一台机,却出现163拨号器
- Tab控件如果透明
- 单文档,从何处获知控件已经创建?
楼主说的问题我猜想是用到了多线程,这里不再说是否的合适的问题了。
我不知道你的欢迎窗口到底是在哪儿结束的?结束以后到底干了什么?
我给你一个解决办法:当你的欢迎窗口结束以后,使用下面的代码强制将你的主窗口放在最前面。如下:
UINT nCmdShow = SW_SHOW;
if (!IsWindowVisible())
nCmdShow = SW_SHOW;
else if (IsIconic())
nCmdShow = SW_RESTORE;
ShowWindow(nCmdShow);
SetForegroundWindow(); //如果只是在任务栏上闪烁,则使用暴力手段把你的程序切换到前台.
if(GetForegroundWindow()!=this)
{
CRect rc;
GetWindowRect( rc );
//先切换到最前面
SetWindowPos(&wndTopMost ,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
//模拟鼠标单击标题栏获得焦点
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN,rc.left+1,rc.top+1,0,0);
Sleep(1);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP,rc.left+1,rc.top+1,0,0);
//取消TOPMOST属性
SetWindowPos(&wndNoTopMost ,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
//再次切换到前面
SetForegroundWindow();
}