如何设置MFC单文档窗口大小

如何设置MFC单文档窗口大小,第1张

可以用滚动视图CSrcollView,设置滚动范围800*600,这样即使窗口缩小了,实际客户区仍有这么大;

可以禁止系统菜单的放缩和最大化,通过MoveWindow或者初始化窗口属性cs变量固定窗口大小,不可缩小也不可放大;

截获框架CMainFrame的OnSize,在里面强行设置(不推荐,效果不好)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

void CMainFrame::OnSize(UINT nType, int cx, int cy)

{

if(cx<800)

{

cx = 800

CRect rect

GetWindowRect(rect)

rect.right = rect.left+cx

MoveWindow(rect,true)

}

CSDIFrameWnd::OnSize(nType, cx, cy)

// TODO: Add your message handler code here

使用SetWindowPos函数

CWnd::SetWindowPosBOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy,UINT nFlags )。返回值如果函数成功,则返回非零值;否则返回0。

注意:这个窗口不是活动窗口。应用程序不能激活一个非活动窗口但同时又不把它带到Z轴次序的顶部。应用程序可以没有任何限制地改变活动窗口的Z轴次序。非顶层窗口可能拥有一个顶层窗口,但是反之则不成立。任何被顶层窗口拥有的窗口(例如对话框)都将自己变为顶层窗口,以确保所有被拥有的窗口位于它们的拥有者上方。在Windows 3.1或更新的版本中,可以将窗口移动到Z轴次序的顶部,并通过设置它们的WS_EX_TOPMOST风格而将之锁定在那里。

使用MoveWindow函数

void CWnd::MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE )

void CWnd::MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE )

参数:

x指定了CWnd的左边的新位置。

y指定了CWnd的顶部的新位置。

nWidth指定了CWnd的新宽度。

nHeight指定了CWnd的新高度。

bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画 *** 作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画

lpRectCRect对象或RECT结构,指定了新的大小和位置。说明这个函数改变窗口的位置和大小。对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。

有多种方式:\x0d\x0a1、响应WM_GETMINMAXINFO消息(设置lpMMI->ptMinTrackSize和lpMMI->ptMaxTrackSize)\x0d\x0a2、响应WM_SYSCOMMAND消息,屏蔽SC_SIZE(if((nID &0xFFF0) == SC_SIZE) return)\x0d\x0a3、响应WM_NCHITTEST消息,如下:\x0d\x0aUINT CXxDlg::OnNcHitTest(CPoint point) \x0d\x0a{\x0d\x0aUINT ht = CDialog::OnNcHitTest(point)\x0d\x0aif(ht >= HTLEFT &&ht 回答于 2022-11-16


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/tougao/11450218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存