MFC控制項位置調整

2022-08-20 03:24:09 字數 1315 閱讀 6391

在mfc工程中控制項或者視窗位置的調整是經常遇到的,特別是基於對話方塊的工程。位置的調整包括座標、長度和寬度的變化,一般在視窗類的onsize函式中實現。控制項位置的調整涉及的函式有:getwindowrect()、screentoclient()、getclientrect()、movewindow()或setwindowpos(),功能意義如下:

getwindowrect():獲得視窗在螢幕上的矩形座標,調整控制項位置時必須首先獲得該螢幕座標;

screentoclient():轉換螢幕座標到客戶區座標,如果為子視窗,轉換後坐標為相對于父視窗的座標,若為獨立視窗,轉換後客戶區左上座標為(0,0);調整子視窗時這一步也是必須的;

getclientrect():獲得視窗客戶區大小(控制項的話為控制項的大小即長寬),左上座標永遠為(0,0);

movewindow():調整控制項到指定位置;

setwindowpos():調整控制項的位置,該函式使用更靈活,多用於只修改控制項位置而大小不變或只修改大小而位置不變的情況:

控制項位置調整涉及的參變數有:主視窗的cx、cy座標、參考點座標。相對於調整位置時呼叫的函式,變數稍許複雜些。cx、cy座標為主視窗的寬和高,有onsize的引數給出,為視窗控制項調整提供了變化的範圍,所有的控制項為了能夠正常顯示都不能超出這個範圍。其實在開發過程中較難和重要的是參考控制項的選擇,其位置相對於主視窗來說必須好確定。常用的策略:

1. 選擇主視窗上位置不隨視窗大小變化的控制項為參考;

2. 選擇主視窗上控制項的寬或者高固定的控制項;

3. 選擇與主視窗滿足固定座標關係的控制項;

4. 選擇主視窗上控制項位置或者高寬容易確定的控制項。

getdlgitem(idc_sti_length)->getwindowrect(rectstatic);//獲取控制項相對於螢幕的位置

screentoclient(&rectstatic);//轉為對話方塊上的相對位置

getdlgitem(idc_tex_mark)->setwindowpos(null,rectstatic.left,rectstatic.top,rectstatic.width(),rectstatic.height(),swp_nozorder);//另外個控制項移到這邊位置上

MFC 移動控制項到指定位置

方法一 利用movewindow 函式 crect rectbutton getdlgitem idc store getwindowrect rectbutton 獲取idc store控制項的位置座標 screentoclient rectbutton rectbutton.offsetrect...

對話方塊控制項自動調整大小, 位置

class cwndautopos public cwndautopos cwndautopos bool clear bool additem intnid,bool bredraw false,intnpersentx 0,intnpersenty 0,intnpersentwidth 0,in...

在MFC中改變控制項大小和位置

用cwnd類的函式movewindow 或setwindowpos 可以改變控制項的大小和位置。void movewindow int x,int y,int nwidth,intnheight void movewindow lpcrect lprect 第一種用法需給出控制項新的座標和寬度 高度...