使用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参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。
可以用滚动视图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
在MainFrame框架类里面有个PreCreateWindow(CREATESTRUCT&cs),在这个函数里通过修改sc.style属性(|、&、~位运算 *** 作)即可实现大小可调等其他各种设置了(想设置标题等等),关于sc.style的值可参考相关资料。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)