关闭

【框架MFC】限制单文档和多文档窗口范围最小值(设置窗口宽度和高度的下限)

587人阅读 评论(0) 收藏 举报
分类:

原理

在CWnd类的“CreateEx”函数中使用了“::AfxCtxCreateWindowEx”来设置窗口的属性,在调用“::AfxCtxCreateWindowEx”函数之前,调用了PreCreateWindow函数获取窗口信息,所以重载PreCreateWindow函数,并在中给定“cs.cx、cs.cy”就可以设置窗口宽度和高度的初始化大小。重载OnGetMiniMaxInfo函数,设置窗口可修改大小的最小值。


BOOL CWnd::CreateEx(DWORD dwExStyle,LPCTSTR lpszClassName,
     LPCTSTR lpszWindowName,DWORD dwStyle,
     int x, int y, int nWidth, int nHeight,
     HWND hWndParent,HMENU nIDorHMenu,LPVOID lpParam)
{
     ASSERT(lpszClassName== NULL || AfxIsValidString(lpszClassName) ||
         AfxIsValidAtom(lpszClassName));
     ENSURE_ARG(lpszWindowName== NULL || AfxIsValidString(lpszWindowName));
    
     // allow modification of several common create parameters
     CREATESTRUCT cs;
     cs.dwExStyle = dwExStyle;
     cs.lpszClass = lpszClassName;
     cs.lpszName = lpszWindowName;
     cs.style = dwStyle;
     cs.x = x;
     cs.y = y;
     cs.cx = nWidth;
     cs.cy = nHeight;
     cs.hwndParent =hWndParent;
     cs.hMenu = nIDorHMenu;
     cs.hInstance = AfxGetInstanceHandle();
     cs.lpCreateParams= lpParam;
 
     if (!PreCreateWindow(cs))
     {
         PostNcDestroy();
         return FALSE;
     }
 
     AfxHookWindowCreate(this);
     HWND hWnd = ::AfxCtxCreateWindowEx(cs.dwExStyle, cs.lpszClass,
              cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy,
              cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams);
 
#ifdef _DEBUG
     if (hWnd == NULL)
     {
         TRACE(traceAppMsg,0, "Warning: Window creation failed:GetLastError returns 0x%8.8X\n",
              GetLastError());
     }
#endif
 
     if (!AfxUnhookWindowCreate())
         PostNcDestroy();        // cleanup ifCreateWindowEx fails too soon
 
     if (hWnd == NULL)
         return FALSE;
     ASSERT(hWnd == m_hWnd); // should havebeen set in send msg hook
     return TRUE;
}


代码

class CMainFrame : publicCMDIFrameWnd
{
// 重写
public:
     virtual BOOL PreCreateWindow(CREATESTRUCT&cs);
};
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
     if( !CMDIFrameWnd::PreCreateWindow(cs))
         return FALSE;
     cs.cx = 800;
     cs.cy = 600;
 
     return TRUE;
}
 
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (theApp.m_infoMachine.nMajorType == MajorType_SmartGel)
	{
		lpMMI->ptMinTrackSize.x=WIN_POS_MainFrameMinX_PAD;
		lpMMI->ptMinTrackSize.y=WIN_POS_MainFrameMinY_PAD;
	}
	else
	{
		lpMMI->ptMinTrackSize.x=WIN_POS_MainFrameMinX_PC;
		lpMMI->ptMinTrackSize.y=WIN_POS_MainFrameMinY_PC;
	}

	CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
}



0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:152944次
    • 积分:4285
    • 等级:
    • 排名:第7037名
    • 原创:279篇
    • 转载:37篇
    • 译文:1篇
    • 评论:23条
    最新评论