MFC如何使控件大小随着对话框大小自动调整
MFC如何使控件大小隨著對話框大小自動調整??
2012-04-27 16:24:50|??分類: MFC |??標簽: |字號大中小?訂閱
對話框的大小變化后,假若對話框上的控件大小不變化,看起來會比較難看。下面就介紹怎么讓對話框上的控件隨著對話框的大小的變化自動調整。
首先明確的是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);?? //最后要更新對話框的大小,當做下一次變化的舊坐標;
???????? }
}
任務完成!
總結
以上是生活随笔為你收集整理的MFC如何使控件大小随着对话框大小自动调整的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剖析java中的String之__拼接
- 下一篇: java 枚举学习--从小程序中学习