MFC中對話方塊上控制項隨著介面變化而變化的實現

2021-08-19 09:45:11 字數 1138 閱讀 7904

首先說明一下縮放實現步驟:先在oninitdialog()中獲取當前客戶區的大小,然後呼叫wm_size事件處理函式onsize(),然後就是具體的實現過程,見下圖**實現。

1、先在標頭檔案中新增以下**:

protected:

crect m_rect;

void resize(void);

point old;

2、然後再oninitdialog()中新增如下**:

// todo: 在此新增額外的初始化**

getclientrect(&m_rect);

old.x = m_rect.right - m_rect.left;

old.y = m_rect.bottom - m_rect.top;

3、然後實現resize()函式,如下:

float fsp[2];

point newp; //獲取現在對話方塊的大小

crect new_rect;

getclientrect(&new_rect);

newp.x = new_rect.right - new_rect.left;

newp.y = new_rect.bottom - new_rect.top;

fsp[0] = (float)newp.x / old.x;

fsp[1] = (float)newp.y / old.y;

crect m_rect;

int woc;

cpoint oldtlpoint, tlpoint;//左上角

cpoint oldbrpoint, brpoint;//右下角

hwnd hwndchild = ::getwindow(m_hwnd, gw_child); //列出所有控制項

while(hwndchild)

old = newp;

4、最後在事件函式中呼叫:

// todo: 在此處新增訊息處理程式**

if (ntype != size_minimized) //判斷視窗是不是最小化了,因為視窗最小化之後,視窗的長和寬會變為0,這樣造成除以0的錯誤

mfc獲取控制項在對話方塊上的位置

注意 控制項的getwindowrect方法是獲取控制項相對於螢幕的位置,而對於子控制項的movewindow方法引數座標則是相對于父視窗的位置。我們不能直接將getwindowrect 獲取到的值直接傳遞給movewindow,而需要一種轉換。該方法就是screentoclient。具體使用方法如...

MFC對話方塊內控制項大小隨著對話方塊大小變化

1 首先要知道對話方塊大小是否改變,改變了多少,我們應該記錄當前對話方塊的大小。在對話方塊類中新增成員變數 crect m rect 他是用來記錄當前對話方塊的大小。我們在oninitdialog 函式中獲取對話方塊建立時的大小 getclientrect m rect 2 增加訊息wm size的...

MFC 獲取控制項在對話方塊上的座標位置

crect rectl,rectr getdlgitem idc pic1 getwindowrect rectl 獲取控制項相對於螢幕的位置 screentoclient rectl 轉化為對話方塊上的相對位置 getdlgitem idc pic2 getwindowrect rectr 獲取控...