在用vc開發應用程式時,經常會要做一些可以改變大小的對話方塊,而這個時候就要求對話方塊上的控制項會隨著對話方塊大小的改變而改變自己的位置和大小。如果控制項比較少,那可以在對話方塊的onsize()事件裡面新增**,通過計算來調整各個控制項的位置和大小;但是,如果對話方塊上的控制項比較多的話,那這將是一件非常痛苦的事情!要是程式中又有很多可以改變大小的對話方塊,那乙個乙個的onsize()寫下來,那會使程式設計師崩潰的!
為了解決這個問題,我寫了乙個自動改變控制項位置和大小的對話方塊類clxdialog。從這個類繼承的對話方塊類,只要在oninitdialog()裡對控制項做一些簡單的設定,對話方塊上的控制項就會隨著對話方塊大小的改變而改變自己的位置和大小。
為了儲存控制項資訊,我定義了乙個結構:
typedef struct _dlgcontroltag
dlgctlinfo, *pdlgctlinfo;
這裡要對結構中的iflag和ipercent進行一些解釋。其中iflag是下面的列舉值:
enum
;ipercent表示改變值佔對話方塊改變值的百分比。例如,乙個控制項的ipercent值為100,iflag值為movex,那麼當對話方塊的寬度改變100個單位的時候,這個控制項就在x方向移動100個單位;又如,乙個控制項的ipercent值為100,iflag值為elasticxy,那麼當對話方塊的寬度和高度分別改變100個單位的時候,控制項的高度和寬度也相應的改變100個單位。
下面是設定控制項資訊的函式:
bool setcontrolproperty(pdlgctlinfo lp, int nelements);
使用起來非常簡單,在對話方塊的oninitdialog()函式裡面新增類似下面的**就行了:
// 控制項資訊陣列
static dlgctlinfo dcmenugroup = ,,
,,,,
,,,,
,,,,
};// 設定控制項資訊
setcontrolproperty(dcmenugroup, sizeof(dcmenugroup)/sizeof(dlgctlinfo));
下面就是使用上面這段**的對話方塊改變大小前後的效果圖:
對兩張截圖的比較我們可以很容易的理解上面那段**。
我還提供了乙個函式:
void showsizeicon(bool bshow = true);
來設定是否顯示對話方塊右下角表示可以改變大小的圖示。這個圖示是從系統中讀取的,我上面的截圖是windows2000下的,在windowsxp中就會自動變成xp風格的。
好了,閒話不多說了,下面貼出該對話方塊類clxdialog的源**,裡面有詳細的注釋:
VC中自動改變控制項位置和大小的對話方塊類
在用 vc開發應用程式時,經常會要做一些可以改變大小的對話方塊,而這個時候就要求對話方塊上的控制項會隨著對話方塊大小的改變而改變自己的位置和大小。如果控制項比較少,那可以在對話方塊的onsize 事件裡面新增 通過計算來調整各個控制項的位置和大小 但是,如果對話方塊上的控制項比較多的話,那這將是一件...
VC中自動改變控制項位置和大小的對話方塊類
typedef struct dlgcontroltag dlgctlinfo,pdlgctlinfo 這裡要對結構中的iflag和ipercent進行一些解釋。其中iflag是下面的列舉值 enum ipercent表示改變值佔對話方塊改變值的百分比。例如,乙個控制項的ipercent值為100,...
VC中自動改變控制項位置和大小的對話方塊類
在用vc開發應用程式時,經常會要做一些可以改變大小的對話方塊,而這個時候就要求對話方塊上的控制項會隨著對話方塊大小的改變而改變自己的位置和大小。如果控制項比較少,那可以在對話方塊的onsize 事件裡面新增 通過計算來調整各個控制項的位置和大小 但是,如果對話方塊上的控制項比較多的話,那這將是一件非...