1.双击ocx中Dialog对话框全屏时只在左上角显示,而不是全屏。
查找原因是在Dialog的的父窗口的OnPaint函数中有对全屏的Dialog移动操作,所以未能全屏
在ocx的OnDraw操作Dialog同样出现不能全屏问题。父窗口在移动Dialog时先判断Dialog是否全
屏
2.Dialog设置全屏时,窗口焦点不在Dialog上,无法获取键盘esc消息,用GetAsyncKeyState函数
可以获取任何时候键盘的按下状态,所以在Dialog中创建一线程一直抓取键盘状态
程序退出析构时,m_runing=false;::Sleep(10);以免读取不到m_running值,发展异常。
void GetKeyState(void)
{
while(m_running)
{
int ret=::GetAsyncKeyState(VK_ESCAPE)&0x8000;
if(ret>0&&isSetFull)
{
SetFullScreenState();
GetParent()->Invalidate();
}
::Sleep(10);
}
}
void SetFullScreenState()
{
if(!isSetFull)
{
m_parent=this->GetParent();
SetParent(GetDesktopWindow());
int width = ::GetSystemMetrics(SM_CXSCREEN);
int height = ::GetSystemMetrics(SM_CYSCREEN);
iSetForegroundWindow();
BringWindowToTop();
SetWindowPos(&wndTopMost,0, 0,width,height,SWP_SHOWWINDOW);
isSetFull=true;
}
else
{
SetParent((CWnd*)m_parent);
MoveWindow(oldrect);//oldrect在OnPaint中获取
ShowWindow(SW_SHOW);
isSetFull=false;
}
}
评论10
最新资源