精华内容
下载资源
问答
  • mfc动态改变对话框窗口大小和显示位置
                   
    void CMainFrame::OnChangeSize() { // TODO: Add your command handler code here CRect cr; GetClientRect(&cr);//获取对话框客户区域大小 ClientToScreen(&cr);//转换为荧幕坐标 int x= GetSystemMetrics(SM_CXSCREEN);//获取荧幕坐标的宽度,单位为像素 int y=   GetSystemMetrics(SM_CYSCREEN);//获取荧幕坐标的高度,单位为像素 //MoveWindow((x-cr.Width() *2)/2 ,cr.top,cr.Width() *2,cr.Height() *2);//设置窗口显示的位置以及大小 MoveWindow(cr.left ,cr.top,cr.Width(),cr.Height()/2);//设置窗口显示的位置以及大小}

    mfc动态改变对话框窗口大小和显示位置

    C++代码
    1
    2
    3
    4
    5
    6
    CRect cr;
    GetClientRect(&cr); //获取对话框客户区域大小
    ClientToScreen(&cr); //转换为荧幕坐标
      int x= GetSystemMetrics(SM_CXSCREEN); //获取荧幕坐标的宽度,单位为像素
    int y=   GetSystemMetrics(SM_CYSCREEN); //获取荧幕坐标的高度,单位为像素
    MoveWindow((x-cr.Width() *2)/2 ,cr.top,cr.Width() *2,cr.Height() *2); //设置窗口显示的位置以及大小
    描述:mfc动态改变窗口大小和显示位置

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • void CMainFrame::OnChangeSize() { // TODO: Add your command handler code here CRect cr;...//获取对话框客户区域大小 ClientToScreen(&cr);//转换为荧幕坐标 int x= GetSystemMetrics

    void CMainFrame::OnChangeSize()
    {
    // TODO: Add your command handler code here
    CRect cr;
    GetClientRect(&cr);//获取对话框客户区域大小
    ClientToScreen(&cr);//转换为荧幕坐标
    int x= GetSystemMetrics(SM_CXSCREEN);//获取荧幕坐标的宽度,单位为像素
    int y= GetSystemMetrics(SM_CYSCREEN);//获取荧幕坐标的高度,单位为像素
    //MoveWindow((x-cr.Width() *2)/2 ,cr.top,cr.Width() *2,cr.Height() *2);//设置窗口显示的位置以及大小
    MoveWindow(cr.left ,cr.top,cr.Width(),cr.Height()/2);//设置窗口显示的位置以及大小
    }

    展开全文
  • VC动态改变对话框大小,其中控件也跟着改变,很实用的。。。
  • MFC控件随对话框大小改变改变

    千次阅读 2014-08-20 10:07:56
    这也是我项目中碰到的问题,要让对话框中的控件随着对话框大小的变化进行自动调整,一般的做法是在WM_SIZE的响应函数中对所有的控件用MoveWindow()或者SetWindowPos()设置其变化比例。 但是由于需要自己计算,...

    这也是我项目中碰到的问题,要让对话框中的控件随着对话框大小的变化进行自动调整,一般的做法是在WM_SIZE的响应函数中对所有的控件用MoveWindow()或者SetWindowPos()设置其变化比例。

    但是由于需要自己计算,并且还有各种系统引起的情况,比如WIN7里有个选项“拖动时显示窗口内容”,选中与不选中导致对话框内容显示完全不一样,选中时错误,不选正确,确实让人头大。

    如EasySize是一个很好解决方案,用一些宏封装了内部的实现机制,使用起来方便快捷。原文地址:http://www.codeproject.com/KB/dialog/easysize.aspx

     

    使用方法如下:

    1.首先将EasySize.h拷贝到工程文件夹中,然后在stdafx.h中包含该头文件:
    #include "EasySize.h"(当然你也可以只放在要使用的类里)

     

    2.在对话框类声明中添加DECLARE_EASYSIZE宏:
    class CEasySizeDemoDlg : public CDialog
    {
    DECLARE_EASYSIZE
    ...

     

    3.在OnInitDialog()函数中添加INIT_EASYSIZE宏(注意分号):
    BOOL CEasySizeDemoDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    ...    
       
    INIT_EASYSIZE;
        return TRUE; // return TRUE unless you set the focus to a control
    }

     

    4.响应WM_SIZE消息,在响应函数中添加UPDATE_EASYSIZE宏(注意分号):
    void CEasySizeDemoDlg::OnSize(UINT nType, int cx, int cy) 
    {
        CDialog::OnSize(nType, cx, cy);
       
    UPDATE_EASYSIZE;
    }

     

    5.如果需要限制对话框有一个最小尺寸,首先在资源视图中为对话框添加上最大化最小化按钮,然后Class Wizard中选择Class Info标签,在Message fileter下拉列表中选择Window,然后再点击Message Maps标签,就出现WM_SIZING消息了,添加该消息的响应函数:
    void CEasySizeDemoDlg::OnSizing(UINT fwSide, LPRECT pRect) 
    {
        CDialog::OnSizing(fwSide, pRect);
       
    EASYSIZE_MINSIZE(XXX,YYY,fwSide,pRect);
    }
    XXX,YYY是你自己定义的数值。

     

    6.添加控件布局映射,放到消息映射之后,基本格式如下:
    BEGIN_EASYSIZE_MAP(class_name)
        ...
        EASYSIZE(control,left,top,right,bottom,options)
        ...
    END_EASYSIZE_MAP

    class_name就是对话框类的类名

    control是要设置的控件的ID

    left、top、right、bottom分别指的是该控件左、上、右、下方的控件的ID,也可以为以下特殊值:
            ES_BORDER:保持与边框距离不变
            ES_KEEPSIZE:保持大小不变
                    所放位置:
                             left -- 表示和right指定的控件右对齐
                             right -- 表示和left指定的控件左对齐
                             top -- 表示和bottom指定的控件上对齐
                             bottom -- 表示和top指定的控件下对齐

    如EASYSIZE(IDC_MYICON2,ES_BORDER,ES_BORDER,IDC_TITLE,ES_KEEPSIZE,ES_HCENTER)

    我们看红色部分, 它是一个控件ID, 表示上(top)与控件ID为IDC_TITLE的控件对齐(保持距离).

    options可指定为0,也可指定为以下值:
            ES_HCENTER:保持宽度不变,水平位置在left和right指定的控件正中间
            ES_VCENTER:保持高度不变,垂直位置在left和right指定的控件正中间

     7.LAST BUT NOT LEAST,设置的时候是有先后顺序如果顺序设得不对,产生的布局完全不同的。


    展开全文
  • 1.控件随着对话框的最小化,最大化而改变大小步骤: (1)首先在对话框类中定义一个CRect oldRect的类 (2)在Initstance()函数中获得GetClientRect(&oldRect)  (3) 添加WM_SIZE函数 OnSize()函数 (4)在响应...
    1.控件随着对话框的最小化,最大化而改变大小步骤:
    
    (1)首先在对话框类中定义一个CRect oldRect的类
    (2)在Initstance()函数中获得GetClientRect(&oldRect)
     (3) 添加WM_SIZE函数 OnSize()函数
    (4)在响应函数中添加如下代码:
      for (int i=1;i<=2;i++)     //因为是两个控件,所以这里用了循环
      {
    CWnd *pWnd; 
    pWnd = GetDlgItem(1000);     //获取ID为i的空间的句柄,因为“确认”ID为1,“取消”ID为2
    if(pWnd)  //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
    {
    CRect rect;   //获取控件变化前的大小  
    pWnd->GetWindowRect(&rect);
    ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
          //cx/m_rect.Width()为对话框在横向的变化比例
    rect.left = rect.left * cx / m_rect.Width();//调整控件大小
    rect.right = rect.right * cx / m_rect.Width();
    rect.top=rect.top * cy / m_rect.Height();
    rect.bottom = rect.bottom * cy / m_rect.Height(); 
    pWnd->MoveWindow(rect);//设置控件大小
    }
      }
      GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小
     
    }
    2.但是以上只能使用最小化最大化的同比例放大  但是如果要点击鼠标拉大或者缩小对话框时会出现失真的现象  效果不是那么明显
    所以如果想要一个控件在对话框缩放时保持原来的位置则使用以下方法:

      CRect newRect;//用来记录当前的对话框位置
      GetClientRect(&newRect);
      for (int i=1;i<=2;i++)     //因为是两个控件,所以这里用了循环
      {
    CWnd *pWnd; 
    pWnd = GetDlgItem(1000);     //获取ID为i的空间的句柄,因为“确认”ID为1,“取消”ID为2
    if(pWnd)  //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
    {
    CRect rect;   //获取控件变化前的大小  
    pWnd->GetWindowRect(i);
    ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
    //cx/m_rect.Width()为对话框在横向的变化比例
    rect.left = rect.left + newRect.right - m_rect.right ;
    rect.right = rect.right + newRect.right - m_rect.right ;
    rect.top =  rect.top + newRect.bottom - m_rect.bottom;
    rect.bottom = rect.bottom + newRect.bottom - m_rect.bottom ;
    pWnd->MoveWindow(rect);//设置控件大小
    }
      }
      GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小
     
    }


    3.对于一个列表控件或者编辑框控件(记事本),实现上述功能,则使用以下方式:
    CRect newRect;
    GetClientRect(&newRect);
    CWnd *pWnd; 
    pWnd = GetDlgItem(1000);   //获取ID为1000(IDC_LIST)的空间的句柄,数值为1000
    if(pWnd)  //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
    {
    CRect rect;   //获取控件变化前的大小  
    pWnd->GetWindowRect(&rect);
    ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
        
    rect.right = rect.right + newRect.right - m_rect.right ;
    rect.bottom = rect.bottom + newRect.bottom - m_rect.bottom ;
    pWnd->MoveWindow(rect);//设置控件大小
    }
    GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小

    展开全文
  • 初学MFC,写飞机大战,发现程序运行后改变对话框大小会使得有些部分不能显示,我怎么能设定对话框大小并且程序运行时不能改变呢?或者改变对话框大小后游戏对象(如敌我飞机)的移动边界的参数也能相应改变呢?
  • MFC动态调整对话框控件位置和大小

    千次阅读 2019-08-22 09:55:22
    1,将在对话框的属性里设置边框可调整大小的 2,在主窗体cpp添加 #include EasySize.h ,也可以按照原创的方法添加到 stdafx.h中 3,在定义主窗体的地方 以下是引用片段: class CEasySizeDemoDlg : public ...
  • MFC改变对话框大小,以及子控件的动态改变  |字号 订阅 无论是单文档还是基于对话框,可能更普遍的方式是接受WM_size消息,使用setWindowPos(),moveWindow()方法。 1、首先写一个示例 ...
  • 大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小。 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(); 注意if(nType==1) return;这一句必须添加,否则...
  • MFC工程中加入这个类,让对话框控件派生与这个类,当拖动主窗口时可以改变动态改变控件大小,详见readme文件。
  • CRect temprect(150, 50, 1000, 500); CWnd::SetWindowPos(NULL, temprect.left, temprect.top, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE); 转载于:...
  • 经过了验证,是能够使用的,对于静态文本可能会有一些问题,但问题不大,属于转载的别人的,对里面的一些错误,楼主做出了修改。... // 将变化后的对话框大小设为旧大小,否则无法还原控件原始位置 } }
  • 常用的MFC控件(包括字体、BMP控件)都可以进行缩放,子对话框的控件也可跟随主对话框大小缩放。单个对话框也适用。界面的控件ID循环查找存入数组中(这样界面可随意添删控件也不需要改变代码,注意控件ID不允许重复...
  • 自己编写的一个类、用于动态改变窗口中的控件的大小、已经完全封装好了、直接调用即可、使用方法有介绍、简单易用!
  • [MFC]动态改变对话框控件位置尺寸

    千次阅读 2014-04-18 10:48:10
    用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。 void MoveWindow(int x,int y,int nWidth,int nHeight); void MoveWindow(LPCRECT lpRect); 第一种用法需给出控件新的坐标和宽度、高度...
  • 设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示时调用On...若想改变对话框大小,比如全屏显示ShowWindow(SW_SHOWMAXIMIZED);UpdateWindow(); 其中 ShowWin
  • MFC对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格...
  • MFC中,包含多个对话框,子对话框在Tab控件中显示,让子对话框中的控件跟随主对话框大小变化而变化,字体也能够缩放,但是不能加载图片控件,只对控件和字体缩放,单个对话框也适用,简单易懂。主要有一个CLout类,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,465
精华内容 4,186
关键字:

mfc动态改变对话框大小