MFC 對話方塊最大化時控制項也隨比例最大化或者還原

來源:互聯網
上載者:User

 

1. 在oninitdlg中 計算出目前的交談框的大小與最大化後大小,注意要用float值,不然誤差很大.

CRect rect;
::GetWindowRect(m_hWnd,rect);
ScreenToClient(rect);
m_nDlgWidth = rect.right - rect.left;
m_nDlgHeight = rect.bottom - rect.top;

//計算解析度
m_nWidth = GetSystemMetrics(SM_CXSCREEN);
m_nHeight = GetSystemMetrics(SM_CYSCREEN);

//計算放大倍數
m_Multiple_width = float(m_nWidth)/float(m_nDlgWidth);
m_Mutiple_heith = float(m_nHeight)/float(m_nDlgHeight);
change_flag=TRUE;//這個是成員變數bool形,用來判斷onsize執行時oninitdlg是否已經執行了

2. 給你對話方塊添加 onsize訊息:

void EnviromentConfigDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (change_flag)//如果確定oninitdlg已經調用完畢.
{
   ReSize(IDC_STATIC1);
   ReSize(IDC_TREE_ALARM);
   ReSize(IDC_STATIC2);
   ReSize(IDC_TREE_CAMERA);
   ReSize(IDC_STATIC3);
   ReSize(IDC_LIST_TYPE);
   ReSize(IDOK);
   ReSize(IDC_STATIC4);
   ReSize(IDC_LIST_INFO);

//恢複放大倍數,並儲存 (確保還原時候能夠還原到原來的大小)

m_Multiple_width = float(1)/ m_Multiple_width ;
   m_Mutiple_heith = float(1)/m_Mutiple_heith ;
}
}

3.重新整理控制項:根據比例計算控制項縮放的大小,然後movewindow 到新矩形上

void EnviromentConfigDlg::ReSize(int nID)
{
CRect Rect;
GetDlgItem(nID)->GetWindowRect(Rect);
ScreenToClient(Rect);
//計算控制項左上方點
CPoint OldTLPoint,TLPoint;
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x *m_Multiple_width);
TLPoint.y = long(OldTLPoint.y * m_Mutiple_heith );

//計算控制項右下角點
CPoint OldBRPoint,BRPoint;
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *m_Multiple_width);
BRPoint.y = long(OldBRPoint.y * m_Mutiple_heith );
//行動控制項到新矩形

Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(nID)->MoveWindow(Rect,TRUE);
}

這樣,你就可以隨心所遇的放大與縮小你的對話方塊了,控制項也跟著比例縮小放大

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.