




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、立身以立學(xué)為先,立學(xué)以讀書為本1.1基本概念Visual C+ + :微軟公司出品的 C+語言開發(fā)工具,允許程序員使用C + +語言以可視化的編程方式快速開發(fā)基于 Windows平臺(tái)的系統(tǒng)軟件及應(yīng)用軟件。Windows API : Windows操作系統(tǒng)的應(yīng)用編程接口,它是操作系統(tǒng)的一部分,由數(shù)千個(gè)函數(shù) 組成,程序員可以在自己的程序里調(diào)用API函數(shù)以利用操作系統(tǒng)內(nèi)置的一些功能。MFC :微軟基礎(chǔ)類庫。依據(jù)面向?qū)ο缶幊趟枷雽PI函數(shù)封裝在幾百個(gè) C+類中,使程序員可以利用面向?qū)ο蟮姆椒ㄩ_發(fā)程序。C+語言標(biāo)準(zhǔn):C + +語言是一種通用的計(jì)算機(jī)編程語言,國(guó)際標(biāo)準(zhǔn)化組織已經(jīng)對(duì)其語法 和基本類庫進(jìn)行了
2、標(biāo)準(zhǔn)化,很多公司依據(jù)C+語言標(biāo)準(zhǔn)推出了自己的C + +開發(fā)工具,Visual C + +只是其中一種。1、Windows應(yīng)用程序的界面窗口:屏幕上的一塊區(qū)域,是應(yīng)用程序的主要輸入輸出部件,每個(gè)應(yīng)用程序都擁有一個(gè)或多個(gè)窗口,開發(fā) Windows程序的第一步就是建立窗口。窗口有兩種存在形式:打開的窗口和圖標(biāo)(最小化的窗口)編寫一個(gè) Windows應(yīng)用程序,首先應(yīng)創(chuàng)建一個(gè)或多個(gè)窗口,隨后應(yīng)用程序的運(yùn)行過程 即是窗口內(nèi)部、窗口與窗口之間、窗口與系統(tǒng)之間進(jìn)行數(shù)據(jù)處理和數(shù)據(jù)交換的過程菜單(工具欄):屬于某個(gè)窗口,用戶通過菜單向應(yīng)用程序發(fā)送命令。對(duì)話框:一種特殊的窗口,一般用于與用戶交互。控件:對(duì)話框中可以
3、包含很多種控件,例如按鈕、編輯框、列表框、滾動(dòng)條等。從本 質(zhì)上講,控件也是窗口。2、開發(fā)Windows應(yīng)用程序的方法(1) 使用 Windows API 函數(shù):API函數(shù)是 Windows系統(tǒng)提供的編程接口,大致分為3類:窗口管理函數(shù):窗口的創(chuàng)建、移動(dòng)、修改等。圖形設(shè)備接口函數(shù):實(shí)現(xiàn)在窗口的客戶區(qū)繪制圖形和文本。系統(tǒng)服務(wù)函數(shù):實(shí)現(xiàn)與操作系統(tǒng)有關(guān)的多種功能,例如多線程控制等。(2) 使用MFC類庫:類庫中存放了大量預(yù)先定義的類,以面向?qū)ο蟮乃枷敕庋b了API函數(shù),程序員可以直接將這些類放到自己的程序里。(3) 使用.NET框架類庫(4) 使用其它類庫(OWL、JAVA SSH框架)3、Window
4、s應(yīng)用程序中的數(shù)據(jù)類型為了使程序的語義更加豐富,Windows在C語言的基礎(chǔ)上自定義了很多種數(shù)據(jù)類型。例如:HWND無符號(hào)32位整數(shù)HDCHINSTANCEDWORDBOOLun sig ned long boolBYTEun sig ned charUINTun sig ned int注意:Windows自定義數(shù)據(jù)類型的關(guān)鍵字都是大寫3、 Windows應(yīng)用程序中的數(shù)據(jù)類型為了使Windows編程工作更為直觀,微軟公司的SDK軟件包定義了大量的數(shù)據(jù)類型,女口 HWND、HINSTANCE、UINT、HDC、HPEN、HBRUSH、HANDLE 等。這些數(shù)據(jù)類型 大部分實(shí)際上是32位整數(shù)。(參
5、見P3)首先需要說明的是, 這些數(shù)據(jù)類型不屬于標(biāo)準(zhǔn) C+的范圍,它們是微軟公司自己使用 typedef關(guān)鍵字定義的,目的是使編程更為方便。另外,微軟還定義了大量的符號(hào)常量(參見P4),如WM_KEYDOWN 、WM_PAINT、WM_CLOSE (消息號(hào))SW_SHOW SW_SHOWMINIMIZE SW_SHOWMAXMIZE (窗口顯示方式) 這些符號(hào)常量對(duì)應(yīng)著一個(gè)具體的數(shù)值,例如:#define WM_KEYDOWN0x0100#define WM_KEYUP0x0101#define WM_MOUSEMOVE0x0100在程序中當(dāng)然可以直接使用具體數(shù)值,但很不方便,推薦使用符號(hào)常量。
6、數(shù)據(jù)類型和符號(hào)常量的定義帶來兩個(gè)結(jié)果:一方面使初學(xué)者難以入門,覺得Win dows程序晦澀難懂,一方面使程序更易維護(hù)和升級(jí)。4、匈牙利表示法:一個(gè)標(biāo)識(shí)符可由多個(gè)英文單詞組成,每個(gè)英文單詞的第一個(gè)字母大寫。例如:HWND CreateWi ndow( LPCTSTR lpClassName,LPCTSTR lpWi ndowName, DWORD dwStyle, int x, int y,int nWidth,int nH eight,HWND hWndPare nt,HMENU hMe nu,HANDLE hln sta nee,LPVOID IpParam);CreateWindow、Sh
7、owWindow、GetMessage/ poin ter to registered class n ame/ poin ter to win dow n ame/ win dow style/ horizontal position of window/ vertical positi on of wi ndow/ win dow width/ window height/ han dle to pare nt or owner window/ handle to menu or child-window identifier/ han dle to applicati on in sta
8、 nee/ poin ter to win dow-creati on data5、Windows對(duì)象與句柄Windows對(duì)象是內(nèi)存中構(gòu)建的程序?qū)嶓w,Windows預(yù)定義了很多數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),包括窗口、按鈕、對(duì)話框、畫筆、畫刷、字體等。我們編程序時(shí)要按照預(yù)定義的數(shù)據(jù)結(jié)構(gòu)在 內(nèi)存中構(gòu)建具體的對(duì)象,并使用API函數(shù)操縱這些對(duì)象,最終完成用戶要求的功能。句柄(handle)是應(yīng)用程序中能夠唯一表示對(duì)象的一個(gè)整數(shù)數(shù)值,通過句柄可訪問句柄代表的對(duì)象,進(jìn)行適當(dāng)?shù)牟僮鳌P蜗蟮卣f,句柄是Windows世界里對(duì)象的身份證號(hào)碼。如HWND。( P3)注意:C + +對(duì)象與 Windows對(duì)象是兩個(gè)不同的概念,
9、Windows對(duì)象是C語言概念上的數(shù)據(jù)集合,可以理解為Windows系統(tǒng)的組成部分。而C + +對(duì)象屬于應(yīng)用程序,是根據(jù)C + +類構(gòu)造的數(shù)據(jù)的集合,并擁有自己的行為-成員函數(shù)。在MFC編程中,我們經(jīng)常將一個(gè) C + +對(duì)象與一個(gè) Windows對(duì)象關(guān)聯(lián)起來,以面向?qū)?象的方式進(jìn)行編程。6、事件驅(qū)動(dòng)與傳統(tǒng)的基于 DOS的程序不同(我們學(xué)C語言時(shí)編制的程序都是傳統(tǒng)的程序)°Windows程序的運(yùn)行是由事件驅(qū)動(dòng)的。所謂事件,指用戶對(duì)計(jì)算機(jī)的一個(gè)操作,如敲擊鍵盤、點(diǎn)擊鼠標(biāo)等。(注:Windows內(nèi)核也可以產(chǎn)生事件。)開發(fā)基于DOS的程序時(shí),程序開發(fā)者處于完全支配的狀態(tài),程序執(zhí)行流程遵從程序
10、員 預(yù)先規(guī)定的路徑。Windows程序的執(zhí)行順序取決于事件發(fā)生的順序。以學(xué)生成績(jī)管理系統(tǒng)為例:如果選擇增加一名學(xué)生,必須將這個(gè)操作進(jìn)行到底,而如果是Windows程序,可以在操作中間切換到其他操作。7、消息所謂消息,是對(duì)事件的描述。Windows系統(tǒng)為所有可能的事件都預(yù)定義了消息,當(dāng)事件發(fā)生時(shí),Windows就產(chǎn)生描述該事件的消息,并將其發(fā)往適當(dāng)?shù)膽?yīng)用程序,應(yīng)用程序收到消息后執(zhí)行與消息對(duì)應(yīng)的代碼段。例如,當(dāng)用戶敲擊鍵盤,便產(chǎn)生了兩條消息:WM_KEYDOWN 和WM_KEYUP,它們分別對(duì)應(yīng)某個(gè)鍵的按下與釋放。如果我們?cè)诔?序中為這兩個(gè)消息指定了代碼段,該代碼段將被執(zhí)行。程序的執(zhí)行順序由順序產(chǎn)
11、生的消息驅(qū)動(dòng),所以Windows程序設(shè)計(jì)的重點(diǎn)是編寫處理消息的代碼段。程序員可根據(jù)消息類型編寫程序以處理接收的消息,或者發(fā)出其他消息以驅(qū)動(dòng)其他程 序,但是不必預(yù)先確定消息產(chǎn)生的次序。8、描述消息的C結(jié)構(gòu)typedef struct tagMSG / msgHWNDhwnd; /Ha ndle to the wi ndow whose win dow procedure receives the message.UINT message; /Specifies the message nu mberWPARAM wParam; /Specifies additional information
12、about the message. The exact meaning depe nds on the value of the message memberLPARAM lParam; /Specifies additional information about the message. The exact meaning depe nds on the value of the message member.DWORD time; /Specifies the time at which the message was posted.POINT pt; /Specifies the c
13、ursor positi on, in scree n coord in ates, whe n the message was posted MSG;MSG由Windows系統(tǒng)負(fù)責(zé)生成和填寫,每發(fā)生一個(gè)事件,就會(huì)生成一個(gè)結(jié)構(gòu)變量,然后放到消息隊(duì)列中,等待應(yīng)用程序?qū)⑵淙∽摺?、消息循環(huán)無論是用戶消息還是系統(tǒng)消息,消息產(chǎn)生后首先交給操作系統(tǒng),操作系統(tǒng)將消息暫存在 消息隊(duì)列里。Windows為每個(gè)應(yīng)用程序建立了消息隊(duì)列。 可以同時(shí)為多個(gè)應(yīng)用程序接收和分 配消息。由于程序的運(yùn)行是事件驅(qū)動(dòng)的,所以程序加載后便開始等待消息的到來,根據(jù)到來的消息內(nèi)容執(zhí)行各種不同的操作。應(yīng)用程序如何等待消息到來?方法是在程
14、序中編寫一個(gè)無限循環(huán)語句,每一次循環(huán)都從自己的消息隊(duì)列里取出一個(gè)消息,經(jīng)過適當(dāng)處理后發(fā)送給相應(yīng)的窗口。while(GetMessage(&Msg,NULL,O,O)Tran slateMessage(&Msg); DispatchMessage(&Msg);/分發(fā)消息,實(shí)際上是調(diào)用相應(yīng)窗口函數(shù)消息獲取函數(shù)的原型:/ address of structure with message/ han dle of window/ first message/ last messageBOOL GetMessage( LPMSG lpMsg, HWND hWnd, UINT wM
15、sgFilterMi n, UINT wMsgFilterMax);注:如果第二個(gè)參數(shù)為 NULLGetMessage retrieves messages for any wi ndow that bel ongs to the calli ng thread and thread messages posted to the call ing thread via PostThreadMessage.注:thread messages表示線程消息,消息分為窗口消息和線程消息Windwos應(yīng)用程序具有相對(duì)固定的基本結(jié)構(gòu),由WinMain函數(shù)和 WndProc函數(shù)構(gòu)成。 WinMain函數(shù):是
16、所有 Windows程序的入口,類似C語言的main函數(shù),完成一系列 的定義和初始化工作,并產(chǎn)生消息循環(huán)。消息循環(huán)是整個(gè)程序運(yùn)行的核心。 WndProc函數(shù):窗口函數(shù),與應(yīng)用程序的某個(gè)窗口對(duì)應(yīng),發(fā)往窗口的消息由與之對(duì)應(yīng)的窗口函數(shù)處理,編程的主要工作是編寫WndProc函數(shù)。注:WinMain函數(shù)的名字是固定的,WndProc函數(shù)的名字可以自己指定,只要將它與某個(gè)窗口聯(lián)系起來即可。#in clude<wi ndows.h>LRESULT CALLBACK WndProc();int WINAPI WinMain( )II變量聲明注冊(cè)窗口類創(chuàng)建并顯示窗口/消息循環(huán)LRES ULT CA
17、LLBACK WndProc() switch(message) case break;case WM_DESTROY: 退出PostQuitMessage(O);break;default:return DefWin dowProc(hw nd,message,wParam,IParam);return 0;1兩個(gè)函數(shù)的原型:LRESULT CALLBACK WndProc(HWND,UINT,WPARA M,L PARAM);int WINAPI WinM ai n( HINSTANCE hI nsta nee,HINSTANCE hPrevI nst,LPSTR IpszCmdLi ne
18、, int n CmdShow)(1) WinMain 函數(shù):DOS環(huán)境下編程時(shí),主函數(shù)的名字是main,般沒有參數(shù),而 WinMain函數(shù)有4個(gè)參數(shù)。首先的問題是:誰調(diào)用WinMain函數(shù)?調(diào)用 WinMain函數(shù)時(shí)誰提供并填充 4個(gè)參數(shù)?答案:Windows操作系統(tǒng)。Windows對(duì)應(yīng)用程序的管理主要包括:加載并撤銷應(yīng)用程序、為應(yīng)用程序傳遞消息、 為應(yīng)用程序提供功能調(diào)用。當(dāng)用戶雙擊某個(gè)可執(zhí)行文件加載程序時(shí), Windows系統(tǒng)在磁盤上找到該程序所在位 置,將其內(nèi)容拷貝到內(nèi)存,同時(shí)還為應(yīng)用程序指定實(shí)例句柄、命令參數(shù)、窗口顯示方式等信息。 WinMain 的4個(gè)參數(shù): HINSTANCE :
19、Windows系統(tǒng)定義的數(shù)據(jù)類型,實(shí)際上是32位整數(shù),用來代表一個(gè)應(yīng)用程序的實(shí)例,稱為“實(shí)例句柄”。什么是應(yīng)用程序?qū)嵗縒indows中的應(yīng)用程序可能被多次啟動(dòng),即多個(gè)相同的應(yīng)用程序同時(shí)運(yùn)行,為了不造成混亂,必須把每個(gè)應(yīng)用程序?qū)嵗ㄒ坏臉?biāo)志出來,辦法是給每個(gè)應(yīng)用程序(不管相同或不同)一個(gè)唯一的句柄。Windows每次啟動(dòng)應(yīng)用程序都要傳遞兩個(gè)句柄,一是新形成的,準(zhǔn)備賦給即將啟動(dòng)的程序?qū)嵗木浔? hlnstanee ),一個(gè)是以前的實(shí)例句柄( hPrevInst ),如果內(nèi)存中已經(jīng) 有一個(gè)相同的程序?qū)嵗?,則把這個(gè)已經(jīng)存在的實(shí)例句柄放到 hPrevInst里傳遞給新程序?qū)嵗?否則 hPrevIn
20、st 為 NULL 。 LPSTR : Windows系統(tǒng)定義的數(shù)據(jù)類型,指向字符串的指針, 表示啟動(dòng)應(yīng)用程序時(shí)傳遞給它的命令參數(shù)。由用戶指定。用戶怎么指定?演示如何給Word傳遞命令參數(shù)。int WINAPI WinM ai n( HINSTANCE hl nsta nee,HINSTANCE hPrevI nst,LPSTR IpszCmdLi ne, int n CmdShow) int nCmdShow :指定程序的窗口以何種形式顯示。窗口的顯示方式有很多種,如正常、最大化、最小化、隱藏等。Windows操作系統(tǒng)一般把整數(shù)"1”放到nCmdShow中傳遞給應(yīng)用程序,表示常規(guī)窗
21、口。程序員可以在程序中指定窗口的顯示方式,而且不用具體指定某個(gè)整數(shù), Win dows系統(tǒng)定義了很多符號(hào)常量, 可以使用那些容易識(shí)別和記憶的符號(hào)常量規(guī)定窗口的顯示,詳細(xì)內(nèi)容在 ShowWindow函數(shù)中有介紹。(2)窗口函數(shù)(WndProe)LRESULT CALLBACK WndProe(HWND, UINT, WPARAM, LPARAM);誰調(diào)用窗口函數(shù)?以前編程序時(shí),除了主函數(shù)外,其他函數(shù)都會(huì)在程序中顯式地調(diào)用(即明確地調(diào)用),而在Windows程序中,卻找不到調(diào)用窗口函數(shù)的語句,那么窗口函數(shù)由誰來調(diào)用?答案:也是由 Windows操作系統(tǒng)調(diào)用。當(dāng)操作系統(tǒng)收到一個(gè)來自應(yīng)用程序的消息,它
22、就查找該應(yīng)用程序的窗口函數(shù), 然后把應(yīng)用程序的窗口句柄、 消息號(hào)、消息附加信息等作為參數(shù)傳遞給該應(yīng)用程序的窗口函數(shù),讓機(jī)器執(zhí)行窗口函數(shù)中的語句。窗口函數(shù)的類型: LRESULT : Windows系統(tǒng)自定義的一種數(shù)據(jù)類型,實(shí)際上是一個(gè)32位整數(shù),專門表示窗口函數(shù)的返回值,窗口函數(shù)必須返回一個(gè)值,一般為0。 CALLBACK :回調(diào)函數(shù)的標(biāo)志,所謂回調(diào)函數(shù),是自動(dòng)由操作系統(tǒng)調(diào)用的函數(shù)。大多數(shù)情況下,我們?cè)诔绦蚶镎{(diào)用操作系統(tǒng)的API函數(shù),有時(shí)候我們需要操作系統(tǒng)調(diào)用我們程序里的函數(shù),這時(shí)就把函數(shù)聲明為CALL BACK這里把窗口函數(shù)定義為 CALL BACK,作用是當(dāng)操作系統(tǒng)收到發(fā)往本窗口的消息時(shí),
23、自動(dòng)調(diào)用該窗口的窗口函數(shù),進(jìn)行相應(yīng)的操作。 WndProe :窗口函數(shù)的名字,可由程序員自己指定。窗口函數(shù)的4個(gè)參數(shù)LRESULT CALLBACK WndProc(HWND,UINT,WPARA M,L PARAM); HWND : Windows系統(tǒng)自定義的數(shù)據(jù)類型,32位整數(shù),代表某窗口的句柄,應(yīng)用程序的實(shí)例有句柄,窗口、按鈕、圖標(biāo)、滾動(dòng)條、輸出設(shè)備、控制、文件等等都有自己的句柄,Windows通過句柄對(duì)它們實(shí)施管理,程序通過句柄對(duì)它們實(shí)施操作。 UINT : Windows系統(tǒng)自定義的數(shù)據(jù)類型,無符號(hào)32位整數(shù),這里代表消息的編號(hào),簡(jiǎn)稱消息號(hào),Windows為所有可能的事件指定了消息,
24、為所有的消息編制了唯一的號(hào)碼,具體定義在windows.h文件中。 WPARAM和LPARAM :與消息有關(guān)的附加信息。消息不同,其值的含義也不同。例如 在鍵盤消息中,這兩個(gè)參數(shù)中存放的是虛擬鍵碼。窗口函數(shù)的作用:對(duì)可能接受到的消息進(jìn)行處理,由一個(gè)或多個(gè)switch語句構(gòu)成,每個(gè) case對(duì)應(yīng)一種消息,當(dāng)應(yīng)用程序接受到一個(gè)消息時(shí),相應(yīng)的case語句被激活并執(zhí)行LRESULT CALLBACK WndProc(HWND hwn d,UINT message, WPARAM wParam, LPARAM IParam)switch(message)case WM_DESTROY:PostQuitM
25、essage(O);break;default:return DefWin dowProc(hw nd,message,wParam,IParam);return 0;這里只對(duì)一種消息進(jìn)行了處理,當(dāng)用戶關(guān)閉窗口時(shí),Windows發(fā)送 WM_DESTORY 消息給窗口函數(shù),窗口函數(shù)收到消息后,使用PostQuitMessage函數(shù)發(fā)送 WM_QUIT消息給應(yīng)用程序的消息隊(duì)列,當(dāng) WinMain函數(shù)中的消息循環(huán)收到 WM_QUIT后,GetMessage函數(shù)返 回FALSE,終止消息循環(huán)并退出程序。MFC類庫的組織結(jié)構(gòu)及主要的類MFC中有一個(gè)巨大的類族,其根類為Cobject,這個(gè)類族中的類能幫助
26、完成各種編程任務(wù),初學(xué)者一般首先學(xué)習(xí)界面編程。CWnd類及其派生類封裝了窗口、對(duì)話框和控件,具體情況如下:CView類:代表窗口的客戶區(qū)CFrameWnd類:代表整個(gè)窗口CDialog類:封裝了與對(duì)話框有關(guān)的操作 CButton類:封裝了與按鈕有關(guān)的操作CGdiObject類及其派生類封裝了畫筆、畫刷、位圖、字體等繪圖工具;具體情況如下:CPe n類:封裝了畫筆句柄與操縱畫筆的函數(shù) CBrush類:圭寸裝了畫刷句柄與操縱畫刷的函數(shù)CBitmap類:封裝了位圖句柄與操縱位圖的函數(shù)CFont類:封裝了字體句柄與操縱字體的函數(shù)CDC類及其派生類封裝了不同區(qū)域的設(shè)備DC,具體情況如下:CClientD
27、C類:代表客戶區(qū) DCCWindowDC 類:代表整個(gè)窗口 DCCPaintDC類:代表刷新窗口時(shí)的無效區(qū)域DCCWinApp類稱作“應(yīng)用程序類”,封裝了 WinMain函數(shù),使用 MFC編程時(shí),不用 再寫 Win Ma in函數(shù)了,只要聲明一個(gè) CWin App類的對(duì)象即可。CMenu類:封裝了菜單句柄和操縱菜單的函數(shù)。這里并沒有列出 Cobject類族的所有類,只列出了比較常用的幾個(gè),如果想知道一些更多的信息,可以查閱 MSDN幫助文檔。除了 CObject類族外,還有幾個(gè)獨(dú)立的與界面編程有關(guān)的類,包括CSize、CPoint、CRect。MFC類庫提供了大量的類,編程時(shí)可以充分利用這些類
28、:要以MFC中的類為基類派生我們自己的類,當(dāng)然,新派生的類具有基類的所有功能。再 依據(jù)新派生出的類構(gòu)造對(duì)象,并調(diào)用對(duì)象的成員函數(shù)完成Windows程序的例行功能。在新派生的類中加入消息映射機(jī)制,編寫消息處理函數(shù),以處理來自Windows內(nèi)核的消息。依據(jù)MFC中現(xiàn)成的類構(gòu)造對(duì)象,直接用于程序中。編寫自己的類,實(shí)現(xiàn)程序的特定功能。在以前學(xué)習(xí)的 API編程中,每個(gè)窗口都對(duì)應(yīng)著一個(gè)窗口函數(shù),發(fā)往窗口的消息都被送到窗口函數(shù)中加以處理。在MFC程序中,窗口函數(shù)看不到了, 代之以各種對(duì)象,例如,當(dāng)用戶在窗口上點(diǎn)擊鼠標(biāo)時(shí),產(chǎn)生的消息發(fā)往隱藏在程序中的WndProc,再轉(zhuǎn)發(fā)給程序中管理窗口的對(duì)象,對(duì)象再調(diào)用處理
29、消息的成員函數(shù)。我們以前編寫的程序, 其實(shí)沒有結(jié)構(gòu)可言,只是創(chuàng)建并顯示窗口并響應(yīng)消息, 沒有從系統(tǒng)學(xué) 的角度考慮程序的結(jié)構(gòu)?,F(xiàn)在我們可以使用MFC為我們提供的程序結(jié)構(gòu):文檔 /視圖結(jié)構(gòu)??梢允褂肁ppWizard建立該程序框架:該結(jié)構(gòu)主要由以下 4個(gè)類構(gòu)成:應(yīng)用程序類 Application : CMFC002App 主窗口框架類 Frame: CMainFrame 文檔類 Document: CMFC002Doc 視圖類 View : CMFC002View它們都是MFC類的派生類。我們將按照程序的啟動(dòng)過程依次介紹這些類。程序啟動(dòng)過程大致如下:(1)構(gòu)造應(yīng)用程序?qū)ο螅?)執(zhí)行CWinApp的
30、In it In sta nee函數(shù),在該函數(shù)中初始化應(yīng) 用環(huán)境并生成文檔/視圖結(jié)構(gòu)的各個(gè)對(duì)象(3)進(jìn)入消息循環(huán)等待用戶輸入(4)根據(jù)消息中的窗口句柄調(diào)用相應(yīng)類的成員函數(shù)。理解MFC框架的關(guān)鍵是理解Initlnstanee函數(shù)。(1)應(yīng)用程序類的聲明class CSimGraphApp : public CWin Apppublic:CSimGraphApp(); 構(gòu)造函數(shù)/ Overrides/ ClassWizard gen erated virtual fun ctio n overridesAFX_VIRTUAL(CSimGraphApp)public:virtual BOOL In
31、it In sta nce(); 初始化應(yīng)用環(huán)境AFX_VIRTUAL/ Impleme ntati onAFX_MSG(CSimGraphApp)afx_msg void On AppAbout();/ NOTE - the ClassWizard will add and remove member fun ctio ns here./ DO NOT EDIT what you see in these blocks of gen erated code !AFX_MSGDECLARE_MESSAGE_MAP() 聲明消息映射表;(2) 應(yīng)用程序類的Initlnstanee函數(shù)的關(guān)鍵代碼:
32、CSingleDocTemplate* pDocTemplate; / 聲明文檔模板指針 pDocTemplate = new CSi ngleDocTemplate(/ 創(chuàng)建文檔模板IDR_MAINFRAME, /文檔模板使用的資源 ID RUNTIME_CLASS(CSimGraphDoc),/ 文檔對(duì)象的信息 RUNTIME_CLASS(CMai nFrame),/ 主幀窗口對(duì)象的信息RUNTIME_CLASS(CSimGraphView); 視圖窗口對(duì)象的信息AddDocTemplate(pDocTemplate);/ 加入文檔模板列表(3 )文檔模板對(duì)象:用于保存文檔/視圖結(jié)構(gòu)中各個(gè)
33、類的信息,當(dāng)新建一個(gè)文檔時(shí),VC自動(dòng)生成的代碼(OnFileNew函數(shù))會(huì)被執(zhí)行,并構(gòu)造3個(gè)對(duì)象,共同組成一個(gè)文檔/視圖結(jié)構(gòu)。其中RUNTIME_CLASS 是一個(gè)宏調(diào)用,它返回一個(gè)指向CRuntimeClass結(jié)構(gòu)的指針,該結(jié)構(gòu)中保存了指定類的信息。CRuntimeClass結(jié)構(gòu)的成員如下:CRuntimeClass稱為類信息表,其結(jié)構(gòu)的成員如下:LPCSTR mpszClassName 類名int m_n ObjectSize對(duì)象大小UINT m_wSchema對(duì)象的版本號(hào),一般為 1CObject* ( PASCAL* m_pfnCreateObject )( )/ 返回工廠函數(shù)的指針,
34、CRuntimeClass* ( PASCAL* m_pfn_GetBaseClass )( ) / 返回基類信息表CRun timeClass* m_pBaseClass / 基類信息表指針CObject* CreateObject( ); II工廠函數(shù)原型,用來動(dòng)態(tài)創(chuàng)建對(duì)象 BOOL lsDerivedFrom( const CRun timeClass* pBaseClass) con st;II是否為pBaseClass的基類(4 )對(duì)象的動(dòng)態(tài)創(chuàng)建在編寫程序的過程中,如果需要?jiǎng)?chuàng)建對(duì)象,可以使用new操作符,但前提是程序員知道類的名字。在VC提供的框架中,組成框架的4個(gè)類的名字是根據(jù)程序
35、員指定的項(xiàng)目 名稱自動(dòng)生成的,也就是說,框架代碼提前不知道類的名字。而程序啟動(dòng)后,對(duì)象的實(shí)例已經(jīng)存在了,這些對(duì)象是如何創(chuàng)建的?MFC的做法是,在每個(gè)需要?jiǎng)討B(tài)創(chuàng)建對(duì)象的類中加入CRunTimeClass結(jié)構(gòu),并利用宏替換的方法將類的信息添加到類信息表中,并在適當(dāng)?shù)臅r(shí)候調(diào)用類信息表中的工廠函數(shù)來創(chuàng)建對(duì)象。為了實(shí)現(xiàn)上述目的,需要在編程時(shí)在類的聲明中(頭文件)加入:DECLARE_DYNCREATE(CSimGraphView)該宏替換在類中聲明了CRunTimeClass結(jié)構(gòu)。并在相應(yīng)的cpp文件中加入:IMPLEMENT_DYNCREATE(CSimGraphView, CView)該宏替換在cp
36、p文件中填寫CRunTimeClass結(jié)構(gòu)的各個(gè)成員。(5) AddDocTemplate(pDocTemplate);/ 加入文檔模板列表(6) 處理命令行CComma ndLi nelnfo cmdl nfo;ParseComma ndLi ne(cmdl nfo);if (!ProcessShellComma nd(cmdl nfo)return FALSE;這幾行代碼用于處理命令行,在處理過程中,框架將根據(jù)命令行的內(nèi)容以及文檔模 板中保存的類信息創(chuàng)建文檔對(duì)象、視圖對(duì)象和主幀對(duì)象。下面依次介紹。CComma ndLi nelnfo cmdl nfo;存放命令行參數(shù)的類,可通過GotoDe
37、finition找到它的聲明,該類中的成員用于存放用戶輸入命令時(shí)在命令后面附加的參數(shù),例如:lpConfig /all,其中/all為命令的參數(shù)。不同命令的不同參數(shù)有不同的含義。微軟預(yù)先定義了幾個(gè)特殊的命令參數(shù),參照下頁:(7) 框架窗口類該類負(fù)責(zé)邊框、標(biāo)題欄,是工具條、狀態(tài)條、菜單和視圖對(duì)象的載體,如果希望創(chuàng)建自 己獨(dú)特的工具條,或希望在一個(gè)框架窗口內(nèi)容納多個(gè)視圖,就需要在該類中添加代碼。(8) 文檔類該類負(fù)責(zé)數(shù)據(jù)的管理,程序需要處理的數(shù)據(jù)應(yīng)該在該類中定義。它提供了 Serialize函數(shù),能幫助程序員方便地將數(shù)據(jù)保存為磁盤文件。(9 )視圖類:負(fù)責(zé)數(shù)據(jù)的顯示和操作,管理的范圍是框架窗口的客
38、戶區(qū)部分。是程序員書寫代碼最多的地方。兩個(gè)比較重要的成員函數(shù)是:GetDocument ()獲取文檔對(duì)象的指針On Draw ()實(shí)現(xiàn)窗口的刷新CDC繪圖、文本、坐標(biāo)系、映象1、CDC繪圖編程回顧(1) 首先獲得一個(gè) DC,例如:CClie ntDC dc(this);該語句定義了一個(gè)對(duì)象,其名稱為dc,該對(duì)象封裝了一個(gè) DC,該DC代表this所指向窗口的客戶區(qū)。(2) 定義繪圖工具并將其選如DCCPe n pen, *oldPe n;pe n.CreatePe n(PS_SOLID,2,RGB(2OO,O,O);CBrush brush , *oldBrush;brush.CreateSo
39、lidBrush(RGB(0,0,200);oldPen = dc.SelectObject(&pe n);oldBrush = dc.SelectObject(&brush);(3) 使用繪圖函數(shù)繪圖并恢復(fù)原來的DC參數(shù)。dc.Ellipse(0,0,300,300);dc.selectObject(oldPe n);dc.SelectObject(oldBrush);2、On Draw 函數(shù)它屬于窗口客戶區(qū),即 View類。當(dāng)窗口客戶區(qū)需要刷新時(shí),該函數(shù)被自動(dòng)調(diào)用,具體 過程如下:視圖窗口收到 WM_PAINT消息,會(huì)自動(dòng)調(diào)用 On Pai nt函數(shù),在該函數(shù)中定義一 個(gè)
40、CPaint 類,void CView:O nPai nt()CPai ntDC dc(this);專門用于刷新窗口的類OnprepareDC(&dc);/調(diào)整DC屬性,為刷新做準(zhǔn)備(例如 CScrollView )OnDraw(&dc);/調(diào)用OnDraw函數(shù),并將圭寸裝無效區(qū)域的CDC對(duì)象傳入。MFC框架將On Pai nt函數(shù)隱藏起來,是希望減少程序員的操作步驟。void CTextView:O nDraw(CDC* pDC)CTextDoc* pDoc = GetDocument(); / 獲取文檔對(duì)象的指針ASSERT_VALID(pDoc);/ TODO: add
41、draw code for native data here,這里直接使用 pDC 繪圖即可。 SDI視圖分割一實(shí)現(xiàn)多個(gè)視圖我們可以讓一個(gè)主幀窗口中通常,應(yīng)用程序只有一個(gè)主幀窗口和嵌在其中的一個(gè)視圖窗口, 有多個(gè)視圖窗口,如果視圖是滾動(dòng)的,用戶就可以同時(shí)看到同一文檔中距離較遠(yuǎn)的不同部分, 或讓不同視圖以不同的方式對(duì)數(shù)據(jù)進(jìn)行展現(xiàn)。這在很多應(yīng)用程序中是常見的。最簡(jiǎn)單的方法是在 AppWizard中的第4步,選擇Advanee,選擇 WindowStyle標(biāo)簽, 然后復(fù)選 Splittered Window。(演示)當(dāng)然,也可以通過代碼來實(shí)現(xiàn)上述效果。對(duì)窗口進(jìn)行拆分需要使用CSplitterWnd類
42、,在主幀窗口中定義一個(gè)該類的對(duì)象,然后在OnCreateClient函數(shù)中調(diào)用該類的Create或CreateStatie函數(shù)創(chuàng)建分割的多個(gè)視圖。CSplitterWnd稱為拆分窗口,用于將主幀窗口拆分為多個(gè)窗格, 每個(gè)窗格種容納一 個(gè)視圖對(duì)象。(1 )動(dòng)態(tài)拆分調(diào)用CSplitterWnd的create函數(shù)。其特點(diǎn)是,拆分后的多個(gè)視圖是同一視圖類的對(duì) 象,而且新出現(xiàn)的視圖對(duì)象是動(dòng)態(tài)創(chuàng)建的,當(dāng)取消拆分后,新視圖對(duì)象被自動(dòng)刪除。具體做 法如下:在主幀窗口類中定義 CSplitterWnd類的對(duì)象:CSplitterWnd m_wn dSplitter;在主幀窗口的 OnCreateClient函數(shù)
43、中輸入下面代碼:return m_wn dSplitter.Create(this, 2,2, CSize(10, 10), pCo ntext);該代碼創(chuàng)建了 2X 2個(gè)視圖窗口,每個(gè)窗口的最小顯示范圍為10X 10個(gè)象素,即如果小于該范圍,拆分自動(dòng)取消。使用動(dòng)態(tài)拆分最多拆成4個(gè)窗口。(2 )靜態(tài)拆分使用CreateStatie函數(shù),拆分后的多個(gè)視圖可以是不同的視圖對(duì)象,而且,當(dāng)取消 拆分后,視圖對(duì)象不會(huì)自動(dòng)刪除,只是隱藏了起來。具體做法是:m_wndSplitter.CreateStatic(this,1,2);1 行 2 列m_wn dSplitter.CreateView(0,0,RU
44、NTIME_CLASS(CMyView1),CSize(100,100),pContext);/ (0, 0)面板m_wn dSplitter.CreateView(0,1,RUNTIME_CLASS(CMyView2), CSize(100,100),pCo ntext);/ (0,1)面板return TRUE;文檔/視圖結(jié)構(gòu)的優(yōu)勢(shì)就在于,可以利用多個(gè)視圖將同一個(gè)數(shù)據(jù)顯示為多種不同的形式。這 種程序結(jié)構(gòu)稱為“一檔多視”。視圖窗口的滾動(dòng)在實(shí)際的應(yīng)用程序中, 大部分窗口是可以滾動(dòng)的。以前學(xué)習(xí)坐標(biāo)系的概念時(shí)也接觸過滾動(dòng)的概念,但自己通過 SetWindowOrg函數(shù)來實(shí)現(xiàn)滾動(dòng)太麻煩。MFC提供了
45、一個(gè)自動(dòng)實(shí)現(xiàn)滾動(dòng)的視圖類:CSerollView。該類從CView派生,進(jìn)行適當(dāng)?shù)脑O(shè)置后,該類自動(dòng)為視圖窗口加上滾動(dòng)條及實(shí)現(xiàn) 滾動(dòng)條功能的代碼,并自動(dòng)處理On Draw函數(shù),使之適應(yīng)滾動(dòng)條件下的刷新。1、實(shí)現(xiàn)滾動(dòng)視圖的方法(1) 在APPWizard的第6步,選擇SCrollView作為自定義視圖類的基類 (默認(rèn)是CView ) (演示)。(2) 在現(xiàn)有的代碼的自定義視圖類中,把所有的CView替換為CScrollView。(演示)注意:替換完以后一定要重載OnlnitialUpdate函數(shù),在其中設(shè)置視圖的滾動(dòng)范圍。例如:void CWin dowStyleView:O nlni tialU
46、pdate()CScrollView:O nlni tialUpdate(); 基類的CSize sizeTotal(2000,2000);CSize sizePage(50,50);CSize sizeLi ne(10,10);SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLi ne);該函數(shù)在視圖第一次顯示(刷新)之前被調(diào)用,或者說,在視圖對(duì)象與文檔結(jié)合時(shí)被程序框架調(diào)用一次,僅調(diào)用一次。是設(shè)置滾動(dòng)范圍的必然時(shí)機(jī)。滾動(dòng)頁:在滾動(dòng)條空白處單擊滾動(dòng)行:在滾動(dòng)條箭頭上單擊對(duì)于動(dòng)態(tài)拆分,由于有多個(gè)相同的視圖對(duì)象,對(duì)任何一個(gè)視圖的改變都應(yīng)該反映到其他視圖中
47、,方法是調(diào)用文檔類的UpdateAllViews函數(shù)。void UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL );這個(gè)函數(shù)的作用是觸發(fā)所有視圖對(duì)象的OnDraw函數(shù)。但可以通過第1個(gè)參數(shù)指定不調(diào)用哪個(gè)視圖的 OnDraw,如果該參數(shù)為 NULL,則更新所有視圖。例如In validateRect(rect);/ 只更新當(dāng)前視圖pDoc->UpdateAIIViews(NULL);/更新所有視圖pDoc->UpdateAIIViews(this);除當(dāng)前視圖之外的其他視圖,在上面的通過
48、 UpdateAllViews更新視圖的過程中,除了當(dāng)前視圖可以只更新無效區(qū)域之外,即只重新繪制無效區(qū)域。默認(rèn)情況下,其他視圖的更新方法是使整個(gè)視圖無效, 即重新繪制整個(gè)視圖,顯然這樣做效率不高。提高拆分窗口更新效率的方法思路很簡(jiǎn)單,就是更新任何一個(gè)視圖時(shí)都只重新繪制無效的區(qū)域,而不是繪制整個(gè)視窗。這就需要通過 UpdateAllViews函數(shù)將無效區(qū)域的信息傳遞給每個(gè)視圖。UpdateAllViews通過調(diào)用每個(gè)視圖的 On Update函數(shù)對(duì)每個(gè)視圖進(jìn)行更新,而在On Update函數(shù)中,又調(diào)用In validateRect函數(shù)使各自的整個(gè)視圖區(qū)域無效,從而觸發(fā)各自的On Draw函數(shù)重繪
49、整個(gè)視圖??梢酝ㄟ^ UpdateAllViews的參數(shù) CObject* pHi nt 將無效區(qū)域傳遞到 On Update并最終到 達(dá) InvalidateRect。窗口的外觀的設(shè)置1通過AppWizard定制窗口外觀(演示、解釋)2、在PreCreateWindow函數(shù)中修改窗口外觀該函數(shù)在MFC窗口對(duì)象創(chuàng)建之后,Windows窗口對(duì)象創(chuàng)建之前被調(diào)用。它接收一個(gè)類型為CREATESTRUCT的參數(shù),通過修改該結(jié)構(gòu)變量中成員的值來改變窗口的樣式。PreCreateWindow函數(shù)的原型如下:virtual BOOL PreCreateWi ndow( CREATESTRUCT & c
50、s );它是一個(gè)在CWnd類中定義的虛函數(shù),其參數(shù)cs具有如下成員:(1 )改變位置和大小cs.cy = :GetSystemMetrics(SM_CYSCREEN) / 3;cs.cx = :GetSystemMetrics(SM_CXSCREEN) / 3;cs.y = (cs.cy * 3) - cs.cy) / 2;cs.x = (cs.cx * 3) - cs.cx) / 2;將窗口大小設(shè)為屏幕尺寸的 1/3并居中。其中GetSystemMetrics是API函數(shù),用來 獲取與系統(tǒng)有關(guān)的尺寸信息,例如屏幕尺寸、標(biāo)題欄高度(SM_CYCAPTION)、菜單欄高度(SM_CYMENU)等
51、。都是以象素為單位。(2)改變窗口風(fēng)格窗口風(fēng)格是指創(chuàng)建窗口時(shí)指定的窗口樣式,用于確定窗口的外觀。 窗口風(fēng)格可以指定為下面的一個(gè)值或多個(gè)值的組合:WS_BORDER新建一個(gè)有邊框的窗口WS_CAPTION 新建一個(gè)有邊框、標(biāo)題欄的窗口。不能和 WS_DLGFRAME 一起用 WS_CHILD 新建一個(gè)子窗口,不能和 WS_POPUP 一起用WS_CHILDWINDOW 和 WS_CHILD 風(fēng)格一樣 資源和資源文件1、什么是資源資源是 Windows程序的重要組成部分,它存儲(chǔ)了Windows程序中的可見元素,如菜單、工具條、光標(biāo)、圖標(biāo)、位圖、對(duì)話框等。一個(gè) Windows程序的可執(zhí)行文件可以分成
52、兩部分:代碼部分和數(shù)據(jù)部分,其中數(shù) 據(jù)部分的主要內(nèi)容就是 Windows程序的資源。資源數(shù)據(jù)不是程序的功能部件,只是存儲(chǔ)界面元素。資源的另一個(gè)重要作用是軟件的國(guó)際化。界面上出現(xiàn)的自然語言存放到資源文件 里,對(duì)不同的國(guó)家使用不同的資源文件。不同版本的Windows系統(tǒng)就是這樣做的。設(shè)計(jì) Windows程序時(shí),除了編寫代碼之外,還要制作程序需要的資源,一般利用 資源制作工具將資源制作出來并存儲(chǔ)到若干個(gè)資源文件里,在對(duì)程序文件進(jìn)行“連接”操作時(shí),這些資源文件會(huì)被加入到程序的可執(zhí)行文件中。市場(chǎng)上有多種Windows資源制作工具,其中大部分都與Windows開發(fā)環(huán)境捆綁在起銷售,我們將學(xué)習(xí)使用VC +
53、+ 6.0中的制作工具,并學(xué)習(xí)如何在程序中通過代碼操縱這些資源。傳統(tǒng)的資源制作方法是單獨(dú)編寫資源文件和資源頭文件,然后在代碼中使用 inicude命令將資源引用到程序中,但這樣做太麻煩了。新建一個(gè)項(xiàng)目,然后以文本方式打開它的資源文件,*.rc,可以看到對(duì)各種資源的描述,例如菜單資源的描述如下:IDR_MAINFRAME MENU PRELOAD DISCARDABLE BEGINPOPUP "文件(&F)"BEGINID_FILE_NEWID_FILE_OPENID_FILE_SA VEID_FILE_SA VE_ASID_FILE_PRINTID_FILE_PRI
54、NT_PREVIEWMENUITEM "新建(&N)tCtrl+N",MENUITEM "打開(&O).tCtrl+O",MENUITEM "保存(&S)tCtrl+S",MENUITEM "另存為(&A).",MENUITEM SEPARATORMENUITEM "打印(&P).tCtrl+P",MENUITEM "打印預(yù)覽(&V)",END在VC + + 6.0中,不用專門編與資源文件,而是使用一種可視化的方法完成資源 制作
55、。沒有必要學(xué)習(xí)如何編寫資源文件了,但我們要清楚,程序的資源是以文本的形式在資源文件中描述的。例如:IDI_ICON1ICON DISCARDABLEico n1.ico“表示資源的ID號(hào)是IDI_ICON1,類型是ICON,可廢棄,即在不需要時(shí)可以清出 內(nèi)存,對(duì)應(yīng)的圖標(biāo)文件是 icon 1.ico。在程序中使用資源,主要通過資源的ID號(hào)對(duì)其進(jìn)行操作。資源文件中的每個(gè)資源都有ID,而資源ID是通過#define命令定義的一個(gè)整數(shù),可以在resource.h和StringTable中找到這些ID的定義。菜單的制作與編程從編程的角度看,菜單資源中最重要的是整個(gè)菜單的ID和各個(gè)菜單項(xiàng)的ID,ID是資源的唯一標(biāo)識(shí),在程序中通過資源的ID來完成對(duì)資源的操作。在MFC的消息映射中,有三個(gè)與菜單有關(guān)消息:WM_COMMAND / 點(diǎn)擊菜單項(xiàng)時(shí)產(chǎn)生UPDATE_COMMAND_UI子菜單下拉時(shí)產(chǎn)生,處理這個(gè)消息時(shí)一般對(duì)菜單本身進(jìn)行更新,例如使其變灰、 設(shè)置選中標(biāo)志等。WM_CONTEXTMENU點(diǎn)擊右鍵時(shí)產(chǎn)生,一般在該消息中的處理函數(shù)中建立彈出式菜單。圖標(biāo)資源的制作和使用圖標(biāo)的作用由兩個(gè),一是用于窗口左上角作為窗口標(biāo)志,二是在資源管理器中作為文件的標(biāo)志。為了適應(yīng) Windows系統(tǒng)不同的顯示方式,每個(gè)圖標(biāo)文件包含32X
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)年會(huì)場(chǎng)地租賃合同模板(版)
- 個(gè)人股權(quán)抵押借款合同協(xié)議
- 城市軌道交通維護(hù)勞務(wù)分包合同
- 江蘇省蘇州市虎丘教育集團(tuán)2025年數(shù)學(xué)五年級(jí)第二學(xué)期期末質(zhì)量檢測(cè)模擬試題含答案
- 上海浦東新區(qū)2024-2025學(xué)年數(shù)學(xué)四下期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 肉類采購合同范本
- 江蘇省寶應(yīng)縣山陽中學(xué)2025年初三3月第一次考試生物試題含解析
- 肇慶醫(yī)學(xué)高等??茖W(xué)?!顿Q(mào)易數(shù)據(jù)庫與分析工具》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東文化產(chǎn)業(yè)職業(yè)學(xué)院《會(huì)計(jì)職業(yè)道德》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘇州托普信息職業(yè)技術(shù)學(xué)院《中國(guó)現(xiàn)當(dāng)代文學(xué)與小學(xué)語文》2023-2024學(xué)年第二學(xué)期期末試卷
- 200道100以內(nèi)四個(gè)數(shù)字的加減法混合題目
- 光明乳業(yè)財(cái)務(wù)戰(zhàn)略研究
- 水電站斜井工程施工方案
- 第六單元實(shí)驗(yàn)活動(dòng)3創(chuàng)新實(shí)驗(yàn):二氧化碳的制取與性質(zhì)一體化實(shí)驗(yàn)說課-2024-2025學(xué)年九年級(jí)化學(xué)人教版上冊(cè)
- 工地會(huì)議室使用管理制度
- 3000道兩位數(shù)進(jìn)位退位加減法題1
- 2024年東南亞智能聯(lián)網(wǎng)電視(Connected TV)市場(chǎng)深度研究及預(yù)測(cè)報(bào)告
- 中西醫(yī)結(jié)合內(nèi)科學(xué)-主治復(fù)習(xí)
- 2022年版 義務(wù)教育《數(shù)學(xué)》課程標(biāo)準(zhǔn)
- 2025深圳市中考英語 語法填空 專項(xiàng)復(fù)習(xí)課件
- 《鐵路職業(yè)道德》課件-2.1鐵路職業(yè)道德的內(nèi)涵及規(guī)范
評(píng)論
0/150
提交評(píng)論