【框架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);
}



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

相关文章推荐

【Window 硬件】Win10 64位 win7 64位 驱动安装不上,提示“文件的哈希值不在指定的目录文件中。此文件可能已损坏或被篡改。”

提示以下错误,是因为你的数字签名哈希值没有通过Window验证 方案一、给驱动安装有效的数字签名 虽然有些驱动虽然已经有数字签名,这是因为windows验证你的数字签名的时候认为你的数字签名时不合法不...

MFC 限制对话框,窗口大小

1.在类的头文件中加入函数申明    (.h文件)       Cpp代码   afx_msg void OnGetMinMaxInfo(MINMAX...

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

1. 在SDI窗口中添加Splitter(1)在stdafx.h中添加:#include #include (2)在MainFrm.h中添加protected:CSplitterWnd m_wnd...

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

1、获取应用程序指针  CMyApp* pApp=(CMyApp*)AfxGetApp(); 2、获取主框架指针  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针  CMa...

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

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

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

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

框架窗口和文档、视图的交互(MFC)

框架窗口与文档的交互: a、框架窗口    ->    文档  的过程: 1、通过视图。视图都由与之关联的文档,而框架窗口是视图的容器,理所当然,框架窗口和文档的交互可以以视图为桥梁。在框架窗口中...

VS2013MFC单文档工程学习笔记八 - 为窗口添加一张背景图片

方法一: 1、声明成员变量CBrush m_brush; 2、在InitDialog中添加代码: CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); //IDB...
  • asaqlp
  • asaqlp
  • 2015-06-12 01:53
  • 2504

MFC基于单文档分割窗口

创建一个MFC单文档应用程序命名为test 打开资源管理器Dialog,右击鼠标,插入两个对话框 属性分别改为

MFC中单文档窗口的拆分

最近在对MFC中单文档拆分的时候遇到了点问题,在网上有很多大量的资料,但是发现都是将单文档进行简单的拆分,比如拆分为:1行2列,2行1列,这样比较简单的拆分,比较容易实现,下面我将介绍先对一个单文档的...
  • xdhywj
  • xdhywj
  • 2012-07-30 16:19
  • 6434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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