7 3動態建立按鈕

2021-10-05 04:39:39 字數 2616 閱讀 3112

單擊對話方塊中某個按鈕,就動態建立乙個新按鈕。

首先將程式**恢復到建立模態對話方塊那個時候的**。非模態對話方塊實現起來比較困難。

為該對話方塊新增乙個按鈕:

滑鼠雙擊resourceview->idd_dialog,開啟資源編輯視窗。

用滑鼠單擊控制面板上面的按鈕控制項,在對話方塊適當位置上拖出乙個適當大小的按鈕;用滑鼠右鍵單擊該按鈕,選擇屬性對話方塊,將按鈕的id改為idc_btn_add,caption改為add。

現在實現單擊add,就動態建立乙個按鈕的功能。

1、為add按鈕單擊訊息新增訊息響應函式:

滑鼠右鍵單擊add按鈕->classwizard->選擇bn_clicked訊息,類名ctestdlg,成員函式名預設onbtnadd->add function,edit code。

就定義到該訊息響應函式。按鈕的單擊屬於通告訊息。

現在在按鈕單擊訊息響應函式中實現建立乙個按鈕的功能:

為ctestdlg類新增乙個私有的cbutton成員變數:m_btn。建立按鈕由cbutton類成員函式create函式來實現。

如果沒有ws_visible,一定要呼叫該按鈕物件的showwindow函式。執行如下圖。

但是當我們再次單擊add按鈕時,就會出現乙個非法操作對話方塊。

原因:再次單擊時,由於m_btn物件已經和乙個按鈕視窗繫結了,不能重複繫結另乙個按鈕視窗。

因此為ctestdlg類新增乙個私有bool型別成員變數:m_biscreated,用來表示是否建立了按鈕視窗。在該類的建構函式中初始化為false。

void ctestdlg::

onbtnadd()

else

}

如果繫結了,就銷毀這個按鈕視窗,解除繫結。

void ctestdlg::

onbtnadd()

else

}

同樣能實現上述功能。

現在在對話方塊上面放置3個靜態文字控制項和3個編輯框控制項。

將靜態文字框控制項的文字設定為:「numer1」,「numer2」,「numer3」。

為了調整對話方塊上多個控制項的位置,或者設定它們大小和間距,可以利用layout選單或者用dialog工具欄上相應的按鈕來調整。

1、利用control鍵選中三個靜態文字控制項,單擊dialog工具欄上面align left,使三個控制項按照左邊框對齊;單擊dialog工具欄上面make same size,使三個控制項具有相同的大小;單擊dialog工具欄上面space down,使三個控制項之間有相同的間距。

2、利用同樣的方法對三個編輯框控制項進行操作。

3、只有當前編輯視窗為對話方塊編輯視窗時,layout選單和dialog工具欄才會出現,dialog工具欄在視窗的底部。

下面實現:當單擊number1這個靜態文字時,將其文字變成「數值1」。

1、在此控制項上滑鼠右鍵單擊,屬性id是idc_static;在此控制項上滑鼠右鍵單擊,選擇classwizard,然後發現object ids列表中根本沒有這個id;其他兩個靜態文字框屬性id也是idc_static。

2、因為靜態文字框主要是起到標籤作用,不來響應滑鼠單擊這類訊息,所以他們id都是一樣。

3、所以要想讓靜態文字框響應滑鼠單擊訊息,需要修改其id,才能為它新增滑鼠單擊訊息響應函式。

4、將number1的id改為idc_number1,然後開啟classwizard,就可以在object ids列表中看到這個id了。

5、message列表中選擇bn_clicked訊息->add function->edit code。

6、控制項也是視窗,要想獲得靜態文字控制項上面的文字,需要利用cwnd類成員函式:getwindowtext。但是首先得獲得這個靜態控制項物件,利用cwnd類成員函式:getdlgitem。設定靜態物件的文字,利用cwnd類成員函式:setwindowtext。

cwnd* getdlgitem( int nid ) const;

void ctestdlg::

onnumber1()

else

}

if語句是乙個逗號表示式,表示式的結果是返回最後乙個表示式的返回值。

執行,發現沒有達到預期效果。

原因:靜態文字控制項在預設狀態下是不傳送通告訊息的。(控制項一般都是傳送通告訊息)。

解決方法:開啟number1靜態文字控制項屬性->style->勾選notify(通告)

執行,就能正常執行了。

VC 動態建立按鈕

vc 如何建動態按鈕 在類的定義中,定義如下變數 那麼在類的成員函式中就可以使用了如下來建立按鈕。注,建立第二次的時候會出錯。所以要用。來釋放再進行建立。藉由這個動態建立,弄清了一些mfc的構架,mfc是基於所有的類而得出的成果,乙個類派生與另乙個基類,從cwnd到cdialog就是乙個很好的例子。...

VC 動態建立按鈕

vc 如何建動態按鈕 在類的定義中,定義如下變數 那麼在類的成員函式中就可以使用了如下來建立按鈕。注,建立第二次的時候會出錯。所以要用。來釋放再進行建立。藉由這個動態建立,弄清了一些mfc的構架,mfc是基於所有的類而得出的成果,乙個類派生與另乙個基類,從cwnd到cdialog就是乙個很好的例子。...

02 動態建立按鈕

在viewcontroller.m檔案中 viewdidload 被系統呼叫,呼叫時機 載入view controll完畢之後 1 這是控制器的乙個方法 當控制器的view建立完畢的時候呼叫一次 2 void viewdidload 5354 void didreceivememorywarning...