精华内容
下载资源
问答
  • SIZE消息响应函数,这个函数在对话框大小发生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这个不用自己算,系统已给出),然后根据控件做出相应比例的调整。 比如原来对话框大小...

    对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看。下面就介绍怎么让对话框上的控件随着对话框的大小的变化自动调整。

     

    首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数在对话框大小发生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这个不用自己算,系统已给出),然后根据控件做出相应比例的调整。

     

    比如原来对话框大小为a,现在为b,原来控件大小为c,那么现在的控件大小应该为c*b/a;(注意a不能为0)

    看实例:(黑体字为添加的代码!!)

    假设对话框类为CMyDlg类,那么首先设置一个变量

    CRect m_rect; //用于保存原对话框大小

    那么在对话框创建的时候先获得对话框的大小

     

    BOOL CMyDlg::OnInitDialog()
    {

    .........................
    SetIcon(m_hIcon, TRUE); // Set big icon
    SetIcon(m_hIcon, FALSE); // Set small icon


    // TODO: Add extra initialization here


    GetClientRect(&m_rect); //获取对话框的大小

    return TRUE; // return TRUE unless you set the focus to a control
    }


    然后再手动添加一个函数,用以实现具体的变化

     

    void CMyDlg::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对话框的当前长和宽
    {


    CWnd *pWnd;
    pWnd=GetDlgItem(nID); 
    if(pWnd!=NULL) //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
    {


    CRect rec; 
    pWnd->GetWindowRect(&rec); //获取控件变化前的大小
    ScreenToClient(&rec); //将控件大小装换位在对话框中的区域坐标
    rec.left=rec.left*x/m_rect.Width(); //按照比例调整空间的新位置
    rec.top=rec.top*y/m_rect.Height();
    rec.bottom=rec.bottom*y/m_rect.Height();
    rec.right=rec.right*x/m_rect.Width();
    pWnd->MoveWindow(rec); //伸缩控件


    }
    }

     

    最后添加windows消息响应函数OnSize:

    void CMyDlg::OnSize(UINT nType, int cx, int cy) //cx,cy就是当前对话框的长和宽
    {


    CDialog::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here


    if(nType!=SIZE_MINIMIZED ) //判断窗口是不是最小化了,因为窗口最小化之后 ,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作
    {


    ChangeSize(IDC_LIST1,cx,cy); //对每一个控件依次做调整
    ChangeSize(IDC_LIST2,cx,cy);
    ChangeSize(IDC_BUTTON1,cx,cy); 
    ChangeSize(IDC_BUTTON2,cx,cy); 
    GetClientRect(&m_rect); //最后要更新对话框的大小,当做下一次变化的旧坐标


    }
    }

    任务完成!

    转载于:https://www.cnblogs.com/begoogatprogram/p/5950379.html

    展开全文
  • 我的对话框是启动时候全屏显示 但是由于不同的电脑显示器分辨率不同 我的程序在别的电脑上运行的时候控件还是原来那么大 所以怎么样能根据屏幕分辨率 自动调整 控件的大小位置?
  • 当我鼠标移到边框上的时候,鼠标没有反应,是不是要在属性里面设置什么。
  • SIZE消息响应函数,这个函数在对话框大小发生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这个不用自己算,系统已给出),然后根据控件做出相应比例的调整。 比如原来对话框大小...

    对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看。下面就介绍怎么让对话框上的控件随着对话框的大小的变化自动调整。

     

    首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数在对话框大小发生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这个不用自己算,系统已给出),然后根据控件做出相应比例的调整。

     

    比如原来对话框大小为a,现在为b,原来控件大小为c,那么现在的控件大小应该为c*b/a;(注意a不能为0)

    看实例:(黑体字为添加的代码!!)

    假设对话框类为CMyDlg类,那么首先设置一个变量

    CRect m_rect; //用于保存原对话框大小

    那么在对话框创建的时候先获得对话框的大小

    BOOL CMyDlg::OnInitDialog()
    {
    
    .........................
    SetIcon(m_hIcon, TRUE); // Set big icon
    SetIcon(m_hIcon, FALSE); // Set small icon
    
    
    // TODO: Add extra initialization here
    
    
    GetClientRect(&m_rect); //获取对话框的大小
    
    return TRUE; // return TRUE unless you set the focus to a control
    }

    然后再手动添加一个函数,用以实现具体的变化

    void CMyDlg::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对话框的当前长和宽
    {
    
    
    CWnd *pWnd;
    pWnd=GetDlgItem(nID); 
    if(pWnd!=NULL) //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
    {
    
    
    CRect rec; 
    pWnd->GetWindowRect(&rec); //获取控件变化前的大小
    ScreenToClient(&rec); //将控件大小装换位在对话框中的区域坐标
    rec.left=rec.left*x/m_rect.Width(); //按照比例调整空间的新位置
    rec.top=rec.top*y/m_rect.Height();
    rec.bottom=rec.bottom*y/m_rect.Height();
    rec.right=rec.right*x/m_rect.Width();
    pWnd->MoveWindow(rec); //伸缩控件
    
    
    }
    }

    最后添加windows消息响应函数OnSize:

    void CMyDlg::OnSize(UINT nType, int cx, int cy) //cx,cy就是当前对话框的长和宽
    {
    
    
    CDialog::OnSize(nType, cx, cy);
    
    // TODO: Add your message handler code here
    
    
    if(nType!=SIZE_MINIMIZED ) //判断窗口是不是最小化了,因为窗口最小化之后 ,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作
    {
    
    
    ChangeSize(IDC_LIST1,cx,cy); //对每一个控件依次做调整
    ChangeSize(IDC_LIST2,cx,cy);
    ChangeSize(IDC_BUTTON1,cx,cy); 
    ChangeSize(IDC_BUTTON2,cx,cy); 
    GetClientRect(&m_rect); //最后要更新对话框的大小,当做下一次变化的旧坐标
    
    
    }

     

     

    展开全文
  • 动态改变对话框调整大小属性

    千次阅读 2015-11-13 15:00:36
    MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格...
    MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格来确定的。窗口风格中与边框有关的值如下:
    
       WS_BORDER- Thin-line border,不能调整大小;
       WS_DLGFRAME -dialog box typical border,不能调整大小;
       WS_SIZEBOX -sizing border,可以调整大小;
       WS_THICKFRAME - WS_SIZEBOX。

       我们可以通过CreateWindow函数的dwStyle参数值来指定窗口风格,但是如果想在运行期动态改变窗口边框风格呢?可以用ModifyStyle函数,通过简单的添加和删除上面的窗口风格,就能实现窗口可调整大小属性的改变。

       但是如果你将“SystemMenu”属性设置为“True”,就会发现即使调用ModifyStyle(WS_BORDER,WS_THICKFRAME, SWP_FRAMECHANGED);将边框修改为thickframe也不能调整大小,出现了箭头,但是窗口大小是固定的,原因是必须要将“Maximize Box”设置为“True”。
       当然,也可以用代码 ModifyStyle(NULL, WS_SYSMENU |WS_MAXIMIZEBOX); 来添加系统菜单和最大化按钮。

       当我们需要固定对话框尺寸时,有3个地方需要控制:1,边框不能拉伸窗口;2,最大化按钮不可用;3,禁止双击标题栏最大化。指定边框风格为WS_BORDER可完成1和3,去掉WS_MAXIMIZEBOX可完成2。MFC已经为我们封装的很好。

    自己测试要如下设置才能调整大小。

        //设置边框WS_THICKFRAME 可拉伸模式
        ModifyStyle(WS_BORDER, WS_THICKFRAME, SWP_FRAMECHANGED);
        //关闭菜单功能。(关闭菜单功能才能缩放)
        ModifyStyle(WS_SYSMENU, 0);

    展开全文
  • MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格...
    MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格来确定的。窗口风格中与边框有关的值如下:
    
        WS_BORDER - Thin-line border,不能调整大小;
        WS_DLGFRAME - dialog box typical border,不能调整大小;
        WS_SIZEBOX - sizing border,可以调整大小;
        WS_THICKFRAME - WS_SIZEBOX。

        我们可以通过CreateWindow函数的dwStyle参数值来指定窗口风格,但是如果想在运行期动态改变窗口边框风格呢?可以用ModifyStyle函数,通过简单的添加和删除上面的窗口风格,就能实现窗MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格来确定的。窗口风格中与边框有关的值如下:
        WS_BORDER - Thin-line border,不能调整大小;
        WS_DLGFRAME - dialog box typical border,不能调整大小;
        WS_SIZEBOX - sizing border,可以调整大小;
        WS_THICKFRAME - 同WS_SIZEBOX。


        我们可以通过CreateWindow函数的dwStyle参数值来指定窗口风格,但是如果想在运行期动态改变窗口边框风格呢?可以用ModifyStyle函数,通过简单的添加和删除上面的窗口风格,就能实现窗口可调整大小属性的改变。
        但是如果你将“System Menu”属性设置为“True”,就会发现即使调用ModifyStyle(WS_BORDER, WS_THICKFRAME, SWP_FRAMECHANGED);将边框修改为thick frame也不能调整大小,出现了箭头,但是窗口大小是固定的,原因是必须要将“Maximize Box”设置为“True”。
        当然,也可以用代码ModifyStyle(NULL, WS_SYSMENU | WS_MAXIMIZEBOX);来添加系统菜单和最大化按钮。


        当我们需要固定对话框尺寸时,有3个地方需要控制:1,边框不能拉伸窗口;2,最大化按钮不可用;3,禁止双击标题栏最大化。指定边框风格为WS_BORDER可完成1和3,去掉WS_MAXIMIZEBOX可完成2。MFC已经为我们封装的很好。口可调整大小属性的改变。
        但是如果你将“System Menu”属性设置为“True”,就会发现即使调用ModifyStyle(WS_BORDER, WS_THICKFRAME, SWP_FRAMECHANGED);将边框修改为thick frame也不能调整大小,出现了箭头,但是窗口大小是固定的,原因是必须要将“Maximize Box”设置为“True”。
        当然,也可以用代码ModifyStyle(NULL, WS_SYSMENU | WS_MAXIMIZEBOX);来添加系统菜单和最大化按钮。

        当我们需要固定对话框尺寸时,有3个地方需要控制:1,边框不能拉伸窗口;2,最大化按钮不可用;3,禁止双击标题栏最大化。指定边框风格为WS_BORDER可完成1和3,去掉WS_MAXIMIZEBOX可完成2。MFC已经为我们封装的很好。
    展开全文
  • 我在对话框上创建了一个文档模板,也就是创建个SDI,父窗口设置为对话框的,theApp.m_pMainWnd->SetParent(m_Dialog);但是对话框中的SDI创建后在拖动对话框边框就不起作用了,关闭按钮...在怎么解决啊??、????
  • 对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看。下面就介绍怎么让对话框上的控件随着对话框的大小...首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数在对话框大小发生变化的时候调
  • VIS C++6.0在OnSize中用MoveWindow调整CEDit的大小,适应窗口的方法是什么?还有怎么加入滚动?
  • 步骤二 执行以上操作后,会打开定义对话框,可以调整公式不同位置的字母的大小,同时也可以选择不同的单位进行调整。 步骤三 为了演示调整测试文档公式的字体大小调整公式字体使其变成二号字体一样大,采用的...
  • 对话框加上背景皮肤

    千次阅读 2005-09-21 09:29:00
    经过一些曲折,我在www.codeproject.com中找到了一些给对话框及控件加skin的方式,在下面我通过一个例子给出了其中一种最简单的方法,通过这种方式作出的对话框会根据skin图片的大小调整。在我的例子中,我用了首先...
  • MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格。实际上windows窗口是否可调整大小,就是根据边框的风格...
  • (第一次写博客,有些功能还不会用,不知道怎么优化排版,请谅解)在对话框中设置listview和在活动中基本相同,布局比较多,需要慢慢调整,如果内容太多,可以自定义设置对话框大小。自定义对话框1、首先定义各种...
  • 由于每个视频平台对上传的视频大小尺寸存在差异,因此,为了不影响视频的观看效果,我们在上传视频前先修改视频的大小尺寸,最好按比例来调整视频画面。 一、按比例裁切视频画面 将需要剪辑的视频导入视频剪辑高手的...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

怎么调整对话框大小