MFC窗口位置和大小的获取

最近在做一个项目,需要控件随对话框大小的变化而变化,因此需要准确获取对话框窗口、控件的大小和位置。

经过好一番查寻、测试,终于看到了希望。下面是一些获取窗口位置和大小的函数,示例如下:

1、获取屏幕分辨率

//下边两个函数获取的是显示屏幕的大小,但不包括任务栏等区域
int cx = GetSystemMetrics(SM_CXFULLSCREEN);
int cy = GetSystemMetrics(SM_CYFULLSCREEN);

//下边这两个函数获取的是真正屏幕的大小:屏幕分辨率
int nWidth=GetSystemMetrics(SM_CXSCREEN); //屏幕宽度
int nHeight=GetSystemMetrics(SM_CYSCREEN); //屏幕高度
CString strScreen;
strScreen.Format(L"%d,%d",nWidth,nHeight);
MessageBox(strScreen);

2、获取对话框窗体大小及其屏幕坐标

//对话框窗体大小及其屏幕坐标

CRect rectDlg;

方法1:

GetClientRect(rectDlg);//获得窗体的大小

方法2:

//GetWindowRect(rectDlg);//获得窗体在屏幕上的位置
//ScreenToClient(rectDlg);
CString strDlg;
strDlg.Format(L"%d,%d,%d,%d",rectDlg.left,rectDlg.top,rectDlg.Width(),rectDlg.Height());
MessageBox(strDlg);

3、获取控件大小和位置

//控件大小和位置
CRect rectCtrl;
CStatic p=(CStatic)GetDlgItem(IDC_STATIC_TEST);
p->MoveWindow(100,100,100,100);//更改控件大小并移动其到指定位置
p->GetWindowRect(rectCtrl);
this->ScreenToClient(rectCtrl);
//GetDlgItem(IDC_STATIC_TEST)->GetClientRect(rectCtrl);
CString str;
str.Format(L"%d,%d,%d,%d",rectCtrl.left,rectCtrl.top,rectCtrl.Width(),rectCtrl.Height());
MessageBox(str);

总结:

  1. GetSystemMetrics() --> 用于得到被定义的系统数据或者系统配置信息;
  1. GetClientRect() --> 得到客户区的位置和大小,一般用于获取窗口大小;
  1. GetWindowRect() --> 得到窗口(对话框或控件)的屏幕坐标,一般用于获取对话框的屏幕坐标或和ScreenToClient()配合使用获取控件的客户区坐标;
  1. ScreenToClient() --> 屏幕坐标转换为客户区坐标,一般和GetWindowRect()配合使用获取控件的客户区坐标;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容