第六章使用Windows標準控制項

2021-03-04 09:49:22 字數 4312 閱讀 1973

我們在前面曾提到過,控制項是一些行為標準化了的視窗,一般用於對話方塊或其它視窗中充當與使用者互動的元素。在visual c++中,可以使用的控制項分成三類:

windows標準控制項由windows作業系統提供,在windows 95中還提供了一些新增的控制項。所有這些控制項物件都是可程式設計的,我們可以使用visual c++提供的對話方塊編輯器把它們新增到對話方塊中。microsoft基礎類庫(mfc)提供了封裝這些控制項的類,它們列於表6.

1。表6.1 windows標準控制項

前面提到過,在mfc中,類cwnd是所有視窗類的基類,很自然的,它也是所有控制項類的基類。windows標準控制項在以下環境下提供:

●windows 95

●windows nt 3.51及以後版本

●win32s 1.3

●注意:

●visual c++ 4.2及以後版本不再支援win32s。

(2) activex控制項

activex控制項可用於對話方塊中,也可用於html文件中。這種控制項過去被稱為ole控制項。本書將在專門的章節中來講述關於activex控制項的知識。

這裡僅指出activex控制項使用了與標準控制項完全不同的介面和實現方法。

(3) 其它mfc控制項類

除了windows標準控制項和自己編寫的或者來自於第三方軟體開發商的activex控制項以外,mfc還提供了另外三種控制項,它們由下面的三個類進行封裝:

●類cbitmapbutton用於建立以位圖作為標籤的按鈕,位圖按鈕最多

可以包括四個位圖**,分別代表按鈕的四種不同狀態。

●類cchecklistbox用於建立選擇列表框,這種列表框中的每一項前面有乙個核取方塊,以決定該項是否被選中。

●類cdraglistbox用於建立一種特殊的列表框,這種列表框允許使用者移動列表項。

在本章我們僅講述第一類控制項,即windows標準控制項。所涉及的內容包括各個控制項的使用及相應的技巧。

第一節使用對話方塊編輯器和classwizard

對於大多數windows標準控制項,我們一般都使用對話方塊編輯器來將它們新增到對話方塊中。

圖6. 1 在resourceview中選擇對話方塊idd_dialogdemo_dialog

圖6. 2 控制項的properties對話方塊

在下面的過程中,我們將乙個編輯框控制項新增到在第四章建立的基於對話方塊的mfc框架應用程式的主對話方塊視窗中。

1. 首先,在workspace視窗的resourceview選項內雙擊dialogdemoresources\dialog節點下的idd_dialogdemo_dialog圖示。上面的操作如圖所示。

2. 用滑鼠選中標有「要做」的靜態文字控制項。右擊滑鼠,從上下文選單中選擇properties,開啟如圖6.

2所示的對話方塊,在caption文字框中輸入新的控制項文字:「在下面的文字框中輸入一些字元」,然後將靜態文字控制項拖動到對話方塊的左上角。

3. 從controls工具視窗(如圖6.3所示,如果在你的資源編輯器中看不到該工具視窗,可以在工具條上右擊滑鼠,從上下文選單中選擇controls)中選擇編輯控制項圖示,在對話方塊中繪製乙個編輯框控制項,如圖6.

4所示。

圖6. 3 對話方塊編輯器的controls工具視窗

在該編輯框控制項的properties視窗的general選項卡中輸入其id為idc_edit。然後在styles選項卡下將multiline核取方塊劃上勾,並消除auto hscroll核取方塊前的勾。

4. 右擊該編輯框控制項,從上下文選單中選擇classwizard命令,開啟classwizard對話方塊,該對話方塊看起來如圖6.5所示。

圖6. 4 向對話方塊中新增乙個編輯框控制項

圖6. 5 classwizard對話方塊

單擊member variables選項卡,確信在project處選擇了dialogdemo,在class name處選擇了cdialogdemodlg。現在我們為剛才新增的編輯框控制項idc_edit新增乙個資料對映入口。在control ids處選擇idc_edit,單擊右邊的add viable按鈕。

開啟如圖6.6所示的對話方塊。

在member variable name處鏈結變數名m_stredit (這裡m表示該變數為類cdialogdemodlg的乙個成員變數,str表明其型別為字串,即類cstring),在category下拉列表中選擇value (另一種選擇是control,兩種選擇的不同將在後面的內容中講述),在variabletype下拉列表中選擇cstring (還有其它很多資料型別可供選擇,但由於這裡編輯框中的內容為一字串,因此cstring是最恰當的選擇)。單擊ok關閉對話方塊。

圖6. 6 為控制項對映新增成員變數

5. 檢查一下現在的classwizard對話方塊(圖6.7)與圖6.

5相比有何不同。在圖6.7所示的對話方塊中下方的maximum characters文字框中輸入50。

由字面意思可以很容易猜出其含義,即將編輯框idc_edit中可能的最長字串的大小限制為50。單擊ok關閉對話方塊。

圖6. 7 使用classwizard設定資料驗證方案

6. ,使用下面的**來代替位於語句return true;前的// todo注釋:

m_stredit="您好! 請在這裡輸入一些字串。";

updatedata(false);

7. 在classview中雙擊類cdialogdemoapp的initinstance成員函式,使用下面的**來找替位於選擇支

if (nresponse == idok)下的//todo注釋:

afxmessagebox(dlg.m_stredit);

然後將同一成員函式中的下面的**行刪掉(或注釋掉):

m_pmainwnd = &dlg;

8. 編譯並執行該應用程式。顯示如圖6.8所示的對話方塊。

圖6. 8 示例程式dialogdemo的執行結果

在圖6.8所示的文字框中輸入一些字元,單擊「確定」。隨即彈出如圖6.

9所示的訊息框。該訊息框複述了使用者在圖6.8所示的對話方塊中的輸入。

我們還發現,在圖6.8所示的對話方塊中,當輸入字串達到一定的長度之後,我們不可以再輸入更多的字元,這是我們在前面設定了maximum characters為50的結果。

圖6. 9 以訊息框的形式反饋輸入的字串

下面我們來看在上面的步驟中都完成了什麼。首先我們使用資源編輯器向對話方塊模板中新增這些標準控制項,這一步的概念很清晰,因此並不難理解。

然後,我們開啟了所繪製的編輯框的properties (屬性)對話方塊。先將其控制項id設定為idc_edit。這時如果開啟標頭檔案resource.

h,就會發現巨集idc_edit被定義為常量1001。不過,事實上在很多情況下我們並不需要關心每一控制項的id的具體值,而只需要記住相應的助記符。對於這裡的編輯框控制項,我們只需要記住idc_edit即可,而不需要關心它等於1001。

接著,我們在styles選項卡中設定了multiline屬性,同時清除了auto hscroll屬性,兩者共同作用使用得編輯框idc_edit支援多行文字,並且如文字行的長度超過編輯框寬度時自動回行。

下面的步驟是最重要的一步,我們動用了功能強大的工具classwizard。首先,我們將編輯框與乙個cstring物件相關聯,這使用了一種被稱為dialog data exchange (ddx)的機制。在這種機制中,我們先在處理函式oninitdialog或對話方塊類的建構函式中對對話方塊物件的成員變數進行初始化,在對話方塊顯示之前,框架的ddx機制將成員變數的值傳遞給對話方塊中的控制項。

這個過程在成員函式domodal或create被呼叫的過程中發生。。這時我們就可以看到前面的第6步還可在具有下面的幾種變通方案:

1. 將**行

m_stredit="您好! 請在這裡輸入一些字串。";

移到對基類的oninitdialog成員函式的呼叫之前,即位於下面的**之前:

cdialog::oninitdialog();

2. 將**

m_stredit="您好! 請在這裡輸入一些字串。";

移到類cdialogdemodlg的建構函式中。

對於上面的兩種方法,與前面第6步中使用的方法相比,我們沒有必要呼叫類cwnd的成員函式updatedata。因為該函式在類cdialog的成員函式oninitdialog中將被呼叫。

這三種方法之間並沒有明確的優劣之分,在很多情況下,它們分別適用於不同的場合。

這裡我們說一下成員函式updatedata。該函式帶有乙個布林型別的引數,如果該引數為false,函式updatedata將成員變數的值傳遞給對話方塊的變數;而如果該引數為true,函式updatedata將進行相反的過程。

如果使用者單擊了對話方塊中id為idok的按鈕,或者以true為引數呼叫函式updatedata,ddx機制從控制項中將值傳遞到成員變數,同時對話方塊資料驗證(dialog data validation,ddv)機制根據設定的驗證規則驗證所有資料項。

第六章第六章財務計畫

6.1 資金 投資比例餅圖 希吉雅食品責任 成立初期,準備籌集資金100萬元。發起人自投60萬元,申請大學生創業貸款30萬元,10萬元尋求投資,企業固定資產作投資160萬元,向銀行貸款100萬元。共計註冊資本360萬元。投資比例如圖所示 圖8 1 投資比例 創業自籌資金由創業者個人以其個人名義籌集的...

第六章管理

答案 c 是指生產者至使用者或消費者之間的物流。a.物流 b.生產物流 c.銷售物流 d.營銷物流 答案 c 是企業生產物流系統的終點,也是銷售物流系統的起點。a.運輸 b.配送 c.包裝 d.庫存 答案 c 銷售物流服務有四個要素,即 可靠性 通訊和方便性。a.空間 b.地點 c.時間 d.數量 ...

第六章總結

第六章遺傳和變異 第一節生物的遺傳 一 dna是主要的遺傳物質 少數種類生物 如菸草花葉病毒 遺傳物質是rna。二 dna分子的結構和複製 1 dna分子結構特點 2 dna複製 1 概念 以親代fna分子為模板來合成子代dna的過程。2 過程 邊解旋邊複製 3 條件 模板 原料 能量和酶。4 分子...