技术调查:
Win7双击任务栏中高Cpu负荷运行的进程的图标,导致激活此进程的窗体还原事件SC_RESTORE。
解决方案:
我的需求要求主界面始终最大化显示,在主框架接收到SC_RESTORE消息时ShowWindow(SW_MAXIMIZE) 。
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// win7 禁止窗体框架非客户区鼠标拖动
switch (nID)
{
case SC_RESTORE:
// CFrameWnd::OnSysCommand(SC_MAXIMIZE, lParam);
ShowWindow(SW_MAXIMIZE);
break;
case SC_MOVE:
case 0xF012:
return;
default:
CFrameWnd::OnSysCommand(nID, lParam);
}
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
//if (SIZE_RESTORED == nType)
//{
// ShowWindow(SW_MAXIMIZE);
// //this->MoveWindow(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
// //return;
// //CFrameWnd::OnSize(SIZE_MAXIMIZED, cx, cy);
//}
//else
CFrameWnd::OnSize(nType, cx, cy);
// 解决浮动窗口移动中,主框架最小化导致的浮动窗口定位错误。
CView* pView = GetActiveView();
if (pView && SIZE_MAXIMIZED == nType)
{
//RecalcLayout();
::SendMessageA(pView->m_hWnd, WM_SIZE, cx, cy);
}
}
{
// win7 禁止窗体框架非客户区鼠标拖动
switch (nID)
{
case SC_RESTORE:
// CFrameWnd::OnSysCommand(SC_MAXIMIZE, lParam);
ShowWindow(SW_MAXIMIZE);
break;
case SC_MOVE:
case 0xF012:
return;
default:
CFrameWnd::OnSysCommand(nID, lParam);
}
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
//if (SIZE_RESTORED == nType)
//{
// ShowWindow(SW_MAXIMIZE);
// //this->MoveWindow(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
// //return;
// //CFrameWnd::OnSize(SIZE_MAXIMIZED, cx, cy);
//}
//else
CFrameWnd::OnSize(nType, cx, cy);
// 解决浮动窗口移动中,主框架最小化导致的浮动窗口定位错误。
CView* pView = GetActiveView();
if (pView && SIZE_MAXIMIZED == nType)
{
//RecalcLayout();
::SendMessageA(pView->m_hWnd, WM_SIZE, cx, cy);
}
}