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

原创 2016年08月29日 12:57:04

原理

在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);
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC多文档设置窗口大小

在ChildFrm.cpp文件中修改PreCreateWindow函数如下: BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) { // TO...
  • kaida1234
  • kaida1234
  • 2015年09月28日 15:43
  • 909

MFC,调整窗口大小限制大小,设置窗口的最大|最小宽度与高度

方法一:响应窗口 WM_SIZE 消息(不推荐) WM_SIZE 消息是当窗口大小发生改变后发送的,所以如果要在这个窗口中限制窗口大小的话,你就需要重新计算窗口的大小信息,代码如下: ...
  • cytj129
  • cytj129
  • 2016年09月10日 14:54
  • 3635

MFC 限制对话框,窗口大小

1.在类的头文件中加入函数申明    (.h文件)       Cpp代码   afx_msg void OnGetMinMaxInfo(MINMAXINFO *lpMM...
  • imxiangzi
  • imxiangzi
  • 2014年07月16日 14:23
  • 5704

MFC去掉窗口右上方最大化最小化关闭按钮

MFC去掉窗口右上方最大化最小化关闭按钮
  • eickandy
  • eickandy
  • 2015年09月17日 08:53
  • 4218

MFC单文档框架编程(一): 分隔窗口的实现

1. 在SDI窗口中添加Splitter(1)在stdafx.h中添加:#include #include (2)在MainFrm.h中添加protected:CSplitterWnd m_wnd...
  • shixin_0125
  • shixin_0125
  • 2015年01月27日 08:45
  • 471

MFC MDI项目如何一个文档显示多个不同视图类(比如文字和图表,各自拥有单独的框架窗口)

先上图:每个窗口都有自己独自的完全窗口,可关闭可最大最小化。 不是那种Splitter窗口。 直接用MFC的MDI或SDI向导是出不来这种效果的。 你可以用同一份文档中的数据在不同窗口显示文本或图表,...
  • softfox
  • softfox
  • 2016年04月05日 22:45
  • 2917

VS2013/MFC编程入门之三十八(文档、视图和框架:分割窗口)

上一节中讲了文档、视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口。       分割窗口概述       分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格...
  • phenixyf
  • phenixyf
  • 2017年12月26日 23:21
  • 50

详解MFC框架窗口、文档和视图

尽管窗口、文档和视图是MFC的基础,但可能也是最不容易理解的部分,因为其概念比传统编程所需要的Windows函数更强一些,因此,须在本章做进一步详细讨论框架窗口、文档和视图的方法和技巧。 6.1框架...
  • mail_cm
  • mail_cm
  • 2012年01月09日 16:38
  • 3786

MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法

1、获取应用程序指针  CMyApp* pApp=(CMyApp*)AfxGetApp(); 2、获取主框架指针  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针  CMa...
  • sgs1018
  • sgs1018
  • 2013年05月24日 16:49
  • 1459

VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)

上一节中鸡啄米讲了文档、视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口。       分割窗口概述       分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中...
  • my_lord_
  • my_lord_
  • 2016年09月01日 15:54
  • 406
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【框架MFC】限制单文档和多文档窗口范围最小值(设置窗口宽度和高度的下限)
举报原因:
原因补充:

(最多只允许输入30个字)