




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Visual C+ 開發(fā)環(huán)境為控件提供的自繪制功能使程序員能夠充分發(fā)揮比較漂亮的程序界面。所謂 AVI 按鈕是指每當鼠標從按鈕上經過時就的創(chuàng)造性來設計一段按鈕提示的AVI,在許多的程序以及三維動畫軟件中(如摩托英豪、Cool 3D 等)都廣泛的采用了這種 AVI 按鈕。它使得程序的用戶界面很具有動感,也使得我們的程序至少看上去更專業(yè),本實例借助 Visual C+強大的控件自繪制功能來實現(xiàn)這種 AVI 按鈕的原理及實現(xiàn)。一、實現(xiàn)方法為了實現(xiàn)能夠AVI流的動畫按鈕,還是需要利用控件的重載功能,這部分內容本書已經在實例:實現(xiàn) XP 風格的按鈕中介紹了,這里就不再贅述了,讀者可以參考該實例查閱相關內
2、容。本實例主要探討如何使用 MFC 的 CanimateCtrl 動畫類AVI 格式的流,流可以來自一個 AVI 文件,也可以來自。在合理地使用動畫控件,可以使程序的界面更加形象生動。MFC 的 CAnimateCtrl 類封裝了動畫控件,該類的 Create()成員函數(shù)負責創(chuàng)建動畫控件,其為:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );函數(shù)中的參數(shù) dwStyle 是如表一所示的控件風格的組合,參數(shù) rect 指定了控件的,pParentWnd 指向父窗口,nID 是控件的 ID。若創(chuàng)建
3、則函數(shù)返回 TRUE。風格 含義ACS_CENTER 使動畫片居于控件變。如果不指定該風格,則控件的,并使動畫片打開后控件窗口的會自動調整來適應動畫片的大小。和位置保持不ACS_TRANSPARENT 使動畫片的背景透明(不輸出動畫片的背景色)。ACS_AUTOPLAY 一旦打開動畫片后就一直重復。表一、動畫控件的風格除表中的風格外, 一般還要為動畫控件指定 WS_CHILD 、 WS_VISIBLE 和WS_BORDER 窗口風格。例如,要創(chuàng)建一個能自動的動畫控件,應該指定其風格為WS_CHILD|WS_VISIBLE|WS_BORDER|ACS_AUTOPLAY。CAnimateCtrl
4、類主要的成員函數(shù)包括:BOOL Open( LPCTSTR lpszFileName )、BOOLOpen( UINT nID ) 、BOOL Play( UINT nFrom, UINT nTo, UINT nRep ) 、BOOLSeek( UINo )、BOOL Stop( )、BOOL Close( )等。上述的 Open()函數(shù)從 AVI 文件或中打開流,如果參數(shù) lpszFileName 或 nID為 NULL,則系統(tǒng)將關閉以前打開的流。Play()函數(shù)用來選定的流,參數(shù)。nTonFrom 指定了的開始幀的索引,索引值必須小于 65536,若為 0 則從頭開始指定了結束幀的索引,它
5、的值必須小于 65536,若為-1 則表示到流的末尾。nRep是的重復次數(shù),若為-1 則無限重復。Seek()函數(shù)用來靜態(tài)地顯示流的某一幀。參數(shù) nTo 是幀的索引,其值必須小于 65536,若為 0 則顯示第一幀,若為-1 則顯示最后一幀,若則函數(shù)返回 TRUE。Stop()函數(shù)用來停止動畫片的。Close()函數(shù)用來關閉并從內存中清除FALSE。流。上述所有函數(shù)都是調用返回 TRUE,否則返回讀者朋友們在學習的過程中要注意,動畫控件并不能所有的 AVI 文件,只有滿足下列條件的 AVI 文件才能被:1)AVI 文件必須是無聲的,不能有聲道;2)AVI 文件必須是未壓縮的,或是用 RLE 算
6、法壓縮的;3)AVI 的調色板必須保持不變。另外,動畫控件最大的一個局限性在于它只能顯示系統(tǒng)調色板中缺省的顏色,因此如果用動畫控件來一個256 色的 AVI 文件,那么效果看起來就象一個 16 色的動畫一樣,很不理想??傊瑒赢嬁丶荒芤恍┖唵蔚?,顏色數(shù)較少的 AVI 動畫。如果要較滿意地256 色的 AVI文件,就要利用 MCI 接口,這部分內容請讀者朋友參閱有關資料。二、編程步驟1、啟動 Visual C+6.0,生成一個基于然后按下 Finish 按鈕來完成工程的創(chuàng)建;框的應用程序,取其項目名為 TestAviButton,2、使用 Class Wizard 菜單命令以 CButton
7、為基類創(chuàng)建 CAviButton 類,生成類的件 AviButton.h 和實現(xiàn)文件 AviButton.cpp,同時在類中重載 Create()、DrawItem()函數(shù)和 WM_MOUSEMOVE 的消息;3、打開工程中 ID 值為 IDD_TESTAVIBUTTON_DIALOG 的框進行編輯,該框的提示文本為將鼠標移至按鈕上:刪除取消按鈕,將確定按鈕的屬性 Styles 改為OwnerDraw ,并去掉其提示文本 確定;另外執(zhí)行 Insert | Resource 命令,在彈出的對話框中按下 Custom 按鈕,然后輸入AVI,向添加AVI格式的,然后選擇AVI 類型的文件向項目中添加
8、AVI格式的IDR_AVI;4、添加代碼,編譯運行程序,此時每當我們的鼠標經過按鈕時,一個漂亮的 AVI 按鈕就產生了。三、實現(xiàn)代碼/ AviButton.h : header file#if !defined(AFX_AVIBUTTON_H 5E20D4EF_864E_11D7_886E_F16C81CD642B IN CLUDED_)#defineAFX_AVIBUTTON_H 5E20D4EF_864E_11D7_886E_F16C81CD642B INCLUDED_ #if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000 class CA
9、viButton : public CButton/ Construction public:CAviButton(); public:UINT m_nAviID; CAnimateCtrl AnimateCtrl; BOOL bPlaying;void LoadAvi(UINT nAviID);void DrawButton(CDC* pDC, UINT nState, CRect rect);/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAviButton) public:virtual
10、 void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName,DWORDdwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);/AFX_VIRTUAL/ Implementation public:virtual CAviButton();/ Generated message map functions
11、protected:/AFX_MSG(CAviButton)afx_msg void OnMouseMove(UINT nFlags, CPoint point);/AFX_MSG DECLARE_MESSAGE_MAP();#endif/CAviButton.CPP 文件;#include stdafx.h #include TestAviButton.h #include AviButton.h #ifdef _DEBUG#define new DEBUG_NEW #undef THIS_FILEstatic char THIS_FILE = FILE ;#endifCAviButton:
12、CAviButton()m_nAviID = 0; bPlaying = FALSE;CAviButton:CAviButton()void CAviButton:LoadAvi(UINT nAviID)m_nAviID =nAviID;BEGIN_MESSAGE_MAP(CAviButton, CButton)/AFX_MSG_MAP(CAviButton) ON_WM_MOUSEMOVE()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CAviButton message handlersvoid CAviButton:DrawButton(CDC *pDC, UINT n
13、State, CRect rect)COLORREF upCol,downCol,edgeCol; edgeCol=RGB(0,0,0); /設置按鈕邊緣的初始化顏色; if (nState & ODS_SELECTED) = ODS_SELECTED)/設置按鈕被按下時按鈕的顏色upCol=RGB(0,0,0); edgeCol=RGB(128,128,128);downCol=RGB(0,0,0);else/設置按鈕正常時按鈕的顏色upCol=RGB(255,255,255); downCol=RGB(128,128,128);CPen* pOldPen = NULL; BOOL pen1
14、Created; CPen pen1;BOOL pen2Created; CPen pen2;if (pen1Created = pen1.CreatePen(PS_SOLID, 1, upCol) pOldPen = pDC-SelectObject( &pen1 );/畫左上邊緣pDC-MoveTo(1,rect.Height()-1); pDC-LineTo(1,1);pDC-LineTo(rect.Width()-1,1);pDC-MoveTo(0,rect.Height()-1);pDC-LineTo(0,0);pDC-LineTo(rect.Width()-1,0);if (pen
15、2Created = pen2.CreatePen(PS_SOLID, 1, downCol) pDC-SelectObject( &pen2 );if (pen1Created)pen1.DeleteObject(); pen1Created = FALSE;/畫右下邊緣pDC-MoveTo(rect.Width()-1,0);pDC-LineTo(rect.Width()-1,rect.Height()-1); pDC-LineTo(0,rect.Height()-1);pDC-MoveTo(rect.Width()-2,1);pDC-LineTo(rect.Width()-2,rect.
16、Height()-2); pDC-LineTo(0,rect.Height()-2);if (pen2Created)/刪除pen2畫筆對象pen2.DeleteObject(); pen2Created = FALSE;if (pen1Created = pen1.CreatePen(PS_SOLID, 1, edgeCol) pOldPen = pDC-SelectObject( &pen1 );if (pen1Created)pen1.DeleteObject(); pen1Created = FALSE;if (pOldPen != NULL)pDC-SelectObject( pOl
17、dPen );void CAviButton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)/ TODO: Add your code to draw the specified item CRect rect;GetClientRect(rect);if (!:IsWindow(AnimateCtrl)/在按鈕上生成一個動畫控件AnimateCtrl.Create(WS_CHILD |WS_VISIBLE,rect,this,0);/打開 avi 文件并顯示第一幀AnimateCtrl.Open(m_nAviID); AnimateCtrl.GetCl
18、ientRect(rect);CDC* pDC = CDC:FromHandle(lpDrawItemStruct-hDC); UINT nState = lpDrawItemStruct-itemState;CRect buttonRect; GetClientRect(buttonRect);/繪制按鈕DrawButton(pDC, nState, buttonRect);BOOL CAviButton:Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORDdwStyle, const RECT& rect, CWnd* pP
19、arentWnd, UINT nID, CCreateContext* pContext)/ TODO: Add your specialized code here and/or call the base class return CWnd:Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);void CAviButton:OnMouseMove(UINT nFlags, CPoint point)/ TODO: Add your message handler code here
20、and/or call default ClientToScreen(&point);CRect rcWindow;GetWindowRect(rcWindow);/鼠標是否經過按鈕BOOL bNewMouseOverButton = rcWindow.PtInRect(point); if (bNewMouseOverButton & IsWindowEnabled() )if (:IsWindow(AnimateCtrl) & !bPlaying)AnimateCtrl.Play(0,-1,1); bPlaying = TRUE; SetCapture();elsebPlaying = F
21、ALSE; ReleaseCapture();CButton:OnMouseMove(nFlags, point);/BOOL CTestAviButtonDlg:OnInitDialog()CDialog:OnInitDialog();/此處代碼省略; m_AviButton.LoadAvi(IDR_AVI);return TRUE; / return TRUE unless you set the focus to a control四、小結通過 CAnimateCtrl 類和按鈕控件的自畫功能的結合,本實例實現(xiàn)了動畫按鈕,如果該類和工具條、狀態(tài)條等控件結合,還可以實現(xiàn)在上述控件上動畫流的
22、效果。用 VisualC+設計屏幕抓圖程序(加入日期:2006-9-9)【收藏文章】【對此文評論】【保存文章至硬盤】【打印文章】【字體:大 中 小】在 Windows 操作系統(tǒng)中,當用戶按下PrintScreen按鈕后,Windows 自動將當前屏幕的圖像拷貝到系統(tǒng)剪貼板中,這時可以通過畫筆這個小程序將剪貼板中的內容保存成圖像文件,可以看出,如果需要將當前屏幕保存下來還是比較麻煩的,能否可以 編寫一個應用程序,自動將當前屏幕的內容保存到一個圖像文件中去呢?這個是肯定的,本實例應用程序就是利用通用的熱鍵管理 DLL 庫實現(xiàn)的熱鍵功能,在收到熱鍵通知后截取屏幕的內容并保存到 bmp 文件中。例如我
23、們設置圖片保存路徑為 c:,熱鍵為 F9 + Control,然后按 Change 按鈕設置好熱鍵,那么當我們按下 CTRL+F9 后,當前界面將以 BMP 圖像文件的格式被保存在 C:目錄下。一、實現(xiàn)方法熱鍵管理 DLL 實際上是一個鍵盤鉤子,由它來監(jiān)視系統(tǒng)的鍵盤。如果有和程序登記符合的按鍵組合就通知該程序的窗口。為了應用方便,本實例把它做成了一個標準的管理庫來為其它的程序通過熱鍵服務,它有兩個輸出函數(shù): AddHotkey()和 DeleteHotkey(),程序只需要調用這兩個函數(shù)就可以了,如果編譯之后不用改變熱鍵,則只需要 AddHotkey 就可以了。DLL 中的所有的全局變量都放在
24、一個共享,定義如下:#pragma data_seg(shareddata) HHOOK hHook =NULL; /鉤子句柄UINT nHookCount =0; /掛接的程序數(shù)目static UCHAR HotKeyMAX_KEY = 0; /熱鍵虛擬鍵碼static UCHAR HotKeyMaskMAX_KEY = 0; /組合掩碼, control=4,alt=2,shift=1static hotkey static staticHWND hCallWndMAX_KEY = 0; /window handle associated withint KeyCount =0;UCHAR
25、 MaskBits =0; /00000 Ctrl=4 & Alt=2 & Shift=1#pragma data_seg()關于共享段,有幾點重要的說明:一是必須在選項里指定該段為共享:法是在 project-settings-link-object/library 中加上/section:shareddata,rws;第二種方法是在 def 文件的 sections 里加上一句shareddata read write shared;第三種指定共享段的方法在加上一句#pragma comment(linker,section:shareddata,rws)。二是所有的變量必須初始化,否則把
26、它放到普通數(shù)據段。三是如果不初始化變量,需要在段外用 declspec(allocate(shareddata) 變量類型 變量名的方式定義。DLL 中的兩個輸出函數(shù)分別用來添加/刪除熱鍵,函數(shù)代碼如下:BOOL declspec(dllexport) stdcall AddHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)BOOL bAdded=FALSE;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=0)hCallWndindex=hWnd; HotKeyindex=cKey; HotKeyMask
27、index=cMask; bAdded=TRUE;KeyCount+; break;return bAdded;/刪除熱鍵BOOL declspec(dllexport) stdcall DeleteHotkey(HWND UCHAR cKey,UCHAR cMask)BOOL bRemoved=FALSE;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=hWnd)hWnd,if(HotKeyindex=cKey&HotKeyMaskindex=cMask) hCallWndindex=NULL;HotKeyindex=0; HotK
28、eyMaskindex=0; bRemoved=TRUE; KeyCount-;break;return bRemoved;DLL 中的鉤子函數(shù)如下:LRESULT CALLBACK KeyboardProc(intBOOL bProcessed=FALSE; if(HC_ACTION=nCode)nCode,WPARAM wParam,LPARAMlParam)if(lParam&0xc0000000)=0xc0000000)/ 有鍵松開switch(wParam)case VK_:MaskBits&=ALTBIT; break;case VK_CONTROL: MaskBits&=CTRL
29、BIT; break;case VK_SHIFT: MaskBits&=SHIFTBIT; break;default: /judge the key and send message break;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL)continue;if(IsWindow(hCallWndindex)&(HotKeyindex=wParam)&(HotKeyMaskin dex=MaskBits)SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYUP); bPro
30、cessed=TRUE;else if(lParam&0xc000ffff)=1) /有鍵按下switch(wParam)case VK_:MaskBits|=ALTBIT; break;case VK_CONTROL: MaskBits|=CTRLBIT; break;case VK_SHIFT: MaskBits|=SHIFTBIT; break;default: /judge the key and send message break;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL)continue;if(IsWin
31、dow(hCallWndindex)&(HotKeyindex=wParam)&(HotKeyMaskin dex=MaskBits)SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYDOWN); bProcessed=TRUE;if(!bProcessed) /一般按鍵,為監(jiān)視鍵盤的程序留出余地for(int index=0;index 1000#pragma once#endif / _MSC_VER 1000 #ifndef AFXWIN_H #error include stdafx.h before including this fil
32、e for PCH #endif#include resource.h / main symbols class CHookApp : public CWinApppublic:CHookApp();/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CHookApp) public:virtual BOOL InitInstance(); virtual int ExitInstance();/AFX_VIRTUAL/AFX_MSG(CHookApp)/ NOTE - the ClassWizar
33、d will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code !/AFX_MSG DECLARE_MESSAGE_MAP();LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);BOOL declspec(dllexport) stdcall AddHotkey(HWND,UCHAR key,UCHAR mask);BOOL declspec(dllexport
34、) stdcall DeleteHotkey(HWND,UCHAR key,UCHAR mask);BOOL InitHotkey(); BOOL UnInit();#endif/ Hook.cpp : Defines the initialization routines for the DLL. #include stdafx.h#include hook.h#include #ifdef _DEBUG#define new DEBUG_NEW #undef THIS_FILEstatic char THIS_FILE = FILE ; #endif#define #define #def
35、ine #define #pragmaMAX_KEY 100 CTRLBIT 0x04 ALTBIT 0x02 SHIFTBIT 0x01data_seg(shareddata)HHOOK hHook =NULL;UINT nHookCount =0;static UCHAR static UCHAR VK_CONTRL orHotKeyMAX_KEY = 0; /hotkeyHotKeyMaskMAX_KEY = 0; /flag for hotkey, value is VK_NEMU or VK_SHIFTstatic static staticHWND hCallWndMAX_KEY
36、= 0; /window associated with hotkey int KeyCount =0;UCHAR MaskBits =0; /00000 Ctrl Alt Shift#pragma data_seg() HINSTANCE hins;void VerifyWindow(); BEGIN_MESSAGE_MAP(CHookApp, CWinApp)/AFX_MSG_MAP(CHookApp)/ NOTE - the ClassWizard will/ DO NOT EDIT what you see in/AFX_MSG_MAP END_MESSAGE_MAP()add and
37、 remove mapping macros here. these blocks of generated code!CHookApp:CHookApp()/ TODO: add construction codehere,/ Place all significant initialization in InitInstanceCHookApp theApp;LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)BOOL bProcessed=FALSE; if(HC_ACTION=nCode)if(lPar
38、am&0xc0000000)=0xc0000000)/ Key up switch(wParam)case VK_:MaskBits&=ALTBIT; break;case VK_CONTROL: MaskBits&=CTRLBIT; break;case VK_SHIFT: MaskBits&=SHIFTBIT; break;default: /judge the key and send message break;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL)continue;if(IsWindow(hCallWnd
39、index)&(HotKeyindex=wParam)&(HotKeyMaskin dex=MaskBits)SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYUP); bProcessed=TRUE;else if(lParam&0xc000ffff)=1) switch(wParam)/Key downcase VK_:MaskBits|=ALTBIT; break;case VK_CONTROL: MaskBits|=CTRLBIT; break;case VK_SHIFT: MaskBits|=SHIFTBIT; break;defaul
40、t: /judge the key and break;send messagefor(int index=0;indexMAX_KEY;index+)if(hCallWndindex=NULL) continue;if(IsWindow(hCallWndindex)&(HotKeyindex=wParam)&(HotKeyMaskin dex=MaskBits)SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYDOWN); bProcessed=TRUE;if(!bProcessed)for(int index=0;index1) nHookC
41、ount-; return TRUE;BOOL unhooked = UnhookWindowsHookEx(hHook); if(unhooked=TRUE)nHookCount=0; hHook=NULL;return unhooked;BOOL declspec(dllexport) stdcall AddHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)BOOL bAdded=FALSE;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=0)hCallWndindex=hWnd; HotKeyind
42、ex=cKey; HotKeyMaskindex=cMask; bAdded=TRUE;KeyCount+; break;return bAdded;BOOL declspec(dllexport) stdcall DeleteHotkey(HWND cKey,UCHAR cMask)BOOL bRemoved=FALSE;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=hWnd)hWnd,UCHARif(HotKeyindex=cKey&HotKeyMaskindex=cMask) hCallWndindex=NULL;HotKey
43、index=0; HotKeyMaskindex=0; bRemoved=TRUE; KeyCount-;break;return bRemoved;void VerifyWindow()for(int i=0;i 1000#pragma once#endif / _MSC_VER 1000class CCaptureDlg : public CDialog/ Construction public:BOOL BOOL BOOLbTray; bRegistered; RegisterHotkey();UCHAR cKey; UCHAR cMask;void void UINTvoidDelet
44、eIcon(); AddIcon(); nCount; SaveBmp();CCaptureDlg(CWnd* pParent = NULL); / standard constructor/ Dialog Data/AFX_DATA(CCaptureDlg)enum IDD = IDD_CAPTURE_DIALOG ;CComboBox m_Key;BOOL BOOL BOOLm_bControl; m_bAlt; m_bShift;CString m_Path; CString m_Number;/AFX_DATA/ ClassWizard generated virtual functi
45、on overrides/AFX_VIRTUAL(CCaptureDlg) public:virtual BOOL PreTranslateMessage(MSG* pMsg); protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV supportvirtual LRESULT WindowProc(UINT message, WPARAM wParam, lParam);/AFX_VIRTUAL/ Implementation protected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CCaptureDlg)LPARAMvirtual afx_msg afx_msg afx_msg virtual afx_msg afx_msg afx_msgBOOLvoid voidOnInitDialog();OnSysCommand(UINT nID, LPARAM lParam);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年休閑農業(yè)與鄉(xiāng)村旅游融合發(fā)展的鄉(xiāng)村旅游產業(yè)創(chuàng)新體系研究報告
- 國際化背景下教育政策調整策略
- 教育心理學在醫(yī)療行業(yè)的應用前景分析
- 江西省宜春市贛西外國語學校2024~2025學年高一下學期6月期末質量檢測物理試卷(含答案)
- 教育技術革新智能化教學環(huán)境對教育質量的影響
- 2025年山東省日照市曲阜師范大學附屬實驗中學中考三?;瘜W試卷(含答案)
- 在線教育平臺的全球化推廣與市場接受度
- 商業(yè)思維在教育中的運用創(chuàng)新教育商業(yè)模式
- 敏感肌溫和潔面乳行業(yè)深度調研及發(fā)展項目商業(yè)計劃書
- 二極管-三極管參數(shù)數(shù)據庫管理系統(tǒng)創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 2022年《基礎會計》第八版ppt課件(完整版)
- 尊法、學法、守法、用法分析
- (完整版)鋼筋加工棚驗算
- 動物生物化學(全套577PPT課件)
- 十進制轉二進制(說課稿)
- 新能源汽車私人領域購車補貼確認表
- 黑龍江公共場所衛(wèi)生許可申請表
- 外墻、屋面節(jié)能保溫旁站監(jiān)理記錄表(共3頁)
- 美的審廠資料清單
- 園林綠化單位(子單位)工程質量竣工驗收報告
- 人教版八年級美術下冊紋樣與生活第二課時設計紋樣
評論
0/150
提交評論