MFC中進度控制項的基本用法

2021-08-08 19:51:27 字數 4134 閱讀 1694

mfc用

cprogressctrl

類來表示進度控制項。在預設方式下,進度條控制項沿水平方向放置,進度用一系列的方塊來表示。

可以通過兩種方法建立進度控制項,一種是在visaul studio的資源編輯器中通過工具箱新增;另一種是通過**新增。

一般基於對話方塊的mfc程式中,使用資源編輯器的方式來新增進度控制項。在「資源檢視」中開啟對話方塊資源,之後在右側的「工具欄」中將

progress control

控制項拖入到對話方塊上,並且調整其位置和大小,如圖

1所示。

圖1 通過「工具欄」新增進度控制項

之後,選擇右側的「屬性」按鍵,通過屬性欄設定進度控制項的屬性,如圖2

所示。

圖2 設定進度控制項屬性

其中,smooth屬性表示進度控制項中的進度條是虛線還是實線,

將該屬性設定為true則是實線,

false

是虛線;

vertical

屬性表示控制項是否是垂直的,

true

表示垂直,

false

表示水平。

基於文件/檢視的

mfc程式一般通過**來新增進度控制項。通過

cprogressctrl::create()

函式實現控制項的建立。該函式的格式為

bool create(

dword dwstyle,

const rect& rect,

cwnd* pparentwnd,

uint nid

);

其中,引數dwstyle

表示進度控制項的風格;

rect

表示控制項的位置和大小;

pparentwnd

指定了控制項的父視窗的指標;

nid是控制項的

id。如果建立成功,則返回值是

true

,否則返回值是

false

。可以使用如下**建立進度控制項

m_progress_control_manual.create(ws_child|ws_visible|pbs_smooth|pbs_vertical, crect(10,10, 500, 60), this, 10001);
其中,m_progress_control_manual

是cprogressctrl

類的物件,需要注意的是該物件必須是類的成員變數,而不能是區域性變數,否則控制項無法顯示。

create()

函式的引數中,

ws_child

表示該控制項是子控制項,

ws_visible

表示控制項是可見的;

pbs_smooth

和pbs_vertical

分別對應在「1.1

在資源編輯器中新增」中提到的

smooth

屬性和vertical

屬性。

進度控制項的作用就是通過進度條的活動來表示某個動作進展的情況。因此,在建立了進度控制項之後,接下來就是要控制進度條的活動了。在控制進度條活動時,首先要設定進度條活動的範圍,之後設定其的位置來實現進度條的活動。

通過cprogressctrl::setrange()函式設定進度條活動的範圍。該函式的格式為

void setrange(

short nlower,

short nupper

);

其中,引數nlower

和nupper

分別表示進度條活動的起始位置和結束位置。

m_progress_control_manual.setrange(0, 100);
以上**的功能是將進度條的活動範圍設定到了0~100

之間,m_progress_control_manual

是在「1.2

通過**新增」中定義的

cprogressctrl

類的物件。

可以通過三種方法設定進度條位置:第一種是直接設定位置;第二種是設定位置的偏移量;第三種是設定步進。

通過cprogressctrl::setpos()直接設定進度條的位置。該函式的作用是設定進度條的位置並且重畫進度控制項。該函式的格式為

int setpos(int npos);
其中,引數npos

表示要設定的進度條位置,該位置必須在「

2.1

設定進度條活動的範圍」中設定的範圍之內;返回值是設定新位置之前,進度條所在的位置。

m_progress_control_manual.setpos(50);
以上**的作用是將進度條的位置設定到整個進度控制項的中間位置。

通過cprogressctrl::offsetpos()函式設定控制條新位置相對於之前位置的偏移量。該函式的格式為

int offsetpos(int npos);
其中,引數npos

表示新位置相對於之前位置的偏移量;返回值是設定新位置之前,進度條所在的位置。

for(int i=0; i<4; ++i)

以上**的功能是進度條每次前進整個進度控制項的四分之一,分四次前進到進度控制項的最頂端。

進度條的步進指的是進度條每次前進的長度。通過cprogressctrl::setstep()函式設定步進,該函式的格式為

int setstep(int nstep);
該函式的引數為新的步進值;返回值是設定新步進之前的步進值。

在設定了進度條步進之後,需要呼叫cprogressctrl::stepit()函式來使得進度條按照設定的步進前進。

m_progress_control_manual.setstep((100-0)/4);

for(int i=0; i<4; ++i)

以上**與「

2.2.2

設定進度條位置的偏移量」中的**功能相同。

通過向控制項傳送pbm_setbarcolor訊息或者呼叫

cprogressctrl::setbarcolor()

函式來設定進度條的顏色;通過向控制項傳送

pbm_setbkcolor

訊息或者呼叫

cprogressctrl::setbkcolor()

函式來設定進度控制項背景顏色。

通過cprogressctrl類的物件,呼叫該類的

sendmessage()

函式向控制項傳送改變顏色的訊息。

m_progressctrl.sendmessage(pbm_setbarcolor, 0, (lparam)rgb(255, 0, 0));

m_progressctrl.sendmessage(pbm_setbkcolor, 0, (lparam)rgb(0, 255, 0));

對於sendmessage()

函式,第乙個引數表示要傳送的訊息,第二個引數和第三個引數均表示訊息的資訊,其中,第三個引數表示要設定的顏色。以上**的功能是將進度條顏色設定為紅色,將進度控制項背景顏色設定為綠色。

通過呼叫cprogressctrl::setbarcolor()函式和

cprogressctrl::setbkcolor()

函式來設定顏色。這兩個成員函式最終還是向控制項傳送了改變顏色的訊息。

m_progressctrl.setbarcolor(rgb(255, 0, 0));

m_progressctrl.setbkcolor(rgb(0, 255, 0));

以上**與「

3.1

傳送改變顏色的訊息」中**的功能相同。

經測試,修改進度條顏色的功能只能在vc++6.0中實現,

vs2008

及以上版本無法實現該功能。

MFC控制項基本用法

一 控制項內容的設定和讀取 a 方法一 cstring strincom1 t com1 setdlgitemtext idc combo1,strincom1 cstring strcoutcom1 t getdlgitemtext idc combo1,strcoutcom1 messagebo...

MFC中控制項的用法

1 cbutton 設定按鈕上的文字 cbutton pbutton cbutton getdlgitem idok pbutton setwindowtext go 2 cstatic 設定label的文字 ctime currtime ctime getcurrenttime cstring s...

MFC控制項之進度條

這個是手工活,不多說。vs2008和vs2005可能沒有這個函式,需要手動新增,如果你不會新增,看看這裡吧。一般初始化就是設定控制項的範圍之類的。bool progressys oninitdialog void 例如本例是在按鈕新增的響應 void progressys onbnclickedbu...