窗口位置、大小设置

一:SetWindowPos设置整个对话框的大小(包括非客户区)和位置

BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);

理解:参数pWndInsertAfter决定窗口位于那一层,是在顶层还是在底层,窗口位置由点(x,y)决定,窗口宽高由cx,cy决定。参数nFlags决定进行不同的操作,如SWP_NOMOVE是忽略(x,y)的作用,即位置由系统决定,而不由(x,y)决定。而SWP_NOSIZE是忽略cx,cy的作用,即窗口的宽高由系统决定,而不由cx,cy决定。等等...。

实验源码(在OnInitDialog函数中添加代码):

SetWindowPos(NULL,0,0,500,500,SWP_SHOWWINDOW );	
CRect rect;
GetWindowRect(&rect);
CString str;
str.Format(_T("point:(%d,%d),width:%d,height:%d"),rect.left,rect.top,rect.Width(),rect.Height());
MessageBox(str);
弹出对话框显示:



二:设置客户区的大小(将客户区宽高设置为512,512)

实验(在OnInitDialog中添加源码)

CRect rectWindow;
GetWindowRect(&rectWindow);
CRect rectClient;
GetClientRect(&rectClient);
int cx=512+rectWindow.Width()-rectClient.Width();
int cy=512+rectWindow.Height()-rectClient.Height();
SetWindowPos(NULL,0,0,cx,cy,SWP_NOMOVE);	
GetWindowRect(&rectWindow);
CString str;
str.Format(_T("point:(%d,%d),width:%d,height:%d"),\
	rectWindow.left,rectWindow.top,rectWindow.Width(),rectWindow.Height());
MessageBox(str);
GetClientRect(&rectClient);
str.Format(_T("point:(%d,%d),width:%d,height:%d"),\
	rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height());
MessageBox(str);
运行结果:



三:GetWindowRect与GetClientRect分别用于获取窗口大小和客户区大小。

注意:GetWindowRect获取是屏幕左上角为原点建立的坐标系给出坐标。而GetClientRect是以客户区左上角为原点建立的坐标系给出的坐标。

使用函数ScreenToClient可以将GetWindowRect获取的坐标转换为以客户区左上角为原点建立的坐标系给出的坐标。

使用函数ClientToScreen可以将GetClientRect获取的坐标转换为屏幕左上角为原点建立的坐标系给出的坐标。

四:窗口居中显示

实验代码(在OnInitDialog函数中添加代码):

SetWindowPos(NULL,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);    
int cx=GetSystemMetrics(SM_CXSCREEN);
int cy=GetSystemMetrics(SM_CYSCREEN);
CRect rectWindow;
GetWindowRect(&rectWindow);
SetWindowPos(NULL,(cx-rectWindow.Width())/2,(cy-rectWindow.Height())/2,\
	0,0,SWP_NOSIZE|SWP_SHOWWINDOW);
为了测试效果,第一行代码的作用是将窗口移到了屏幕的左上角。余下代码的作用是将窗口居中显示。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值