改變對話方塊大小和動態新增控制項

2021-05-25 19:48:02 字數 1450 閱讀 1773

#define groupbox_startid 8000

code:

crect currentrect;

getwindowrect(¤trect)   //  得到當前對話方塊的大小

currentrect.bottom += groupbox_rect.height()+20;

movewindow(¤trect,true);   //改變大小,true是改變大小之後重新整理

[動態新增控制項]

以groupbox為例,首先需要new乙個cbutton,然後呼叫其create函式,注意這裡的create中的crect引數,如果是用其他的控制項的位置作為參照值,那麼用getwindowrect()得到該控制項的位置之後還需要用screentoclient()來轉換為空間在對話方塊內的座標。

code:

cbutton m_groupbox[10];  

m_mjpeg_groupbox_ctl.getwindowrect(&groupbox_rect);  //這是另乙個groupbox的位置

screentoclient(&groupbox_rect);    //這裡容易出錯

int h=groupbox_rect.height();

groupbox_rect.bottom += h+20;

groupbox_rect.top += h+20;

m_groupbox[0].create(_t(""),bs_groupbox|ws_visible|ws_child,groupbox_rect,this,groupbox_startid+0);

m_groupbox[0].showwindow(sw_show);

//在想銷毀該控制項的地方可以用

m_groupbox[0].destroywindow();

cedit的例子:

定義乙個 cptrarray m_ptr;用於儲存建立的cedit的指標。

code:

#define groupbox_startid 8000

cptrarray m_ptr;  

//建立的時候

cedit* pedit=null;   

pedit=new cedit;   

pedit->create(ws_visible | ws_child|ws_border,crect(0,0,80,50),this,groupbox_startid+0);   

pedit->showwindow(sw_show);  

//新增到m_ptr中

if(pedit!=null)   

m_ptr.add((void*)pedit);   

//銷毀的時候

int n=m_ptr.getsize();   

for(int i=0;i   

m_ptr.removeall();   

cedit的例子參考自:

動態改變對話方塊大小

首先,需要在改變大小的對話方塊中新增一條分隔條,分隔條是用影象控制項製作的picture control,分隔條的位置就是對話方塊變小時所在的位置。修改分隔條id為 idc separator,選擇sunken屬性,意思是下陷。然後在需要修改的地方加入以下 static crect rectlarg...

如何讓對話方塊中的控制項隨著對話方塊大小的改變而隨之改變

今天做乙個介面專案的時候,需要讓對話方塊開始時就最大化,但是介面上的控制項,並不會隨著對話方塊的最大化 而變大,需要我們在 中設定,網上找到的方法如下 1.首先為對話方塊類增加成員變數 話框rect,利用新舊兩個rect 的比例,來計算得到各控制項位置,具體 如下 pwnd getdlgitem i...

MFC 動態改變對話方塊控制項位置尺寸

題記 第一種方法實踐時無法同時改變兩個控制項的位置,不知為何 用cwnd類的函式movewindow 或setwindowpos 可以改變控制項的大小和位置。void movewindow int x,int y,int nwidth,int nheight void movewindow lpcr...