安徽專業(yè)網(wǎng)站建設(shè)大全推薦寧波seo排名費(fèi)用
? ? ? ? MFC窗體的控件的自適應(yīng)縮放早期VS開發(fā)環(huán)境是不支持的,后來VS開發(fā)環(huán)境提供了支持但也簡(jiǎn)單,或者固定的縮放比例不符合要求。我一向堅(jiān)持一個(gè)理念:“不支持縮放的窗口不是好窗口”,所以需要有一個(gè)自定義的縮放處理。機(jī)制不復(fù)雜,就是重載OnSize處理窗口大小變化。
? ? ? ? 這是對(duì)話框的OnSize,MFC會(huì)自動(dòng)生成這個(gè)函數(shù)的框架:
void CMyDlg::OnSize(UINT nType, int cx, int cy)
{CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereswitch(nType){case SIZE_MAXIMIZED:break;case SIZE_RESTORED:break;case SIZE_MINIMIZED:ShowWindow(SW_HIDE);break;default:return;}MoveCtrl(cx,cy);//這個(gè)函數(shù)是自己寫的,重新設(shè)定控件位置
}
? ? ? ? MoveCtrl是自己定義的函數(shù),在里面重新計(jì)算布局,設(shè)置空間位置即可。之所以要寫成個(gè)函數(shù),是因?yàn)檫@個(gè)函數(shù)在OnInitDialog里也需要執(zhí)行一次,以便完成初始布局,這樣設(shè)計(jì)對(duì)話框的時(shí)候就不用那么精確了,控件隨便擺一下就行了。
????????OnInitDialog的處理:
RECT rect;//初始化控件 GetClientRect(&rect);MoveCtrl(rect.right, rect.bottom);
? ? ? ? 因?yàn)樽涌丶际腔诟复翱诘目蛻魠^(qū)的,所以用對(duì)話框的客戶區(qū)的大小為基準(zhǔn)來設(shè)置子控件。
? ? ? ? 這是MoveCtrl的一個(gè)示例:
int CProxyDlg::MoveCtrl(int cx, int cy)
{RECT rect;//工具欄,頂if(IsWindow(m_MainToolBar)){m_MainToolBar.MoveWindow(0,0,cx,toolbarhigh);}//系統(tǒng),中,左if(IsWindow(m_Tab_Sys.m_hWnd) && IsWindow(m_Tree_Sys.m_hWnd) && IsWindow(m_Tree_User.m_hWnd)){rect.left=bdry;rect.right=bdry+tabsyswide;rect.top=toolbarhigh;rect.bottom=cy-statehigh;m_Tab_Sys.MoveWindow(&rect);m_Tab_Sys.GetWindowRect(&rect);m_Tab_Sys.SendMessage(TCM_ADJUSTRECT,(WPARAM)FALSE,(LPARAM)&rect);ScreenToClient(&rect);m_Tree_Sys.MoveWindow(&rect);m_Tree_User.MoveWindow(&rect);}//當(dāng)前連接,中,右if(IsWindow(m_Tree.m_hWnd)){rect.left=bdry+tabsyswide+sepwide;rect.right=cx-bdry;rect.top=toolbarhigh;rect.bottom=cy-statehigh;m_Tree.MoveWindow(&rect);}//狀態(tài)欄,底if(IsWindow(m_Static_State.m_hWnd)){rect.left=0;rect.right=cx;rect.top=cy-statehigh;rect.bottom=cy;m_Static_State.MoveWindow(&rect);}return 1;
}
? ? ? ? 主要用到IsWindow來判斷控件是否已經(jīng)創(chuàng)建、MoveWindow來移動(dòng)控件,其余就是各種布局計(jì)算。
????????有興趣可以自己寫一套布局類,不過真正理想的界面除了自適應(yīng)縮放,還應(yīng)該能拉伸調(diào)整,這就困難些了,別的高級(jí)語言或類庫(kù),直接提供了split面板,不用自己寫。
(這里是結(jié)束)