zoukankan      html  css  js  c++  java
  • 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()配合使用获取控件的客户区坐标;

  • 相关阅读:
    ZOJ3213-Beautiful Meadow
    ZOJ3256-Tour in the Castle
    ZOJ3466-The Hive II
    hdu3377-Plan
    fzu1977-Pandora Adventure
    ural1519-Formula 1
    poj2914-Minimum Cut
    51nod-1220-约数之和
    51nod-1222-最小公倍数计数
    【html】【6】div浮动float
  • 原文地址:https://www.cnblogs.com/gaohongchen01/p/4596545.html
Copyright © 2011-2022 走看看