1. 程式人生 > >MFC 控制元件隨著對話方塊大小的改變而改變

MFC 控制元件隨著對話方塊大小的改變而改變

1.控制元件隨著對話方塊的最小化,最大化而改變大小步驟:
(1)首先在對話方塊類中定義一個CRect oldRect的類
(2)在Initstance()函式中獲得GetClientRect(&oldRect)
 (3) 新增WM_SIZE函式 OnSize()函式
(4)在響應函式中新增如下程式碼:
  for (int i=1;i<=2;i++)     //因為是兩個控制元件,所以這裡用了迴圈
  {
CWnd *pWnd; 
pWnd = GetDlgItem(1000);     //獲取ID為i的空間的控制代碼,因為“確認”ID為1,“取消”ID為2
if(pWnd)  //判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
CRect rect;   //獲取控制元件變化前的大小  
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
      //cx/m_rect.Width()為對話方塊在橫向的變化比例
rect.left = rect.left * cx / m_rect.Width();//調整控制元件大小
rect.right = rect.right * cx / m_rect.Width();
rect.top=rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height(); 
pWnd->MoveWindow(rect);//設定控制元件大小
}
  }
  GetClientRect(&m_rect);// 將變化後的對話方塊大小設為舊大小
 
}
2.但是以上只能使用最小化最大化的同比例放大  但是如果要點選滑鼠拉大或者縮小對話方塊時會出現失真的現象  效果不是那麼明顯
所以如果想要一個控制元件在對話方塊縮放時保持原來的位置則使用以下方法:

  CRect newRect;//用來記錄當前的對話方塊位置
  GetClientRect(&newRect);
  for (int i=1;i<=2;i++)     //因為是兩個控制元件,所以這裡用了迴圈
  {
CWnd *pWnd; 
pWnd = GetDlgItem(1000);     //獲取ID為i的空間的控制代碼,因為“確認”ID為1,“取消”ID為2
if(pWnd)  //判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
CRect rect;   //獲取控制元件變化前的大小  
pWnd->GetWindowRect(i);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
//cx/m_rect.Width()為對話方塊在橫向的變化比例
rect.left = rect.left + newRect.right - m_rect.right ;
rect.right = rect.right + newRect.right - m_rect.right ;
rect.top =  rect.top + newRect.bottom - m_rect.bottom;
rect.bottom = rect.bottom + newRect.bottom - m_rect.bottom ;
pWnd->MoveWindow(rect);//設定控制元件大小
}
  }
  GetClientRect(&m_rect);// 將變化後的對話方塊大小設為舊大小
 
}


3.對於一個列表控制元件或者編輯框控制元件(記事本),實現上述功能,則使用以下方式:

CRect newRect;
GetClientRect(&newRect);
CWnd *pWnd; 
pWnd = GetDlgItem(1000);   //獲取ID為1000(IDC_LIST)的空間的控制代碼,數值為1000
if(pWnd)  //判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
CRect rect;   //獲取控制元件變化前的大小  
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
    
rect.right = rect.right + newRect.right - m_rect.right ;
rect.bottom = rect.bottom + newRect.bottom - m_rect.bottom ;
pWnd->MoveWindow(rect);//設定控制元件大小
}
GetClientRect(&m_rect);// 將變化後的對話方塊大小設為舊大小

相關推薦

MFC 控制元件隨著對話方塊大小改變改變

1.控制元件隨著對話方塊的最小化,最大化而改變大小步驟: (1)首先在對話方塊類中定義一個CRect oldRect的類 (2)在Initstance()函式中獲得GetClientRect(&oldRect)  (3) 新增WM_SIZE函式 OnSize()函式

MFC控制元件對話方塊大小改變改變

這也是我專案中碰到的問題,要讓對話方塊中的控制元件隨著對話方塊大小的變化進行自動調整,一般的做法是在WM_SIZE的響應函式中對所有的控制元件用MoveWindow()或者SetWindowPos()設定其變化比例。 但是由於需要自己計算,並且還有各種系統引起的情況,比

如何實現控制元件對話方塊大小變化自動調整大小和位置

1. 處理對話方塊的WM_SIZE,然後用MoveWindow或者SetWindowPos來把對話方塊上面的控制元件重新調整新位置和大小。  2. 基本的做法就是響應WM_SIZE訊息,並按照視窗大小比例來調整控制元件的位置和大小,控制元件的大小最好設定成視窗的百分之幾,這

包含tab控制元件時,,如何讓子控制元件跟隨對話方塊大小變化(下)

前面是tab控制元件的編寫,真正resize的編寫則在此處。 其中m_point是記錄上一次的視窗座標的變數 void CMTSWDlg::Resize() { float fsp[2]; CRect rect; Point NewPoint; GetW

MFC 如何設定子對話方塊背景透明控制元件不透明

想子對話方塊透明,主要是截獲WM_ERASEBKGND訊息不去清空背景或者設定視窗default brush為NULL_BRUSH,另外重要的一點是window style中不能包含WS_CLIPSIBLINGS標記,同時parent window的style不能包含WS_C

mfc獲取控制元件對話方塊上的位置

轉自:https://www.cnblogs.com/huhu0013/p/3944569.htmlCRect rect;GetDlgItem(控制元件ID)->GetWindowRect(&rect);//獲取控制元件的螢幕座標ScreenToClient(&

MFC/VC++/VS 控制元件對話方塊尺寸變化

1. 獲取對話方塊尺寸 CRect m_rect; //用於儲存原對話方塊大小 GetClientRect(&m_rect); //獲取對話方塊的大小 2. OnSize 訊息 if (m_rect.Width() == 0 || m_rect.Height()

MFC控制元件位置隨窗體大小改變

      因為在做上位機,需要MFC中的控制元件位置隨窗體大小而改變,以下是程式碼:     首先初始化CRect m_rect,該成員變數用來記錄窗體的當前大小。 void CTEST4View::OnSize(UINT nType, int cx, int cy)

C#如何讓控制元件隨著窗體變化大小

分析需求   各位請看這個小窗體,我把這控制元件按陣型依次排開, 可當我讓窗體全屏顯示的時候,問題就出來了!如圖      如何全屏顯示窗體裡的控制元件 採用Form_Resize(

如何在WINFORM中彈出一個又控制元件對話方塊 能給個簡單的示範C#程式碼嗎 以及一些小問題 菜鳥想學

如何在WINFORM中彈出一個又控制元件的對話方塊  能給個簡單的示範C#程式碼嗎順便問問 這段程式碼是啥意思啊        private void btn_catchMe_Click(object sender, System.EventArgs e)        {

為ActiveX控制元件新增對話方塊

1 在資源rc中 新增對話方塊 並向對話方塊上拖放一個按鈕 對話方塊的屬性做下修改:Border改為None,Control改為Ture,Style改為Child,System改為False,Visible改為True,然後在對話方塊中雙擊,為對話方塊新增一個類(將會自動開

VS2010 MFC 控制元件隨主框體變化變化

這裡介紹一種控制控制元件隨主框體變化而變化的方法。 方法並不完善,框體只支援最大化和最小化視窗時還好,但是在連續最大化最小化切換10次以上以後,控制元件在主框體中的相對位置會向左上角移動,幅度並不大,基本可以滿足應用需要; 但如果主框體動態的變化大小,控制元件的相對位置變化的非常快,基本不能

VS2010 MFC 控制元件隨主框體變化變化,功能完善

轉載:https://www.codeproject.com/Articles/1657/EasySize-Dialog-resizing-in-no-time 之前,通過比例的方法來控制各個控制元件的大小隨主框體變化,這種方法在主框體連續變化多次後,會出現控制元件位置偏移的現象,到最後可能

VS2013 MFC 對話方塊控制元件大小隨視窗大小改變改變

視窗大小改變後控制元件大小也隨之改變 在對話方塊標頭檔案中定義 標頭檔案名稱:專案名稱Dlg.h POINT Old;//存放對話方塊的寬和高。 對話方塊cpp中初始化 cpp檔名稱:專案名稱Dlg.cpp 在OnInitDialog()函

三種隨著對話方塊大小更新改變控制元件大小

.h檔案中新增程式碼 private:     POINT Old;     CRect m_rect; public:     afx_msg void OnSize(UINT nType, int cx, int cy);     //void ReSize(); }

MFC中怎麼樣讓控制元件大小隨著主窗體大小改變改變

轉載:https://blog.csdn.net/business122/article/details/11611421 MFC 控制元件隨著視窗大小變化 VC++ 剛接觸MFC不久,對MFC的許多函式和功能還不是很瞭

[MFC] 控制元件大小跟隨對話方塊大小比例變化 [大三TJB_708]

網上查閱有多種方法,選學一種筆記如步驟下。 1 搭建完成控制元件隨對話方塊變化比例變化的框架 1.1 在對話方塊類中的訊息對映巨集中新增對話方塊尺寸改變時的訊息巨集 [cpp] view plaincopyprint? BEGIN_MESSAGE_MAP

MFC 控制元件大小隨窗體改變改變大小-OnSize

轉載:https://blog.csdn.net/zhoxier/article/details/7776128 一個基於對話方塊的MFC介面,怎麼樣才能讓對話方塊裡的控制元件能和對話方塊同比例變小變大?今天我一直想解決這個問題,這是師姐留給我的任務。經過在網上的大量搜

BCGControlBar教程:如何將MFC控制元件的BCGControlBarBCGSuite新增到對話方塊

BCGControlBar Pro for MFC最新試用版下載請猛戳>>> 如果您正在使用我們的Windows窗體產品,那麼將我們的控制元件新增到窗體是沒有問題的:只需從Visual Studio工具箱中拖動所需的專案並將其放入窗體即可。在對話方塊中新增非標準控制元件需要一些

BCGControlBar教程:將MFC控制元件的BCGControlBar / BCGSuite新增到對話方塊

BCGControlBar Pro for MFC最新試用版下載請猛戳>>> 如果正在使用我們的Windows Forms產品,那麼將我們的控制元件新增到窗體是沒有問題的:只需從Visual Studio工具箱中拖動所需的專案並將其拖放到窗體中即可。 但是,MFC開發人員的生活