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()配合使用获取控件的客户区坐标;

  • 相关阅读:
    链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的
    无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上
    Error:“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”
    虚函数和纯虚函数的区别
    VS2010和matlab2010混合编程中char16_t重定义的问题
    笔记本电脑关闭小键盘(即打字按P出现星号键)
    WIN7系统下U盘安装Ubuntu双系统
    The Basics of 3D Printing in 2015
    3D建模与处理软件简介
    win7-32 系统 + VS2010 配置 glew
  • 原文地址:https://www.cnblogs.com/gaohongchen01/p/4596545.html
Copyright © 2011-2022 走看看