首先說明一下縮放實現步驟:先在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 獲取控...