首页 > 技术文章 > 对话框和控件位置设置

xydblog 2014-04-02 17:40 原文

本程序下载地址:  

  通常设置对话框以及对话框上的各种控件的位置,可以直接在资源对话框那里进行手动来调整。 但这样做往往导致调整不精确,不能够很好的进行界面布局,对齐方式也不是很好。 同时对话框上的各控件资源可能会在放大、缩小、隐藏对话框的时候,控件资源隐藏了部分,或者全部都隐藏了。 对这种问题的解决方式就是在WM_SIZE消息处理函数中,通过编写代码的方式对各个控件进行调整。

  用来调整对话框以及各个控件位置的函数就是:MoveWindow, 该函数原型如下:

void MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE);

  通过设置控件和对话框的的起始坐标x,y, 以及它的宽和高就指定了控件在对话框上的显示位置了。最后一个参数为默认参数,可以不管他。

  下面是一个例子: 通过在WM_SIZE消息处理函数Onsize中设置 “打开”, “关闭” 按钮, 以及“文本框” 在对话框上的位置。

void CWindowSizeDlg::OnSize(UINT nType, int cx, int cy) 
{
    CDialog::OnSize(nType, cx, cy);
    
    // TODO: Add your message handler code here
    CRect rtClient;
    GetClientRect(&rtClient);

    //表示一个间隔,可以任意设置
    int nVal = 50;

    //按钮宽高
    int nBtnWidth = 40;
    int nBtnHigh = 30;

    //文本框宽高
    int nEditWidth = 200;
    int nEditHigh = 30;

    //打开按钮位置
    if( m_BtnOpen.GetSafeHwnd() )
    {
        m_BtnOpen.MoveWindow(rtClient.left + nVal, rtClient.top + nVal, nBtnWidth, nBtnHigh);
    }

    //关闭按钮位置
    if( m_BtnClose.GetSafeHwnd() )
    {
        m_BtnClose.MoveWindow(rtClient.left + nVal + nBtnWidth + 100,  rtClient.top + nVal, nBtnWidth, nBtnHigh);
    }

    //文本框按钮位置
    if( m_Edit.GetSafeHwnd() )
    {
        m_Edit.MoveWindow( rtClient.left + nVal, rtClient.top + nVal + 100, nEditWidth, nEditHigh);
    }
}

  程序运行结果如下: 

     

推荐阅读