比如我在1024*768下编的单文档界面的程序(此时界面上没有滚动条的),在800*600分辨率下就会出现滚动条了,有什么办法让程序自动调整来适应不同的分辨率,让他在不同的分辨率下看起来都是一模一样的界面呢?

解决方案 »

  1.   

    动态调整屏幕分辨率VC中提供了修改显示设备属性的函数:ChangeDisplaySettings,该函数能够按照你的需要对显示设备作相应的修改。函数声明如下:
    LONG ChangeDisplaySettings(
      LPDEVMODE lpDevMode,
      DWORD dwflags
    );
    参数含义
    lpDevMode:一个指向DEVMODE数据结构的指针,描述了欲设定显示器的各类属性。Dwflags:表明对显示设备的修改方式。
    void CChngDsplyMdDlg::OnChagne() 
    {
    UpdateData(TRUE);
    DEVMODE lpDevMode;
    lpDevMode.dmBitsPerPel = m_nBitsPerPixel;
    lpDevMode.dmPelsWidth = m_nWidthPixels;
    lpDevMode.dmPelsHeight = m_nHeightPixels;
    lpDevMode.dmSize = sizeof(lpDevMode);
    lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
    LONG result = ChangeDisplaySettings(&lpDevMode,0);
    if(result == DISP_CHANGE_SUCCESSFUL)
    {
    AfxMessageBox("修改成功");
    ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY);
    //使用CDS_UPDATEREGISTRY表示次修改是持久的,
    //并在注册表中写入了相关的数据 
    }
    else
    {
    AfxMessageBox("修改失败,恢复原有设置");
    ChangeDisplaySettings(NULL,0);
    }
    }
      

  2.   

    得到当前的屏幕的显示分辨率,
    GetDeviceCaps(HORZRES);
    GetDeviceCaps(VERTRES);
    然后对你的程序进行相应的设置
      

  3.   

    可以改变自已程序的界面,将每个控件的位置都计算出来.
    看下面这个例子,在窗口大小改变时,窗口里的控件也跟着调整位置.
    void CEmail::OnSize(UINT nType, int cx, int cy) 
    {
    CFormView::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    if(nType==SIZE_RESTORED && cx>=522 && cy>=386)
    {
    CWnd *pwnd;
    CRect rect;
    pwnd=(CWnd *)GetDlgItem(IDC_COMBO_CATALOG);
    if(pwnd==NULL)return;
    pwnd->GetWindowRect(&rect);
    ScreenToClient(&rect);
    rect.right=cx-15;
    rect.left=rect.right - 90;
    pwnd->MoveWindow(&rect,TRUE); pwnd=(CWnd *)GetDlgItem(IDC_LIST);
    if(pwnd==NULL)return;
    pwnd->GetWindowRect(&rect);
    ScreenToClient(&rect);
    rect.right=cx-10;
    rect.bottom=rect.top+cy/3+20;
    pwnd->MoveWindow(&rect,TRUE);
    ((CListCtrl *)pwnd)->SetColumnWidth(1, rect.Width()-274); pwnd=(CWnd *)GetDlgItem(IDC_RICHEDIT);
    if(pwnd==NULL)return;
    rect.top=rect.bottom+5;
    rect.bottom=cy-10;
    pwnd->MoveWindow(&rect,TRUE);
    }
    }
      

  4.   

    那对话框怎么改,没有CDC对象?
      

  5.   

    m_ScreenX=GetSystemMetrics(SM_CXSCREEN);
    m_ScreenY=GetSystemMetrics(SM_CYSCREEN);
    SetWindowPos(NULL,0,0,m_ScreenX,m_ScreenY,SWP_NOZORDER);
      

  6.   

    最彻底的方法就是在WM—SIZE和WM—SIZEING里自己移动控件