




已閱讀5頁,還剩93頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八講 對(duì)話框及常用控件,中國(guó)地質(zhì)大學(xué)(武漢) 計(jì)算機(jī)學(xué)院,計(jì)算機(jī)高級(jí)語言(C+),本章內(nèi)容主要包括包含控件的對(duì)話框資源的建立,對(duì)話框類和對(duì)話框資源的關(guān)聯(lián),利用對(duì)話框類來操縱對(duì)話框資源,對(duì)話框的消息處理,對(duì)話框框中控件的訪問。 要求了解控件的使用、對(duì)話框資源的建立方法和常見屬性的含義,熟悉利用控件屬性,對(duì)話框設(shè)置控件屬性的方法及常見控件屬性的含義,掌握對(duì)對(duì)話框消息WM_INITDIALOG的響應(yīng),會(huì)利用類向?qū)砑涌丶兞亢拖⒂成浜瘮?shù),熟練掌握控件類型的無關(guān)訪問。,教學(xué)要點(diǎn),對(duì)話框及常用控件,8.1 對(duì)話框概述 8.2 對(duì)話框程序的創(chuàng)建 8.3 標(biāo)準(zhǔn)Windows控件,8.1 對(duì)話框概述,界面是Windows程序設(shè)計(jì)中的一種重要的接口對(duì)話框和控件也是組成界面的重要元素。如何編寫基于對(duì)話框的應(yīng)用程序,在界面中放置什么樣的控件。當(dāng)創(chuàng)建了一個(gè)包含各種控件的對(duì)話框資源后,控件如何來響應(yīng)用戶的各種操作。 本節(jié)內(nèi)容: 8.1.1 對(duì)話框簡(jiǎn)介 8.1.2 對(duì)話框的分類 8.1.3 對(duì)話框的組成,8.1.1 對(duì)話框簡(jiǎn)介,對(duì)話框是一種用戶界面,它為用戶提供了一種標(biāo)準(zhǔn)的處理數(shù)據(jù)的方法。因?yàn)榇蟛糠值膶?duì)話框是作為對(duì)菜單的單擊響應(yīng)而顯示出來的(在Word軟件中,單擊菜單項(xiàng)后有的菜單,看都會(huì)出現(xiàn)哪些對(duì)話框),因此對(duì)話框常常被看作是用戶菜單命令的擴(kuò)展。 從程序員角度來看,對(duì)話框和控件都是窗口,查看MSDN中的MFC組織圖可以看到,它們都是從CWnd類派生來的,這正好說明了“對(duì)話框和控件都是窗口”。因此,對(duì)對(duì)話框的操作,經(jīng)常要使用窗口的成員函數(shù)來進(jìn)行。,8.1.2 對(duì)話框的分類,1模態(tài)對(duì)話框 在對(duì)話框關(guān)閉之前,用戶無法在應(yīng)用程序的其它窗口中進(jìn)行工作的對(duì)話框稱為模態(tài)對(duì)話框。例如Windows的各種應(yīng)用軟件中的Open File 對(duì)話框,用戶不能在應(yīng)用程序的其它地方工作,直到對(duì)話框關(guān)閉。 2非模態(tài)對(duì)話框 對(duì)話框保留在屏幕的同時(shí),用戶還可以在應(yīng)用程序其它窗口中進(jìn)行工作的對(duì)話框稱為非模態(tài)對(duì)話框。例如,Word字處理軟件中的Find 和Replace對(duì)話框就是非模態(tài)對(duì)話框的一個(gè)很好的例子。,8.1.3 對(duì)話框的組成,對(duì)話框模板 對(duì)話框模板定義了對(duì)話框的特性(比如大小、位置和風(fēng)格)以及對(duì)話框中每個(gè)控件的類型和位置。程序員不僅可以使用對(duì)話框資源編輯器建立對(duì)話框資源模板外,還可以根據(jù)需要在內(nèi)存中創(chuàng)建對(duì)話框模板。當(dāng)對(duì)話框模板創(chuàng)建后,程序員好可以在創(chuàng)建和管理對(duì)話框時(shí)動(dòng)態(tài)地改變部分控件的信息,如禁止、變灰、改變標(biāo)題和大小。 對(duì)話框模板可以看作對(duì)話框應(yīng)用程序的一種用戶接口,用戶在應(yīng)用程序的使用中,看到的都是對(duì)話框模板中的東西。,8.1.3 對(duì)話框的組成(續(xù)),對(duì)話框類 從CDialog類派生的對(duì)話框類提供編程接口來管理與對(duì)話框模板相關(guān)聯(lián)的對(duì)話框。CDialog類的許多成員函數(shù)與對(duì)話框編程密切相關(guān),可供程序員調(diào)用。由于對(duì)話框是一種窗口,因此相應(yīng)的對(duì)話框類必須與一個(gè)Windows窗口相聯(lián)系,而對(duì)話框資源模板就是用于創(chuàng)建這個(gè)Windows窗口及其包含在其中的控件。 對(duì)話框類可以看作對(duì)話框應(yīng)用程序的一種程序員接口,用戶對(duì)應(yīng)用程序操作,后臺(tái)調(diào)用的都是該類的成員函數(shù)來完成的。,8.2 對(duì)話框程序的創(chuàng)建,8.2.1 一個(gè)對(duì)話框程序 8.2.2 創(chuàng)建對(duì)話框資源模板 8.2.3 利用對(duì)話框類CDialog操縱對(duì)話框 8.2.4 初始化對(duì)話框 8.2.5 對(duì)話框的調(diào)用 8.2.6 對(duì)話框的消息處理,8.2.1 一個(gè)對(duì)話框程序,1程序功能 該應(yīng)用程序具有認(rèn)證的功能:當(dāng)該程序運(yùn)行時(shí),首先彈出一個(gè)“密碼驗(yàn)證” 對(duì)話框,讓用戶輸入其用戶名和密碼。用戶需要輸入用戶名“good”和用戶密碼“good”后才能進(jìn)入主界面,若有一個(gè)輸入錯(cuò)誤,都不能進(jìn)入。 2程序類型 該程序重點(diǎn)演示一個(gè)模態(tài)對(duì)話框,它是利用AppWizard創(chuàng)建的一個(gè)基于MFC的單文檔應(yīng)用程序。在該程序的主界面出現(xiàn)之前顯示“密碼驗(yàn)證” 對(duì)話框。,靜態(tài)圖片,編輯框,靜態(tài)文本,組框,按鈕,復(fù)選框,單選框,組合框,列表框,列表視圖,樹形視圖,標(biāo)簽,8.2.2 創(chuàng)建對(duì)話框資源模板,資源文件(.rc)中有關(guān)描述對(duì)話框模板的文本,模板文件 對(duì)話框模板描述了對(duì)話框中各控件類型和排列位置,不論是模態(tài)還是非模態(tài)對(duì)話框,都需要對(duì)話框模板。對(duì)話框模板存儲(chǔ)在對(duì)話框資源中,這和菜單類似。對(duì)話框資源中存儲(chǔ)的是對(duì)話框腳本,為了了解資源的腳本,我們查看一下腳本文件MfcExam.rc,屏幕看到的是生成的單文檔應(yīng)用程序的對(duì)話框的腳本。,8.2.3 利用對(duì)話框類CDialog操縱對(duì)話框,1利用類向?qū)?chuàng)建對(duì)話框類 進(jìn)入類向?qū)Ш?,如果從未給剛才建立的對(duì)話框資源模板建立對(duì)應(yīng)的對(duì)話框類,則類向?qū)?huì)發(fā)現(xiàn)這是一個(gè)新的對(duì)話框資源模板,類向?qū)釂柺欠褚獮檫@個(gè)新的對(duì)話框資源模板創(chuàng)建一個(gè)新的類。選擇“OK”按鈕,會(huì)彈出一個(gè)Create New Class的對(duì)話框。若選擇Cancel后,也可以在類向?qū)е型ㄟ^增加一個(gè)新類的方法來添加對(duì)話框資類。不管哪種情況,都是在所出現(xiàn)的對(duì)話框的Name欄中輸入對(duì)話框類的名字CPassWordDlg,Bass Dialog欄選擇CDialog,Dialog ID欄選擇先前創(chuàng)建的新對(duì)話框源模板的標(biāo)識(shí)符IDD_DIALOG_USER(如圖所示)。,對(duì)話框類的建立界面,2利用類向?qū)砑訉?duì)話框類的成員變量 為了對(duì)編輯框輸入的數(shù)據(jù)進(jìn)行控制,需要在對(duì)話框類中增加與這些控件有關(guān)的類的成員變量。 按Ctrl+W打開類向?qū)?duì)話框,選擇MFC ClassWizard對(duì)話框中的Member Variable標(biāo)簽,然后在Class Name欄中選擇對(duì)應(yīng)的CPassWordDlg對(duì)話框類,此時(shí)在下面該類的變量列表中會(huì)出現(xiàn)該對(duì)話框中的各控件的資源ID號(hào)。,雙擊Controls IDs列表中的編輯框控件的資源ID號(hào)ID_EDIT_USERNAME,在Category欄中選擇Value(值變量)(還有一種控件型變量Control),在Value Type欄中選擇CString類型。這些操作的界面如圖所示。用用樣的方法再增加一個(gè)變量m_strPassword。,利用對(duì)話框類CDialog操縱對(duì)話框(續(xù)),按OK按鈕后,這兩個(gè)類的成員變量m_strUserName和m_strPassword就被加入到CPasswordDlg類的定義中,定位到該類的頭文件PassDlg.h中,找到如下的幾行代碼:,class CPassWordDlg : public CDialog / Construction public: CPassWordDlg(CWnd* pParent = NULL); / standard constructor / Dialog Data /AFX_DATA(CPassWordDlg) enum IDD = IDD_DIALOG_USER ; CString m_strPassword; /通過類向?qū)г黾拥淖址兞浚4婷艽a CString m_strUserName; /通過類向?qū)г黾拥淖址兞?,保存用戶名稱 /AFX_DATA,8.2.4 初始化對(duì)話框,如何初始化各種類型的數(shù)據(jù)對(duì)象是很重要的,當(dāng)處理像對(duì)話框這樣復(fù)雜對(duì)象時(shí),由于它的初始化工作放在多個(gè)階段,所以需要注意次序問題。對(duì)話框的初始化工作可以在下面的三個(gè)階段進(jìn)行:構(gòu)造函數(shù)、對(duì)WM_CREATE消息的響應(yīng)和對(duì)WM_INITDIALOG消息的響應(yīng)。,8.2.4 初始化對(duì)話框(續(xù)),1在構(gòu)造函數(shù)中初始化 從C+的觀點(diǎn)看,在類的構(gòu)造函數(shù)中,應(yīng)該初始化類的數(shù)據(jù)成員,但是,在MFC應(yīng)用程序中應(yīng)盡量避免在構(gòu)造函數(shù)中完成太多的工作,因?yàn)闃?gòu)造函數(shù)沒有返回失敗條件的方法,無法報(bào)告其中的失敗信息(除非使用異常處理)。 在前面的例子中,變量m_strPasswor和m_strUserName的初始化就是在對(duì)話框類的構(gòu)造函數(shù)中進(jìn)行的,下面是構(gòu)造函數(shù)的實(shí)現(xiàn)代碼。,CPassWordDlg:CPassWordDlg(CWnd* pParent /*=NULL*/) : CDialog(CPassWordDlg:IDD, pParent) /AFX_DATA_INIT(CPassWordDlg) m_strPassword = _T(“); /成員變量初始化為空 m_strUserName = _T(“); /AFX_DATA_INIT 可見在對(duì)話框的構(gòu)造函數(shù)中主要是對(duì)對(duì)話框的數(shù)據(jù)成員變量進(jìn)行初始化。,8.2.4 初始化對(duì)話框(續(xù)),2在WM_CREATE的消息映射函數(shù)中初始化 由于對(duì)話框也是窗口,它在窗口創(chuàng)建時(shí)會(huì)收到WM_CREATE消息,該消息的響應(yīng)函數(shù)是OnCreate()。這樣,就能在窗口創(chuàng)建中做一些初始化工作。盡管用戶可能在WM_CREATE消息處理函數(shù)中進(jìn)行一些數(shù)據(jù)成員的初始化工作,但更通常的做法是在對(duì)話框中的所有控件都建立起來之后,響應(yīng)消息WM_INITDIALOG時(shí),對(duì)數(shù)據(jù)成員進(jìn)行初始化。 3在WM_INITDIALOG的消息映射函數(shù)中初始化 在對(duì)話框創(chuàng)建時(shí),會(huì)收到WM_INITDIALOG消息,該消息的響應(yīng)函數(shù)是OnInitDialog()。在得到了,8.2.4 初始化對(duì)話框(續(xù)),WM_INITDIALOG消息時(shí),對(duì)話框處于一個(gè)特殊的狀態(tài),首先,當(dāng)我們獲得該消息時(shí),對(duì)話框框架已經(jīng)建立起來,對(duì)話框的窗口句柄已經(jīng)有效;其次,各個(gè)控件也建立起來并放在適當(dāng)?shù)牡胤?;第三,?duì)話框控件還沒有顯示出來。因此,一般在OnInitDialog()函數(shù)中作一些影響對(duì)話框外觀的初始化工作,如可以設(shè)置或優(yōu)化對(duì)話框中各個(gè)控件的外觀、大小尺寸、位置及其它內(nèi)容。 一般來說,在創(chuàng)建對(duì)話框及其所有的控件后,就在對(duì)話框即將顯示之前將調(diào)用CDialog的成員函數(shù)OninitDialog()來初始化對(duì)話框。對(duì)于模態(tài)對(duì)話框,在調(diào)用DoModal()時(shí)調(diào)用OninitDialog(),而對(duì)于非模態(tài)對(duì)話框,在調(diào)用Create()時(shí)調(diào)用OninitDialog() 。,8.2.5 對(duì)話框的調(diào)用,由于對(duì)話框是一種輸入界面,因而牽涉到在程序的什么地方、什么時(shí)候調(diào)用的問題,這實(shí)質(zhì)上是創(chuàng)建的對(duì)話框類和程序如何交互的問題。根據(jù)不同的應(yīng)用程序類型和程序的功能,其調(diào)用的方法也不同。 1在程序主窗口顯示前調(diào)用 我們已經(jīng)創(chuàng)建了密碼驗(yàn)證MfcExam程序的對(duì)話框模板IDD_DIALOG_USER、對(duì)話框類CPassWordDlg,緊接著編寫調(diào)用對(duì)話框的代碼。由于密碼驗(yàn)證是在應(yīng)用程序的主框架顯示之前進(jìn)行,因此密碼驗(yàn)證對(duì)話框的調(diào)用必須在應(yīng)用程序主框架顯示之前就完成,很顯然它不能在視圖類中靠和用戶交互進(jìn)行。,8.2.5 對(duì)話框的調(diào)用(續(xù)),應(yīng)用程序類是控制整個(gè)應(yīng)用程序的運(yùn)行,它建立的時(shí)間最早,因此我們可以把對(duì)話框的調(diào)用放到應(yīng)用程序類中的InitInstance()中完成。 (1)在應(yīng)用程序類中添加文件包含宏 打開應(yīng)用程序類的實(shí)現(xiàn)文件MfcExamApp.cpp,在文件的頭件的定義處,添加文件包含的宏指令:,#include “stdafx.h“ #include “MfcExam.h“ #include “MainFrm.h“ #include “MfcExamDoc.h“ #include “MfcExamView.h“ #include “PassWordDlg.h” /需要使用用戶登陸對(duì)話框,必須包含它 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif,(2)超載應(yīng)用程序類的虛函數(shù)InitInstance() BOOL CMfcExamApp:InitInstance() . /以下為用戶添加的代碼 CPassWordDlg dlg; /如果點(diǎn)擊“取消”按鈕 if(dlg.DoModal()!=IDOK) return FALSE; /如果輸入的用戶名、密碼不正確 if(strcmp(dlg.m_strPassword,“good“)!=0) |(strcmp(dlg.m_strUserName,“good“)!=0) MessageBox(NULL,“用戶名或密碼錯(cuò)誤,請(qǐng)重試!“, “錯(cuò)誤信息“,MB_OK|MB_ICONERROR); return FALSE; ,8.2.5 對(duì)話框的調(diào)用(續(xù)),2在基于對(duì)話框的應(yīng)用程序中調(diào)用 基于對(duì)話框的應(yīng)用程序的類型比較簡(jiǎn)單,當(dāng)程序運(yùn)行后,就自動(dòng)顯示一個(gè)對(duì)話框的界面。倘若我們程序的輸入界面就是它(例如Windows中的計(jì)算器程序),則對(duì)話框的調(diào)用的代碼在向?qū)е幸呀?jīng)完成,我們沒有必要編寫,但必須知道在什么地方調(diào)用的。 3通過用戶交互對(duì)象菜單、工具欄調(diào)用 在基于文檔/視圖結(jié)構(gòu)的應(yīng)用程序中,由于對(duì)話框大部分用作用戶的輸入與輸出界面,因此對(duì)話框的調(diào)用應(yīng)該在視圖類中完成。這在前面和后面的章節(jié)都會(huì)出現(xiàn)(自己琢磨)。一般來說,對(duì)話框的調(diào)用在選擇菜單項(xiàng)、工具欄、加速鍵或按了鼠標(biāo)鍵、鍵盤鍵等觸發(fā)。,8.2.6 對(duì)話框的消息處理,1對(duì)話框本身的消息 一般在一個(gè)對(duì)話框中有多個(gè)按鈕,其中只有一個(gè)按鈕是缺省按鈕。在缺省按鈕的四周有一個(gè)虛線矩形框,缺省按鈕的作用在于用戶不需要用鼠標(biāo)單擊它,只需按回車鍵就等同于單擊它,這減輕了用戶的負(fù)擔(dān)。在應(yīng)用程序中,要想改變或設(shè)置對(duì)話框中的缺省按鈕,只需要使用SendMessage()發(fā)送一個(gè)對(duì)話框的消息 DM_GETDEFID或DM_SETDEFID即可。 2窗口消息 由于對(duì)話框是窗口,所以WM_開始的Windows消息,在對(duì)話框中類中都可以處理,在ClassWizard窗口的MessageMaps選項(xiàng)頁的Messages列表框中顯示的就是對(duì)話框可以處理的消息,其中包含了很多窗口消息。,8.2.6 對(duì)話框的消息處理(續(xù)),3控件通知消息 我們可以像對(duì)待框架窗口類和視圖類一樣,向?qū)υ捒蛑械呐缮愔袨閃M_消息增加消息映射,但卻不能對(duì)話框中控件的通知消息增加ON_COMMAND消息映射宏,因?yàn)榭丶耐ㄖ胁煌耐ㄖa。控件的通知消息主要指一個(gè)對(duì)話框中所包含的控件自己可以接收到的消息。例如EN_CHANGE就是一個(gè)編輯框內(nèi)容改變的控件通知消息(Edit Notification Changed)。在Windows對(duì)話框應(yīng)用程序中,當(dāng)要對(duì)其中的控件進(jìn)行全面的控制時(shí),就要通過類向?qū)?duì)對(duì)話框中的控件添加控件的通知消息映射。,【例8-2】在前述程序的基礎(chǔ)上,通過發(fā)送消息DM_SETDEFID將密碼對(duì)話框中的缺省按鈕設(shè)置為“確定”,在WM_INITDIALOG的消息響應(yīng)函數(shù)中將“取消”按鈕的大小改變,同時(shí)處理“用戶名稱”編輯框的通知消息EN_CHANGE。步驟如下: (1)利用類向?qū)砑訉?duì)話框類CPassWordDlg對(duì)WM_INITDLG的消息映射函數(shù)OnInitDialog(),并編寫代碼。 (2)利用類向?qū)砑泳庉嬁蚩丶蘒DC_EDIT_USERNAME的通知消息EN_CHANGE的響應(yīng)函數(shù)OnChangeEditUsername(),并編寫代碼。,void CPassWordDlg:OnChangeEditUsername() UpdateData(true); /將編輯框輸入的內(nèi)容更新到變量m_strUserName中 if(m_strUserName.Compare(“BenLaDeng“)=0) /如果在用戶名稱編輯框中輸入“BenLaDeng”,則找見了系統(tǒng)的后門 MessageBox(“恭喜您找到后門,不用輸入密碼就可進(jìn)入系統(tǒng)“); m_strUserName=“good“; m_strPassword=“good“; UpdateData(false); SendMessage(WM_COMMAND, IDOK,BN_CLICKED); /向確定按鈕發(fā)送單擊消息BN_CLICKED ,8.3 標(biāo)準(zhǔn)Windows控件,本節(jié)內(nèi)容 8.3.1 控件簡(jiǎn)介 8.3.2 靜態(tài)控件 8.3.3 按鈕控件 8.3.4 編輯控件 8.3.5 列表框控件 8.3.6 組合框控件 8.3.7 控件的類型無關(guān)訪問 8.3.8 動(dòng)畫控件,8.3.1 控件簡(jiǎn)介,在Windows應(yīng)用程序中,菜單系統(tǒng)是用來實(shí)現(xiàn)用戶與程序進(jìn)行交互最基本的途徑,但僅僅使用菜單來完成這種交互,往往并不方便,有時(shí)甚至是難以勝任的。其實(shí),Windows操作系統(tǒng)的一個(gè)重要特性就是友好的用戶界面。對(duì)于編程人員,它也提供了各種控件來實(shí)現(xiàn)直觀、方便、快捷的交互。在上一節(jié)我們使用過對(duì)話框,在對(duì)話框中的靜態(tài)文本、圖像以及各種按鈕都是控件??丶–ontrol,也稱為控制框)是一種子窗口,應(yīng)用程序用它來與其它窗口一起完成簡(jiǎn)單的輸入輸出操作。 作為一般窗口,控件具有許多通用窗口屬性,因此控件可以像操作窗口那樣使用ShowWindow()、MoveWindow()等窗口管理函數(shù)來顯示或隱藏控件、改變控件的位置和尺寸以及其它的操作。,8.3.1 控件簡(jiǎn)介(續(xù)),控件創(chuàng)建方式有兩種。 一種是在對(duì)話框模板中放置控件,當(dāng)應(yīng)用程序啟動(dòng)該對(duì)話框時(shí),Windows系統(tǒng)就會(huì)為對(duì)話框創(chuàng)建控件,這種方法是可視化的編程方式,所見即所得,本書的大多數(shù)對(duì)話框程序都使用這種方式來創(chuàng)建。 另一種方式是通過CreateWindow()或CreateWindowEx()函數(shù)來創(chuàng)建控件,這時(shí)必須指定控件的窗口類,每個(gè)控件都應(yīng)屬于某個(gè)窗口類,這個(gè)窗口類可以在應(yīng)用程序中定義并注冊(cè),但在更多的情況下,程序員使用的Windows系統(tǒng)預(yù)定義好的窗口類。,靜態(tài)圖片,編輯框,靜態(tài)文本,組框,按鈕,復(fù)選框,單選框,組合框,列表框,列表視圖,樹形視圖,標(biāo)簽,8.3.2 靜態(tài)控件,靜態(tài)控件在MFC中是靠CStatic類來管理的,它是一種單向交互的控件,只能支持應(yīng)用程序的輸出,而不能用來響應(yīng)用戶的輸入,也就是說,它可以接收消息,但基本上不會(huì)發(fā)送消息。 靜態(tài)控件是多種多樣的。在VC集成環(huán)境中,Controls工具欄中的Static Text(靜態(tài)文本)、Picture(圖片控件)和Group Box(成組框)分別用來創(chuàng)建文字、圖形和由一個(gè)方框和一個(gè)字符串組成的成組框這三種靜態(tài)控件。 Static Text、Picture和Group Box均對(duì)應(yīng)CStatic類型的對(duì)象,通??蛇x用對(duì)話框模板編輯器自動(dòng)提供的缺省標(biāo)識(shí)符IDC_STATIC,此時(shí)靜態(tài)控件只是起到一種標(biāo)識(shí)的作用。,8.3.2 靜態(tài)控件(續(xù)),1常見屬性 在對(duì)話框的應(yīng)用程序中,想要查看某類控件的屬性,先選中該類控件,然后按Alt和回車鍵,就會(huì)彈出控件的屬性設(shè)置對(duì)話框。下圖是靜態(tài)控件的屬性窗口。,圖8.6 靜態(tài)控件屬性設(shè)置窗口圖,8.3.2 靜態(tài)控件(續(xù)),2常用方法 靜態(tài)控件類CStatic的成員函數(shù)見下表。,8.3.2 靜態(tài)控件(續(xù)),3常用消息 由于靜態(tài)控件只用作輸出,而不用作輸入,因此一般不處理它的消息,但它也有一個(gè)BN_CLICKED的消息。要想處理該消息,該控件的屬性必須選中屬性窗口Style選項(xiàng)頁下的Notify復(fù)選框,并且修改其默認(rèn)的資源標(biāo)識(shí)符IDC_STATIC為其它的值。,8.3.3 按鈕控件,按鈕控件是一個(gè)小的矩形窗口,它們可以被單獨(dú)或成組使用。典型的按鈕控件有下壓按鈕(push button)、單選按鈕(radio button)和復(fù)選框(check box),它們?cè)谕庥^和使用上都有很大的差異,但在MFC中都是用一個(gè)類CButton來封裝的。下壓按鈕通常立即產(chǎn)生某個(gè)動(dòng)作,執(zhí)行某個(gè)命令,因此又叫命令按鈕。單選按鈕的外形是一個(gè)圓圈,當(dāng)它被選中時(shí),就會(huì)出現(xiàn)一個(gè)小黑點(diǎn)。復(fù)選框?yàn)橐粋€(gè)空心方框,當(dāng)它被選中時(shí),就會(huì)出現(xiàn)一個(gè)“”標(biāo)記。通常復(fù)選框只有選中和未選中兩種狀態(tài)。,8.3.3 按鈕控件(續(xù)),1常見屬性 在對(duì)話框的應(yīng)用程序中,選中所添加的按鈕控件,然后按ALT和回車鍵盤,就會(huì)彈出按鈕控件的屬性設(shè)置對(duì)話框,如圖所示。,8.3.3 按鈕控件(續(xù)),按鈕控件常見屬性有:Visible(可視性)、Caption(顯示在控件上的標(biāo)簽文本)、Disableed(是否為不接收用戶輸入的禁止?fàn)顟B(tài))、Group(控件不僅可以單獨(dú)使用,而且還可以幾個(gè)編成一組。該屬性用于指定同組控件中的第一個(gè)控件。在同組控件中用戶可以使用箭頭鍵在控件之間移動(dòng),它以Tab order為序,在該控件之后的所有該屬性值為False的控件將被視為同一組控件,直到遇上Group屬性為True的控件為止)、Table stop(是否可以使用TAB鍵來定位到該控件)等。,8.3.3 按鈕控件(續(xù)),2常用方法 按鈕控件的操作是通過CButton類的成員函數(shù)來操作,下表為按鈕類CButton的成員函數(shù)。,8.3.3 按鈕控件(續(xù)),3常用消息 下表為常見的按鈕通知消息中附帶的通知代碼。,8.3.4 編輯控件,編輯控件是一個(gè)讓用戶從鍵盤輸入并編輯文字的矩形窗口,用戶可以通過它方便地輸入各種文字、數(shù)字或者口令,也可使用它來編輯或修改簡(jiǎn)單的文本文件。若用戶在編輯控件內(nèi)單擊鼠標(biāo),或者按Tab鍵,就可以選中一個(gè)編輯控制框,并賦予它輸入焦點(diǎn)。被選中后,編輯控制框中將顯示其文本和一個(gè)表明插入點(diǎn)的位置的閃爍的插入符,然后用戶就可以用鍵盤或者鼠標(biāo)來輸入文本,移動(dòng)插入點(diǎn),或者選擇將移動(dòng)或刪除的文本。,1常見屬性 在對(duì)話框應(yīng)用程序中,選中所添加的編輯框控件,然后按ALT和回車鍵,就會(huì)彈出編輯框控件屬性設(shè)置對(duì)話框。,8.3.4 編輯控件(續(xù)),2常用方法 編輯框控件操作是通過CEdit類的成員函數(shù)來操作,表中為編輯框控件類CEdit的成員函數(shù)。,3常用消息,表中是常見的編輯框通知消息。,4實(shí)例 【例8-3】一個(gè)演示靜態(tài)文本控件、按鈕控件和編輯框控件的程序。它能求數(shù)一和數(shù)二的最大公約數(shù)和最小公倍數(shù)。 (1)創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序GcdExam,向?qū)傻拿總€(gè)步驟都使用缺省的。 (2)在對(duì)話框資源IDD_GCDEXAM_DIALOG中添加控件如下圖所示。,在對(duì)話框中,設(shè)置控件的屬性如下表所示,例8-3 (續(xù)),(3)添加單選按鈕的消息映射 前面講的所有程序中的消息映射的添加都是通過ClassWizard來進(jìn)行的,但有時(shí)想要處理的消息在類向?qū)е袥]有,或者需要對(duì)一些特殊的情況要處理(如本例子,想用一個(gè)消息響應(yīng)函數(shù)OnGcd響應(yīng)多個(gè)ON_COMMAND消息)時(shí),當(dāng)有很多個(gè)命令的功能類似,可以設(shè)置它們的ID號(hào)為連續(xù)的,再在消息映射中處理。ClassWizard不支持這種功能,程序員必須手工在消息映射中添加這類映射項(xiàng)。對(duì)于本程序,我們希望單擊“最大公約數(shù)”或“最小公倍數(shù)”時(shí),都執(zhí)行同一個(gè)消息映射函數(shù)OnGcd(UINT nID),然后在映射函數(shù)再做進(jìn)一步的處理。手工添加消息映射函數(shù)的步驟為:,對(duì)話框類CGcdExamDlg頭文件GcdExamDlg.h中添加消息映射函數(shù)原型說明。 class CGcdExamDlg : public CDialog public: CGcdExamDlg(CWnd* pParent = NULL); / standard constructor / Generated message map functions /AFX_MSG(CGcdExamDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnGcd(UINT nID); /手工添加的消息映射函數(shù)原型說明 /AFX_MSG DECLARE_MESSAGE_MAP() ;,在對(duì)話框類CGcdExamDlg的實(shí)現(xiàn)文件GcdExamDlg.cpp中添加消息映射。 BEGIN_MESSAGE_MAP(CGcdExamDlg, CDialog) /AFX_MSG_MAP(CGcdExamDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND_RANGE(IDC_RADIO1, IDC_RADIO2, OnGcd) /AFX_MSG_MAP END_MESSAGE_MAP() ,在對(duì)話框類CGcdExamDlg的實(shí)現(xiàn)文件GcdExamDlg.cpp中實(shí)現(xiàn)消息映射函數(shù)。 void CGcdExamDlg:OnGcd(UINT nID) UpdateData(true); /將前臺(tái)輸入到界面中的數(shù)據(jù)保存到后臺(tái)變量中 int p,q,r; p=min(m_nSource1,m_nSource2); /p為兩者的較小者 q=max(m_nSource1,m_nSource2);/q為兩者的較大者 if (nID=IDC_RADIO1) /求最大公約數(shù)的話(利用歐幾里德算法) while(r=q%p) q=p; p=r; m_nResult=p; /p為最大公約數(shù),放到變量m_nResult中顯示 if (nID=IDC_RADIO2) /求最小公倍約數(shù)的話 r=p; /p為較小者 while(p%q!=0) /p不能被q整除的話 p+=r; /一直累加原較小者,直到累加結(jié)果能被原較大者整除 m_nResult=p; /p為最大公約數(shù),放到變量m_nResult中顯示 UpdateData(false); /將后臺(tái)更改的數(shù)據(jù)送到前臺(tái)加以顯示 ,8.3.5 列表框控件,列表框是一個(gè)放有用戶可以選擇的對(duì)象列表項(xiàng)的控制窗口,這些列表項(xiàng)一般是以字符串形式或圖形形式來給出。它與單選按鈕組或復(fù)選框組一樣,都可以讓用戶在其中選擇一個(gè)或多個(gè)項(xiàng),但不同的是,列表框中項(xiàng)的數(shù)目是可靈活變化的,程序運(yùn)行時(shí)可往列表框中添加或刪除某些項(xiàng)。并且當(dāng)列表框中的數(shù)目較多,列表框不能一次全部顯示時(shí),就可以提供滾動(dòng)條來拓展顯示范圍。,8.3.5 列表框控件(續(xù)),1常見屬性 在對(duì)話框的應(yīng)用程序中,選中所添加的列表框控件,然后按鼠標(biāo)右鍵彈出菜單,選擇“Properities”菜單項(xiàng),就會(huì)彈出列表框控件的屬性設(shè)置對(duì)話框,如下圖所示。,8.3.5 列表框控件(續(xù)),2常用方法 列表框控件的操作是通過CListBox類的成員函數(shù)來操作,下表為列表框控件類CListBox的成員函數(shù)。,8.3.5 列表框控件(續(xù)),3常用消息 列表框的操作,不僅可以調(diào)用CListBox類的成員函數(shù)來進(jìn)行,還可以通過發(fā)送消息給列表框來進(jìn)行。 (1)發(fā)送消息到列表框 當(dāng)列表框創(chuàng)建出來之后,往往要添加、刪除、修改或檢查列表框中的項(xiàng),列表框的項(xiàng)除了用字符串來指定外,還往往通過索引來確定。索引表明某項(xiàng)在列表框中排列的位置,它以0為基準(zhǔn),即列表框中的第一項(xiàng)索引為0,第二項(xiàng)索引為1,依此類推。,8.3.5 列表框控件(續(xù)),(2)列表框發(fā)出的通知消息 當(dāng)列表框發(fā)生了某個(gè)事件,如用戶雙擊了列表框中的某一項(xiàng),列表框就會(huì)向其所屬的主窗口發(fā)送一條通知消息。列表框的通知消息是以帶參數(shù)的WM_COMMAND消息的形式來發(fā)送的。,8.3.5 列表框控件(續(xù)),這時(shí)WM_COMMAND的wParam參數(shù)的高位字就是通知代碼,低位字是列表框的資源標(biāo)識(shí)符,lParam參數(shù)則是列表框的句柄。 常見的列表框通知消息有三條:LBN_SELCHANGE表示列表框中的選擇將要改變,LBN_DBLCLK 表示用戶雙擊了列表框中的某一項(xiàng),LBN_SELCANCEL表示用戶取消了對(duì)列表框中的某一項(xiàng)選擇。,8.3.6 組合框控件,一個(gè)組合框是一個(gè)列表框和編輯框控件或者靜態(tài)文本框控件的組合。控件的列表部分可以始終顯示,也可以當(dāng)用戶單擊了下拉箭頭時(shí)才打開,當(dāng)前選擇的內(nèi)容在靜態(tài)文本框或編輯框中顯示。另外,若組合框具有下拉列表風(fēng)格,用戶可以鍵入列表框中的某個(gè)選項(xiàng)的開始字符來選擇它。如果列表框的內(nèi)容是可見的,列表框?qū)验_頭內(nèi)容與用戶鍵入內(nèi)容相匹配的第一項(xiàng)高亮度顯示。,8.3.6 組合框控件(續(xù)),1.常見屬性 在對(duì)話框的應(yīng)用程序中,選中所添加的組合框控件,然后按鼠標(biāo)右鍵彈出菜單,選擇Properities菜單項(xiàng),就會(huì)彈出組合框控件的屬性設(shè)置對(duì)話框,如下圖所示。,8.3.6 組合框控件(續(xù)),2.常用方法 組合框控件的操作是通過CComboBox類的成員函數(shù)來操作,下表為組合框控件類CcomboBox常用的成員函數(shù)。,8.3.6 組合框控件(續(xù)),3.常用消息 列表框的操作,不僅可以調(diào)用CComboBox類的成員函數(shù)來進(jìn)行,還可以通過發(fā)送消息給組合框來進(jìn)行,因此,首先要熟悉可以發(fā)送到組合框中的消息有哪些。,8.3.6 組合框控件(續(xù)),(1)發(fā)送消息到組合框 發(fā)給到組合框的消息大體分為兩類:一類是作用于組合框中的列表部分,另一類是作用于組合框中的編輯控件,它們分別與發(fā)送給列表框和編輯框控件的消息存在對(duì)應(yīng)關(guān)系。 作用于組合框中的列表框的消息有CB_ADDSTRING、CB_INSERTSTRING、CB_DELETESTRING等,它們分別對(duì)應(yīng)于發(fā)給列表框中的消息LB_ADDSTRING、LB_INSERTSTRING、 LB_DELETESTRING等。 作用于組合框中的編輯框的消息有CB_GETEDITSEL、CB_SETEDITSEL、WM_CUT等。,8.3.6 組合框控件(續(xù)),(2)組合框發(fā)出的通知消息 組合框發(fā)出的通知代碼也包含在WM_COMMAND消息的wParam參數(shù)高位字節(jié)中,它們與列表框以及組合框的通知消息存在一一對(duì)應(yīng)關(guān)系。CBN_DBCLICK表示用戶雙擊了一個(gè)列表項(xiàng), CBN_SELCHANGE表示用戶當(dāng)前的選擇發(fā)生了變化,CBN_CLOSEUP表示下拉列表框的列表即將被關(guān)閉,CBN_DROPDOWN表示表示下拉列表框的列表即將被打開等。,例8-4,【例8-4】一個(gè)練習(xí)列表框與組合框的實(shí)例。本實(shí)例側(cè)重對(duì)話框界面控件的放置和屬性的設(shè)置。 (1)程序功能:程序運(yùn)行后的界面如下圖所示。在列表框中選擇汽車的品牌,左邊就會(huì)顯示相應(yīng)汽車的圖片和注釋文字;同時(shí),通過字體組合框開可以選擇注釋文字的字體。,例8-4(續(xù)),(2)生成程序:利用應(yīng)用程序向?qū)?chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序StaticControl,向?qū)傻拿總€(gè)步驟都使用缺省的。 (3)添加控件: 在對(duì)話框資源IDD_STATICCONTROL_DIALOG 中添加如上頁圖所示的幾種控件。顯示圖片的Picture圖片控件、選擇汽車的列表框控件、選擇字體的組合框控件、顯示汽車注釋的靜態(tài)文本控件。 (4)增加位圖資源:用鼠標(biāo)右鍵單擊ClassView選項(xiàng)卡的最頂端,在彈出出式菜單中選擇“Import”導(dǎo)入命令,將外部的一些汽車圖片載入應(yīng)用程序的資源中,共導(dǎo)入八張圖片,其資源的ID號(hào)從IDB_BITMAP1到IDB_BITMAP8。,例8-4(續(xù)),(5)設(shè)置控件的屬性:控件的主要屬性設(shè)置與對(duì)應(yīng)的成員變量, WM_INITDIALOG的消息映射函數(shù)代碼 BOOL CStaticControlDlg:OnInitDialog() /主要進(jìn)行列表框中可選項(xiàng)內(nèi)容的填寫 CDialog:OnInitDialog(); /向?qū)傻拇a /以下為手工添加的代碼 /通過向列表框發(fā)送消息的方法來訪問列表框(向列表框中增加選項(xiàng)) SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,0,(DWORD)“高爾夫“); SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,0,(DWORD)“標(biāo) 致“); SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,0,(DWORD)“別 克“); SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,0,(DWORD)“寶 馬“); /使用類型無關(guān)的方法來訪問列表框 CListBox *pListBox=(CListBox *)GetDlgItem(IDC_LIST1); pListBox-AddString(“奧 迪“); pListBox-AddString(“馬自達(dá)“); pListBox-AddString(“甲克蟲“); pListBox-AddString(“奔 馳“); /設(shè)置列表框的初始位置為0 pListBox-SetCurSel(0); /設(shè)置字體組合框的初始位置為0,通過控件變量的方式來訪問 m_ComboxFont.SetCurSel(0); , 組合框控件CBN_CLOSEUP的消息響應(yīng)函數(shù)OnCloseupCombo1() void CStaticControlDlg:OnCloseupCombo1() /在該函數(shù)中,實(shí)現(xiàn)字體的選擇 /顯示汽車的描述文字 char *CarIntroduce8=“高爾夫-德國(guó)名車,世界經(jīng)典兩相轎車“,“標(biāo)致-法國(guó)名車,線條流暢,造型時(shí)尚“,“別克-美國(guó)名車,空間寬敞,視野開闊“,“寶馬-德國(guó)名車,動(dòng)力充沛,操控靈活“, “奧 迪-德國(guó)名車,工藝精細(xì),配置齊全“,“馬自達(dá)-日本名車,懸掛偏硬,轉(zhuǎn)向靈活“,“甲克蟲-德國(guó)名車,外型圓滑,提速很快“,“奔 馳-德國(guó)名車,造型流暢,充滿活力“; UpdateData(true); /獲得靜態(tài)文本框控件IDC_STATIC1的窗口指針和設(shè)備環(huán)境 CStatic *pTxt=(CStatic *)GetDlgItem(IDC_STATIC1); CDC *pDC=pTxt-GetDC(); /獲得靜態(tài)文本框控件IDC_STATIC1的客戶區(qū)域 CRect rc; pTxt-GetClientRect(,/設(shè)置文字的色彩并輸出文字 pDC-SetBkColor(RGB(0,255,0);/設(shè)置背景色 pDC-SetBkMode(TRANSPARENT); /設(shè)置顯示模式為透明 pDC-SetTextColor(RGB(0,0,255);/設(shè)置文本顏色 CFont font; /創(chuàng)建字體 VERIFY(font.CreatePointFont(160,m_FontName,pDC); pDC-SelectObject( ,列表框控件CBN_SELCHANGE的消息響應(yīng)函數(shù)OnSelchangeList1() 在該函數(shù)中,實(shí)現(xiàn)汽車圖片的選擇并顯示: void CStaticControlDlg:OnSelchangeList1() /通過向?qū)υ捒蛑械目丶l(fā)消息拉取列表框中的選擇 short bmpNo=SendDlgItemMessage(IDC_LIST1,LB_GETCURSEL,0,0); bmpNo+; /顯示汽車的圖片 /獲得靜態(tài)文本框控件IDC_STATIC1的窗口指針和設(shè)備環(huán)境 CStatic *pTxt=(CStatic *)GetDlgItem(IDC_STATIC2); CBitmap MyBitmap; switch(bmpNo) case 1: MyBitmap.LoadBitmap(IDB_BITMAP1); break; case 2: MyBitmap.LoadBitmap(IDB_BITMAP2); break; case 3: MyBitmap.LoadBitmap(IDB_BITMAP3); break;,case 4: MyBitmap.LoadBitmap(IDB_BITMAP4); break; case 5: MyBitmap.LoadBitmap(IDB_BITMAP5); break; case 6: MyBitmap.LoadBitmap(IDB_BITMAP6); break; case 7: MyBitmap.LoadBitmap(IDB_BITMAP7); break; case 8: MyBitmap.LoadBitmap(IDB_BITMAP8); break; pTxt-SetBitmap(MyBitmap.operator HBITMAP(); /將選擇的位圖送到圖片控件中顯示 OnCloseupCombo1();/顯示汽車的描述文字 ,8.3.7 控件的類型無關(guān)訪問,面向?qū)ο蟪绦蛟O(shè)計(jì)觀點(diǎn)認(rèn)為,在應(yīng)用程序中只要獲得了應(yīng)用程序中某對(duì)象的指針,就可以實(shí)現(xiàn)對(duì)該對(duì)象的全面控制,那么在對(duì)話框的應(yīng)用程序中,如何獲得其中的任何一個(gè)控件呢? 對(duì)話框中的控件可以使用MFC控件類的接口進(jìn)行訪問,也可以創(chuàng)建控件對(duì)象并將其連接到對(duì)話框控件上來訪問。,8.3.7 控件的類型無關(guān)訪問(續(xù)),1使用成員函數(shù)GetDlgItem獲取某個(gè)資源ID的指針 調(diào)用CWnd 的成員函數(shù)GetDlgItem 返回一個(gè)指向給定控件的臨時(shí)對(duì)象的指針,并將返回值類型制轉(zhuǎn)換成適當(dāng)?shù)腃+控件類型。 2使用Class Wizard 建立Control型變量 使用Class Wizard 可以給某個(gè)控件建立與之關(guān)聯(lián)的兩類變量,一類是Value值類型變量,另一類是Control控件型變量。 如果只是簡(jiǎn)單地訪問某一控件的值,那么利用類向?qū)Ыalue值類型變量。如果不僅僅是訪問某一控件的值,而且要實(shí)現(xiàn)對(duì)該控件的完全控制,就需要用ClassWizard 給該控件建立Control控件型變量。,8.3.7 控件的類型無關(guān)訪問(續(xù)),簡(jiǎn)單來說,一種建立的是對(duì)話框類的普通型成員變量,另一類建立的是對(duì)象成員變量,該對(duì)象所屬的類型就是它的控件類型。 對(duì)話框類中的成員變量可以擁有Control屬性和Value 屬性。Value屬性指的是從控件所返回?cái)?shù)據(jù)的類型(如CString或long等);Control屬性允許通過某一成員變量對(duì)控件進(jìn)行直接訪問,成員變量的類型必須是MFC控件類(如CEdit或CComboxList)之一。對(duì)于某一給定的控件,可以有多個(gè)具有Value屬性的成員變量,但最多只能有一個(gè)具有Control屬性的成員變量。,8.3.7 控件的類型無關(guān)訪問(續(xù)),具有Control屬性的成員變量又稱為對(duì)象成員,可以使用對(duì)象成員調(diào)用控件的任何成員函數(shù)進(jìn)行操作。例如,對(duì)于由m_checkboxDefault變量表示的CButton類型的復(fù)選框控件,可以用m_checkboxDefault.SetState(TRUE)來設(shè)置控件的狀態(tài)。如果復(fù)選框不是自動(dòng)復(fù)選框,那么對(duì)話
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省泉州2024年中考數(shù)學(xué)押題試卷含解析
- 2025年遠(yuǎn)程醫(yī)療服務(wù)在醫(yī)療供應(yīng)鏈管理中的應(yīng)用現(xiàn)狀與發(fā)展趨勢(shì)報(bào)告
- 《同上一堂冰雪思政大課》觀后感心得體會(huì)模版
- AI技術(shù)在醫(yī)療領(lǐng)域的倫理教育與實(shí)踐
- 全球視角下的區(qū)塊鏈技術(shù)應(yīng)用與挑戰(zhàn)
- 區(qū)域水資源優(yōu)化配置的經(jīng)濟(jì)效益探討
- 醫(yī)學(xué)研究報(bào)告的構(gòu)造與發(fā)表策略
- 人教版七年級(jí)數(shù)學(xué)三角形知識(shí)點(diǎn)歸納和常見題型總結(jié)模版
- 醫(yī)療AI技術(shù)對(duì)醫(yī)生工作的影響與挑戰(zhàn)
- 小學(xué)生觀看《開學(xué)第一課》心得體會(huì)
- 注冊(cè)制改革對(duì)市場(chǎng)治理機(jī)制的影響及優(yōu)化路徑
- 4-13-01-06 國(guó)家職業(yè)標(biāo)準(zhǔn)檔案數(shù)字化管理師S (2025年版)
- 2025至2030中國(guó)鴨脖子市場(chǎng)營(yíng)銷策略與發(fā)展前景趨勢(shì)研究報(bào)告
- 江蘇南通歷年中考語文現(xiàn)代文閱讀之非連續(xù)性文本閱讀8篇(截至2024年)
- 2024醫(yī)療機(jī)構(gòu)重大事故隱患判定清單(試行)學(xué)習(xí)課件
- 用戶思維課件
- 拔牙術(shù)拔牙的禁忌癥與適應(yīng)癥ppt課件
- 100以內(nèi)兩位數(shù)進(jìn)退位加減法測(cè)試習(xí)題(1200道)
- 六年級(jí)上冊(cè)數(shù)學(xué)圓中方方中圓經(jīng)典題練習(xí)
- 愛心樹(繪本)
- 國(guó)際海上人命安全公約(SOLAS)介紹
評(píng)論
0/150
提交評(píng)論