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()  -->  用于得到被定义的系统数据或者系统配置信息;

  2、GetClientRect() -->  得到客户区的位置和大小,一般用于获取窗口大小;

  3、GetWindowRect() -->  得到窗口(对话框或控件)的屏幕坐标,一般用于获取对话框的屏幕坐标或和ScreenToClient()配合使用获取控件的客户区坐标;

  4、ScreenToClient()  -->  屏幕坐标转换为客户区坐标,一般和GetWindowRect()配合使用获取控件的客户区坐标;

时间: 2024-10-15 01:08:20

MFC窗口位置和大小的获取的相关文章

MFC设置控件和窗口位置

一.控件 CRect rect://矩形 m_pic.GetWindowRect(rect); //得到控件矩形信息m_pic.MoveWindow(0, 0, SavedImage.cols, SavedImage.rows); //设置控件位置(相对于客户区), 大小 二.窗口 1 CWnd* pWnd1 = GetDlgItem(IDD_MFC_OPENCV_DIALOG);//获得句柄 2 SetWindowPos(pWnd1, x, y, SavedImage.cols+15, Sav

在MFC中修改opencv的namedWindow窗口位置

当在MFC中应用opencv的窗口来显示图片.希望namedWindow创建的窗口能根据需要改变风格: //by dongchunxiao cv::namedWindow("windows1",0); //创建一个窗口 HWND hWnd = (HWND)cvGetWindowHandle("windows1");//获取子窗口的HWND HWND hParentWnd = ::GetParent(hWnd);//获取父窗口HWND.父窗口是我们要用的 ::SetW

Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()

getWindowVisibleDisplayFrame()方法 getWindowVisibleDisplayFrame()是View类下的一个方法,从方法的名字就可以看出,它是用来获取当前窗口可视区域大小的.就是contentParentView +actionbar的高度 此方法的原型为 public void getWindowVisibleDisplayFrame(Rect outRect); 1 它接受一个Rect对象作为参数,执行过程中会根据当前窗口可视区域大小更新outRect的

Selenium2学习-021-WebUI自动化实战实例-019-设置浏览器窗口位置大小

前文简略讲述了如何获取浏览器窗口的位置和大小,此文讲述如何通过 webdriver 设置浏览器窗口的位置和大小. 直接上码了...... 1 /** 2 * Set browser size for expected setting 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoSeleniumDemo main.aaron.sele.core SeleniumCore.java setBrowserSize, 2015-7-28 01:1

C++ MFC 改变控件大小和位置

用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度.高度:第二种用法给出存放位置的CRect对象:例: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号 pWn

MFC 窗口滑入指定位置

//1.添加用到的成员变量及 函数 class CxxxDialog : public CDialog { //... private: //窗口的尺寸(大小) CSize m_szWindow; //开始滑动挪动窗口位置 bool m_bHide; //滑动次数 int m_nSildeCount; //父窗口的位置 CRect m_rcParentPos; protected: //初始化参数 afx_msg void OnTimer(UINT nIDEvent) ; void InitSl

跨浏览器获取窗口位置

IE.Safari.Opera.Chrome都提供了 screenLeft 和 screenTop属性分别表示窗口相对于屏幕左边和上边的位置. Firefox.Safari.Chrome在 screenX 和 screenY 中提供相同的窗口信息. Opera支持 screenX 和 screenY 属性,但与 screenLeft 和 screenTop 属性并不对应,故不要在Opera中使用 screenX 和 screenY . 使用以下代码可以跨浏览器获取窗口位置: 1 var left

javascript获取窗口位置、绝对位置、事件位置等

有段时间没更新博客了,工作实在太忙了,加班加班再加班就是我们这个行业的常态吧...还好最近把工作进度完成了,终于有些空余时间了.关于<Javascript高级程序设计>系列,我并没有弃坑,只不过最近在把这本书读第二遍,主要针对一些第一遍没看懂的部分,完成之后我会继续更新的. 这篇文字主要一下三方面内容: 一.javascript获取事件位置 二.Javascript获取dom对象位置 三.Javascript获取绝对坐标 四.浏览器相对桌面位置 一.javascript获取事件位置 首先上图,

Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)

通过 JS 或 JQuery 获取到元素后,通过 offsetLeft.offsetTop.offsetWidth.offsetHeight 即可获得元素的位置和大小,非常的简单,直接上源码了,敬请参阅! 1 /** 2 * Get element position by jquery, and return integer Array [left distance, top distance, width distance, height distance] 3 * 4 * @author A