




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 1 南京工程學(xué)院 多媒體編程基礎(chǔ)課程多媒體編程基礎(chǔ)課程 綜合作業(yè)說明書綜合作業(yè)說明書 題題 目目 多媒體綜合設(shè)計(jì)多媒體綜合設(shè)計(jì) 班班 級級 K 軟件測試 101 學(xué)學(xué) 生生 姓姓 名名 賀賀 穩(wěn)穩(wěn) 學(xué)學(xué) 號號 240101825 240101825 2012013 3 年年 6 6 月月 2222 日日 2 一一程序功能與設(shè)計(jì)思路程序功能與設(shè)計(jì)思路 (必須含有文字處理文字處理、繪圖繪圖、圖像圖像、音頻視頻音頻視頻四部分內(nèi)容各 3 種以上功能,界面及應(yīng)用方法自己根據(jù)軟件的特色綜合考慮, 每位同學(xué)必須自己設(shè)計(jì)一個動畫標(biāo)動畫標(biāo)志志,放在【幫助】對話框中,或者窗口界面上) 1 1、主界面主界面 1.
2、1 主界面實(shí)現(xiàn)功能說明如下: 菜單項(xiàng)包括文字處理、繪圖、圖像、音頻視頻,幫助,點(diǎn)擊進(jìn)入各個功能界面 動畫顯示小蛇吐信 1.2 界面效果顯示: 3 1.3 主界面設(shè)計(jì)思路: 首先創(chuàng)建一個基于對話框的對話框的 MFC 應(yīng)用程序, 然后在資源里添加五個菜單欄和四個對話框并將其對應(yīng)連接起來,在主對話框菜單欄中添加四個菜單選項(xiàng)與四個子對話框鏈接,以實(shí)現(xiàn)點(diǎn)擊菜單項(xiàng)跳出對應(yīng)的對話框。 其功能結(jié)構(gòu)如下: 主界面 文字處理 繪圖 幫助 音頻視頻播放 圖像處理 4 2 2、文字處理文字處理 2.1 文字實(shí)現(xiàn)功能說明如下: 菜單項(xiàng)包括文字漸變、文字旋轉(zhuǎn)、顏色背景顏色顯示、文字鏤空,點(diǎn)擊菜單項(xiàng)將顯示各個功能。 2.2
3、 界面效果顯示: 5 6 2.3 文字處理功能結(jié)構(gòu)圖: 3 3、繪圖工具、繪圖工具 3.1 繪圖工具實(shí)現(xiàn)功能如下: 畫圓 畫橢圓 畫矩形 文字處理 文字旋轉(zhuǎn) 傾斜文字 顏色漸變 鏤空文字 7 3.2 功能界面效果顯示 8 4 4、圖像處理圖像處理 4.1 圖像處理實(shí)現(xiàn)功能如下: 從本地磁盤打開文件 圖片去色 浮雕效果 顏色拾取 銳化效果 顏色取反 4.2 功能界面效果顯示 9 .3 圖像處理功能結(jié)構(gòu)圖: 圖片處理 打開 銳化 鏤空 取反 去色 10 5 5、音頻視頻播放音頻視頻播放 5.1 音頻視頻功能實(shí)現(xiàn): 從本地磁盤添加音頻視頻文件 雙擊播放音頻視頻文件 點(diǎn)擊播放按鈕播放文件 點(diǎn)擊上一個、
4、下一個選擇當(dāng)前文件的上一個、下一個文件 5.2 功能界面顯示 11 5.3 音頻視頻播放功能結(jié)構(gòu)圖: 二二相關(guān)原理知識介紹相關(guān)原理知識介紹 1輸出指定字體輸出指定字體 定義系統(tǒng)以外的字體,可以調(diào)用函數(shù)定義系統(tǒng)以外的字體,可以調(diào)用函數(shù) GreateFont 自行創(chuàng)建自行創(chuàng)建 音頻視頻播放音頻視頻播放 添加文件添加文件 控制控制 播放播放 上一個上一個 下一個下一個 12 HFont=CreateFont (int nHeight, /字體高度,0 采用系統(tǒng)缺省值,使用邏輯單位 int nWidth, /字體寬度,取 0 則由系統(tǒng)根據(jù)高寬比取最佳值 int nEscapement, /每行文字相對
5、于頁底的角度,單位為 0.1 度 int nOrienation, /每個文字相對于頁底的角度,單位為 0.1 度 DWORD nWeight, /字體粗細(xì)度,范圍為 01000 DWORD Dwltalic, /如果要求字體傾斜,則取非零 DWORD dwUnderline,/如果要求下劃線,則取非零 DWORD dwStrikeout, /如果要求中劃線,則取非零 DWORD dwCharset, /字體所屬字符集 DWORD dwOutputPrecision,/輸出精度,一般取缺省值 OUT_DEFAULT_PRECIS DWORD dwClipPrecision, /剪裁精度,常取缺
6、省值 CLIP_DEFAULT_PRECIS DWORD dwQuality, /輸出質(zhì)量,一般取缺省值 DEFAULT_QUALITY DWORD dwPitchAndFamily, /字體名 ) 2.文本輸出文本輸出 常用的文本輸出函數(shù) TextOut 原型如下: BOOL TextOut ( HDC hdc, int X, int Y, /X, Y 為用戶區(qū)中字符串的起始坐標(biāo) LPCTSTR lpstring, /lpstring 為顯示的字符串 int nCount /nCount 為字符串中的字節(jié)數(shù) ); 2 2、簡單繪圖工具、簡單繪圖工具 2.1 繪圖的基本方法 實(shí)現(xiàn)簡單圖形的繪制
7、,繪圖功能中,有繪制直線、矩形、橢圓、涂鴉等。用到的方法如下: CPoint MoveTo(int x,int y); /直線起點(diǎn) CPoint LineTo(int x,int y); /直線終點(diǎn) BOOL Rectangle(int x1,int y1,int x2,int y2); /繪制矩形 BOOL Ellipse(int x1,int y1,int x2,int y2); /繪制橢圓 涂鴉部分,以鼠標(biāo)移動的軌跡畫線。同樣要用到 MouseMove()函數(shù)。使起點(diǎn)為鼠標(biāo)前一個位置,終點(diǎn)為鼠標(biāo)當(dāng)前位置,以畫直線的方式完成。 對于線型、線寬、顏色的設(shè)置,通過使用顏色通用對話框完成。 2.
8、2 繪圖時需要用到的設(shè)備環(huán)境類介紹 設(shè)備環(huán)境類 CDC 提供了繪制和打印的全部函數(shù)。為了能讓用戶使用一些特殊的設(shè)備環(huán)境,CDC 還派生了 CPaintDC、CClientDC、CWindowDC 和 CMetaFileDC類。 (1)CPaintDC 比較特殊,它的構(gòu)造函數(shù)和析構(gòu)函數(shù)都是針對 OnPaint 進(jìn)行的,但用戶一旦獲得相關(guān)的 CDC 指針,就可以將它當(dāng)成任何設(shè)備環(huán)境(包括屏幕、打印機(jī))指針來使用。CPaintDC 類的構(gòu)造函數(shù)會自動調(diào)用 BeginPaint,而它的析構(gòu)函數(shù)則會自動調(diào)用 EndPaint。 (2)CClientDC 只能在窗口的客戶區(qū)(不包括邊框、標(biāo)題欄、菜單欄以及
9、狀 13 態(tài)欄)中進(jìn)行繪圖,點(diǎn)(0,0)通常指的是客戶區(qū)的左上角。而 CWindowDC 允許在窗口的任意位置中進(jìn)行繪圖,點(diǎn)(0,0)指整個窗口的左上角。CWindowDC 和CClientDC 構(gòu)造函數(shù)分別調(diào)用 GetWindowDC 和 GetDC,但它們的析構(gòu)函數(shù)都是調(diào)用 ReleaseDC 函數(shù) 3 3 圖像圖像處理處理的基本方法的基本方法 顯示圖像的方法并不復(fù)雜,圖像已經(jīng)繪制好保存在文件中,需要做的工作就是有效加載圖像文件并讓它顯示出來,這里我們討論幾種最常用的方法。 LoadImageLoadImage 加載圖像加載圖像 該函數(shù)裝載圖標(biāo),光標(biāo),或位圖。 函數(shù)原型:HANDLE Lo
10、adImage( HINSTANCE hinst, /包含圖像的實(shí)例句柄,可以為 NULL LPCTSTR lpszName,/圖像的資源名稱,本機(jī)加載,完整路徑 UINT uType, /圖像類型 int cxDesired, /加載的位圖,參數(shù)為 0 int cyDesired, /加載的位圖,參數(shù)為 0 UINT fuLoad );/返回加載的圖像句柄 圖像文件只支持 bmp 類型的。 獲取鼠標(biāo)位置的顏色值 VC 提供了三個宏,用于獲取某一顏色的紅、綠、藍(lán)三基色。 1)GetRValue 宏 該宏用于獲取指定顏色的紅顏色值 2)GetGValue 宏 該宏用于獲取指定顏色的綠顏色值 3)
11、GetBValue 宏 該宏用于獲取指定顏色的藍(lán)顏色值 BYTE GetRValue(DWORD rgb ); rgb 標(biāo)識一個顏色值。 返回值:指定顏色的紅色值。 BYTE GetGValue(DWORD rgb ); rgb 標(biāo)識一個顏色值。 返回值:指定顏色的綠色值。 BYTE GetBValue(WORD rgb ); 14 rgb 標(biāo)識一個顏色值。 返回值:指定顏色的藍(lán)色值。 提取顏色 GetPixel 方法 該方法用于獲取某一點(diǎn)的顏色值。 語法: COLORREF GetPixel( int x, int y ) const; COLORREF GetPixel( POINT po
12、int ) const; 參數(shù): x、y、point 標(biāo)識坐標(biāo)點(diǎn)。 返回值:坐標(biāo)點(diǎn)的顏色值。 SetPixel 方法 該方法用于設(shè)置某一點(diǎn)的顏色值。 語法: COLORREF SetPixel( int x, int y, COLORREF crColor ); COLORREF SetPixel( POINT point, COLORREF crColor ); 參數(shù) x、y、point 標(biāo)識坐標(biāo)點(diǎn)。 crColor 標(biāo)識設(shè)置的顏色值。 返回值:坐標(biāo)點(diǎn)實(shí)際顯示的顏色值。 4 4 音頻視頻音頻視頻 播放 Wav 文件 用 mciSendCommand 函數(shù) 語法如下: MCIERROR mci
13、SendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD_PTR dwParam); 參數(shù)說明: IDDevice:表示接收命令消息的 MCI 設(shè)備標(biāo)識符。 uMsg:表示命令消息, 使用 mciSendCommand 函數(shù),需要 15 引用 Mmsystem.h 頭文 件,鏈接 Winmm.lib 庫文件。 #include Mmsystem.h /應(yīng)用頭文件 #pragma comment (lib,“Winmm.lib”) /引用庫文 定義一個 CPlayWave 類,用于打開波形設(shè)備、 播放 wav 文件、
14、關(guān)閉波形設(shè)備。 向視圖類中添加一個 CPlayWave 成員。 CPlayWave wave; 向視圖類中添加一個按鈕,處理按鈕的單擊事件。 /定義一個 CPlayWave 成員 void CPlayWaveView:OnBtPlay() wave.Stop(); /停止播放 wave.Play(m_hWnd, Windows XP 登錄音.wav); /開始播放 wav文件 使用 MCIWndCreate 函數(shù)播放 avi 文件 在 PlayAvi Dlg.app 中引用 vfw.h 頭文件并鏈接 Vfw32.lib 庫文件。 #include Vfw.h /引用頭文件 #pragma co
15、mment (lib,“Vfw32.lib”) /鏈接庫文件 處理“OK”按鈕的單擊事件,彈出文件打開對話框讓用戶選擇一個 avi 文件,并進(jìn)行播放。 void CPlayAviDlg:OnOK() CFileDialog flDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT, AVI 文件|*.avi|,this); /定義文件打開對話框 if (flDlg.DoModal()=IDOK) /判斷用戶是否單擊 OK 按鈕 MCIWndDestroy(m_hAviWnd); /先釋放窗口 m_hAviWnd = MCIWnd
16、Create(m_hWnd,NULL, 16 MCIWNDF_SHOWMODE|MCIWNDF_NOTIFYMODE, flDlg.GetPathName(); /創(chuàng)建 MCI 窗口 MCIWndPlay(m_hAviWnd); /播放文件 /此時已可以播放 在調(diào)用 MCIWndCreate 函數(shù)前,如果之前已經(jīng)創(chuàng)建了一個視頻窗口,則首先需要調(diào)用MCIWndDestroy 函數(shù)釋放視頻窗口。 在對話框關(guān)閉時釋放 MCI 窗口。 void CPlayAviDlg:OnCancel() MCIWndDestroy(m_hAviWnd); /釋放 MCI 窗口 CDialog:OnCancel();
17、 向?qū)υ捒蛑刑砑?OnNotifyMode 消息方法, 當(dāng)設(shè)備的模式發(fā)生改變時調(diào)用該方法。 (手動添加) LRESULT CPlayAviDlg:OnNotifyMode(WPARAM wparam, LPARAM lparam) long code = (long)lparam; /獲取通知代碼 if (code = MCI_MODE_STOP) /判斷 avi 文件是否播放完畢 MCIWndClose(m_hAviWnd); /關(guān)閉 MCI 窗口 return 0; 在對話框的消息映射部分添加消息映射宏。 ON_MESSAGE(MCIWNDM_NOTIFYMODE,OnNotifyMode
18、) 17 三、三、設(shè)計(jì)方法及步驟設(shè)計(jì)方法及步驟 1、主對話框 首先啟動 VS2008 創(chuàng)建一個基于對話框的應(yīng)用程序,然后在資源中添加四個菜單欄,并將住對話框與主對話框連接起來,在菜單欄里添加文字處理、簡單繪圖、圖像處理、音頻視頻播放,幫助五個菜單項(xiàng)。接著添加四個對話框,標(biāo)題分別改為文字處理、簡單繪圖、圖像處理、音頻視頻播放,并將其與對應(yīng)的菜單項(xiàng)連接起來。然后將給四個對話框添加對話框類,給主菜單的四個子菜單添加消息響應(yīng)函數(shù),并調(diào)用對應(yīng)的對話框,將四個子對話框設(shè)為無模式對話框,使點(diǎn)擊主菜單的四個子菜單彈出對應(yīng)的對話框。 對話框的 ID 號及對應(yīng)的菜單欄如下: 對話框的 ID 號及對應(yīng)的菜單欄如下:
19、 1.1增加背景圖片: 首先進(jìn)入資源視圖,添加一個位圖資源如下圖所示,點(diǎn)擊導(dǎo)入;然后給C綜合3Dlg 類添加消息映射函數(shù)BOOL CWordDlg:OnEraseBkgnd(CDC* pDC),添加以下代碼以實(shí)現(xiàn)根據(jù)窗口大小按比例顯示添加的背景圖片。 ID 標(biāo)題 MENU 的 ID IDD_DIALOG1IDD_DIALOG1 文字處理 IDR_32771 IDD_DIALOGIDD_DIALOG2 2 簡單繪圖 IDR_32772 IDD_DIALOGIDD_DIALOG3 3 圖像處理 IDR_32773 IDD_DIALOGIDD_DIALOG4 4 音頻視頻播放 IDR_32774 幫
20、助 18 代碼如下: BOOL CWordDlg:OnEraseBkgnd(CDC* pDC) / TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值 CBitmap bitmap;/構(gòu)建位圖對象 bitmap.LoadBitmapA(IDB_BITMAP5);/加載位圖 CDC dcCompatible;/創(chuàng)建于當(dāng)前DC兼容的DC dcCompatible.CreateCompatibleDC(pDC);/ BITMAP bmp; bitmap.GetBitmap(&bmp); dcCompatible.SelectObject(&bitmap); CRect rect;
21、GetClientRect(&rect); /pDC-BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY); pDC-StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); return TRUE; 1.2連接四個對話框: 給對話框添加類:選中對話框點(diǎn)擊右鍵,選擇添加類,然后進(jìn)入如下對話框,填入相應(yīng)的類名,點(diǎn)擊“完成” 。 19 添加代碼如下: 首先添加四個對話框
22、類的頭文件 #include DrawDlg.h #include ImagDlg.h #include WmpDlg.h #include#include WordDlg.hWordDlg.h 然后給主對話框的子菜單添加對應(yīng)的消息響應(yīng)函數(shù),代碼如下: void C綜?合?3Dlg:On32771() / TODO: 在此?加命令?處鋦理?程序代洙?碼? CWordDlg *pDlg=new CWordDlg; pDlg-Create(IDD_DIALOG1); pDlg-ShowWindow(SW_NORMAL); void C綜?合?3Dlg:On32772() / TODO: 在此?加命
23、令?處鋦理?程序代洙?碼? / TODO: 在此?加命令?處鋦理?程序代洙?碼? DrawDlg *pDlg=new DrawDlg; 20 pDlg-Create(IDD_DIALOG2); pDlg-ShowWindow(SW_NORMAL); void C綜?合?3Dlg:On32773() / TODO: 在此?加命令?處鋦理?程序代洙?碼? CImagDlg *pDlg=new CImagDlg; pDlg-Create(IDD_DIALOG3); pDlg-ShowWindow(SW_NORMAL); void C綜?合?3Dlg:On32774() / TODO: 在此?加命令?
24、處鋦理?程序代洙?碼? CWmpDlg *pDlg=new CWmpDlg; pDlg-Create(IDD_DIALOG4); pDlg-ShowWindow(SW_NORMAL); 2.2.文字處理文字處理 2.12.1 增加背景:增加背景: 首先進(jìn)入資源視圖,添加一個位圖資源如下圖所示,點(diǎn)擊導(dǎo)入;然后給CWordDlg類添加消息映射函數(shù)BOOL CWordDlg:OnEraseBkgnd(CDC* pDC),添加以下代碼以實(shí)現(xiàn)根據(jù)窗口大小按比例顯示添加的背景圖片。 代碼如下: 21 BOOL CWordDlg:OnEraseBkgnd(CDC* pDC) / TODO: 在此添加消息處理
25、程序代碼和/或調(diào)用默認(rèn)值 CBitmap bitmap;/構(gòu)建位圖對象 bitmap.LoadBitmapA(IDB_BITMAP5);/加載位圖 CDC dcCompatible;/創(chuàng)建于當(dāng)前DC兼容的DC dcCompatible.CreateCompatibleDC(pDC);/ BITMAP bmp; bitmap.GetBitmap(&bmp); dcCompatible.SelectObject(&bitmap); CRect rect; GetClientRect(&rect); /pDC-BitBlt(0,0,rect.Width(),rect.Heig
26、ht(),&dcCompatible,0,0,SRCCOPY); pDC-StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); return TRUE; 2 2 按鈕事件響應(yīng) 然后添加四個按鈕,修改其對應(yīng)的 ID 值,如下: 然后給各個菜單項(xiàng)添加對應(yīng)的消息映射函數(shù),代碼如下: void CWordDlg:OnBnClickedButton1() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? m=3; Invalidate();
27、void CWordDlg:OnBnClickedButton2() 名稱名稱 ID 文字漸變 IDC_BUTTONIDC_BUTTON1 1 文字鏤空 IDC_BUTTONIDC_BUTTON2 2 顏色旋轉(zhuǎn) IDC_BUTTONIDC_BUTTON3 3 文字背景顏色 IDC_BUTTONIDC_BUTTON4 4 22 / TODO: 在此?加控?件t通?知a處鋦理?程序代洙?碼? m=4; Invalidate(); void CWordDlg:OnBnClickedButton3() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? m=0; Invalidate();
28、void CWordDlg:OnBnClickedButton4() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? m=2; Invalidate(); void CWordDlg:OnPaint() CPaintDC dc(this); / device context for painting / TODO: 在此?加消?息處鋦理?程序代洙?碼? / 不?為a繪?圖?消?息調(diào)獺?用? CDialogEx:OnPaint() CDC *pDC=GetDC(); switch(m) case 0: CFont mFont; VERIFY(mFont.CreateFont(45,
29、30,0,0,FW_HEAVY,TRUE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T(宋?體?); CPen pen(PS_SOLID,2,RGB(255,0,0); pDC-SelectObject(&pen); pDC-BeginPath(); 23 CFont *pOldFont=pDC-SelectObject(&mFont); pDC-TextOut(100,100,_T(南?京?工程學(xué)院o); pDC-End
30、Path(); pDC-StrokePath(); mFont.DeleteObject(); pDC-SelectObject(pOldFont); break; case 1: /CString str10= _T(多),_T(多),_T(多),_T(多),_T(多),_T(多),_T(多),_T(多); pDC-SelectStockObject(NULL_BRUSH); pDC-SetBkMode(TRANSPARENT); CFont font; CBrush brush; CPen pen; if(bdraw) for(int i=0;iSelectObject(&font
31、); pDC-SetTextColor(coli); pDC-TextOut(posxi,100,_T(南?京?工程學(xué)院o); pDC-SelectObject(oldfont); font.Detach(); break; case 2: SetTimer(0,300,NULL); CFont font; font.CreatePointFont(500,_T(黑體?),pDC); CFont* pOldFont=pDC-SelectObject(&font); /創(chuàng)洹?建輸?出?字?符?串?. CString str (_T (南?京?工程學(xué)院o!); 24 /設(shè)?置?字?體?顏?
32、色? pDC-SetTextColor (RGB(m_nRed,m_nGreen,m_nBlue); /輸?出?字?體? pDC-TextOut(50,100,str); pDC-SelectObject(pOldFont); ReleaseDC(pDC); break; case 3: CString sTemp; sTemp=綜?合?作痢?業(yè)唉?說明書酣?,?請?不?要癮找我要癮!?謝?謝?!?; CWnd* pWnd1; pWnd1 = GetDlgItem(IDR_MENU2);/返?回?控?件t句?柄括? CClientDC dc1(pWnd1); dc1.TextOutW(50,1
33、50,sTemp);/在static控?件t上?輸?出?文?字? CClientDC dc2(this); dc2.SetBkColor(RGB(255,0,255); dc2.SetTextColor(RGB(0,0,255); dc2.TextOutW(150,150,sTemp); break; case 4: CDC*pDC=GetDC(); CFont m_font; pDC-SetBkMode(TRANSPARENT); CRect m_rect; GetClientRect(m_rect); pDC-FillRect(m_rect,NULL); pDC-SetViewportOr
34、g(m_rect.Width()/2,m_rect.Height()/2); for(int i=1;iSelectObject(&m_font); pDC-SetTextColor(RGB(255-i,i*255,i+50); pDC-TextOut(0,0,_T(abcdefg); m_font.DeleteObject(); break; void CWordDlg:OnTimer(UINT_PTR nIDEvent) / TODO: 在此?加消?息處鋦理?程序代洙?碼?和/或調(diào)獺?用?默?認(rèn)?值 if(m=2) if(m_nRed=25) m_nGreen -= 20; els
35、e if(m_nRed = 0) m_nGreen = 255; else m_nGreen = 0; if(m_nBlue=235) m_nBlue += 20; else if(m_nBlue = 255) m_nBlue = 0; else m_nBlue = 255; Invalidate();/重?畫-文?字? /*else if(m=1) KillTimer(1); Alpha=Alpha-I_Alpha; for(int i=0;iStretchBlt(r.left,r.top,r.Width(),r.Height(),&memDC,0,0, BitInfo.bmWidt
36、h,BitInfo.bmHeight,SRCCOPY); / pDC-BitBlt(0,0,x,y,&memDC,0,0,SRCCOPY); /向窗洹?口中D繪?制?位?圖? bmp.Detach(); /分?離?位?圖?句?柄括? memDC.DeleteDC(); /釋酣?放?設(shè)?備?上?下?文?對?象 void CImagDlg:OnBnClickedButton2() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? CDC * m_dc; CRect m_rect; m_picture.GetClientRect(m_rect); m_dc = m_picture
37、.GetDC(); int r1,g1,b1,r2,g2,b2; for (int i = 1;im_rect.right+1;i+) for (int j = 1; jGetPixel(i,j); COLORREF nextcolor = m_dc-GetPixel(i-1,j-1); r1 = (color & 0 xFF); g1 = (int)(color & 65280) / 256; b1 = (int)(color & 0 xFF0000) / 65536; r2 = (nextcolor & 0 xFF); g2 = (int)(nextcolo
38、r & 62580) / 256; 30 b2 = (int)(nextcolor & 0 xFF0000) / 65536; r1+= (r1 - r2) /2; g1 += (g1 - g2) / 2; b1 += (b1 - b2) / 2; if ( r1 255) r1 = 255; if ( r1 255) b1 = 255; if (b1 255) g1 = 255; if ( g1 SetPixel(i,j,RGB(r1,g1,b1); void CImagDlg:OnBnClickedButton3() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?
39、碼? CDC * m_dc; CRect m_rect; m_picture.GetClientRect(m_rect); m_dc = m_picture.GetDC(); int r1,g1,b1,r2,g2,b2; for (int i = 1;im_rect.right+1;i+) for (int j = 1; jGetPixel(i,j); double m_gray ; r1 = GetRValue(color); g1 = GetGValue(color); b1 = GetBValue(color); m_gray = (0.38*r1+0.49*g1+0.1*b1); co
40、lor = RGB(m_gray,m_gray,m_gray); m_dc-SetPixel(i,j,color); 31 void CImagDlg:OnBnClickedButton4() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? CDC* pDC = m_picture.GetDC(); CRect m_rect; m_picture.GetClientRect(m_rect); BYTE r,g,b; for (int i=1; im_rect.Width();i+) for (int j=1;jGetPixel(i,j); r = GetRValue(clr);
41、g = GetGValue(clr); b = GetBValue(clr); r = abs(255-r); g = abs(255-g); b = abs(255-b); pDC-SetPixel(i,j,RGB(r,g,b); /*CDC * m_dc; CRect m_rect; m_HBitmap.GetClientRect(m_rect); m_dc =m_HBitmap.GetDC(); int r1,g1,b1,r2,g2,b2; for (int i = 1;im_rect.right+1;i+) for (int j = 1; jGetPixel(i,j); COLORRE
42、F nextcolor = m_dc-GetPixel(i+1,j+1); double m_gray ; r1 = GetRValue(color); g1 = GetGValue(color); b1 = GetRValue(color); 32 r2 =GetRValue(nextcolor); g2 = GetGValue(nextcolor); b2 = GetBValue(nextcolor); r1=r1-r2+128; g1=g1-g2+128; b1=b1-b2+128; if(r1255) r1 = 255; else if(r1255) g1 = 255; else if
43、(g1255) b1 = 255; else if(b1SetPixel(i,j,color); */ void CImagDlg:OnBnClickedButton5() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? CDC * m_dc; CRect m_rect; m_picture.GetClientRect(m_rect); m_dc = m_picture.GetDC(); int r1,g1,b1,r2,g2,b2; for (int i = 1;im_rect.right+1;i+) for (int j = 1; jGetPixel(i,j); COLORRE
44、F nextcolor = m_dc-GetPixel(i+1,j+1); 33 double m_gray ; r1 = GetRValue(color); g1 = GetGValue(color); b1 = GetRValue(color); r2 =GetRValue(nextcolor); g2 = GetGValue(nextcolor); b2 = GetBValue(nextcolor); r1=r1-r2+128; g1=g1-g2+128; b1=b1-b2+128; if(r1255) r1 = 255; else if(r1255) g1 = 255; else if
45、(g1255) b1 = 255; else if(b1SetPixel(i,j,color); 5.5.音頻視頻音頻視頻 5.1.增加背景圖片(同文字處理) 5.2 音頻視頻播放 首先在音頻視頻對話框中添加一個 WindowMediaPlay 控件和一個 ListBox 控件,分別用來實(shí)現(xiàn)文件列表的添加顯示和音頻視頻媒體的播放。然后添加四個按鈕,Caption 值分別設(shè)為:添加、播放、下一個和上一個。 其對應(yīng)的 ID 值和消息響應(yīng)函數(shù)名如下: Caption ID 消息響應(yīng)函數(shù) 添加 IDC_OPEN CWmpDlg:OnBnClickedOpen() 34 播放 IDC_PLAY CWmp
46、Dlg:OnBnClickedPlay() 下一個 IDC_NEXT CWmpDlg:OnBnClickedNext() 上一個 IDC_LAST CWmpDlg:OnBnClickedLast() 分別給 ListBox 和 WindowsMediaPlay 添加一個變量,如下圖所示: 系統(tǒng)將自動生成一個 COcx1 類 在源文件 COcx1.cpp 文件中添加如下代碼: #include ocx1.h IMPLEMENT_DYNCREATE(COcx1, CWnd) 然后在對話框源文件的對應(yīng)消息響應(yīng)函數(shù)中添加如下代碼, 以實(shí)現(xiàn)從本地添加一個媒體文件,并在ListBox中列表顯示,雙擊則播放
47、文件,單擊選中點(diǎn)擊播放按鈕則播放媒體文件, 點(diǎn)擊上一個或下一個則選中當(dāng)前媒體文件的上一個或下一文 35 件。 對應(yīng)代碼如下: void CWmpDlg:OnBnClickedOpen() / TODO: 在此添加控件通知處理程序代碼 CFileDialog flDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,所有文件|*.*|,this); if (flDlg.DoModal()=IDOK) /判斷用戶是否單擊OK按鈕 POSITION pos=flDlg.GetStartPosition(); while(pos!=NUL
48、L) m_List.AddString(flDlg.GetNextPathName(pos); void CWmpDlg:OnLbnDblclkList1() / TODO: 在此添加控件通知處理程序代碼 int selIndex = m_List.GetCurSel(); /獲取當(dāng)前選擇的列表項(xiàng)索引 if (selIndex != LB_ERR) /判斷是否有項(xiàng)目被選中 /定義一個字符串對象 CString str; /根據(jù)索引獲取當(dāng)前項(xiàng)目的字符串 m_List.GetText(selIndex,str); m_Avi.put_URL(str); void CWmpDlg:OnBnClick
49、edPlay() / TODO: 在此添加控件通知處理程序代碼 int selIndex = m_List.GetCurSel(); /獲取當(dāng)前選擇的列表項(xiàng)索引 if (selIndex != LB_ERR) /判斷是否有項(xiàng)目被選中 /定義一個字符串對象 CString str; /根據(jù)索引獲取當(dāng)前項(xiàng)目的字符串 m_List.GetText(selIndex,str); 36 m_Avi.put_URL(str); void CWmpDlg:OnBnClickedLast() / TODO: 在此添加控件通知處理程序代碼 int selIndex = m_List.GetCurSel(); /
50、獲取當(dāng)前選擇的列表項(xiàng)索引 if (selIndex != LB_ERR) /判斷是否有項(xiàng)目被選中 /定義一個字符串對象 CString str; /根據(jù)索引獲取當(dāng)前項(xiàng)目的字符串 int index=selIndex-1; if(index=-1) index=m_List.GetCount()-1; m_List.GetText(index,str); m_List.SetCurSel(index); / m_Avi.put_URL(str); void CWmpDlg:OnBnClickedNest() / TODO: 在此添加控件通知處理程序代碼 int selIndex = m_List
51、.GetCurSel(); /獲取當(dāng)前選擇的列表項(xiàng)索引 if (selIndex != LB_ERR) /判斷是否有項(xiàng)目被選中 /定義一個字符串對象 CString str; /根據(jù)索引獲取當(dāng)前項(xiàng)目的字符串 int index=selIndex+1; if(index=m_List.GetCount() index=0; m_List.GetText(index,str); m_List.SetCurSel(index); / m_Avi.put_URL(str); 6.6.動畫動畫 37 一、準(zhǔn)備工作一、準(zhǔn)備工作 第一步第一步:下載并安裝 Adobe Flash Player。 從官方網(wǎng)站(
52、http:/ Flash Player(大約為 2.66M),并安裝。對于 Windows 32 位系統(tǒng),其默認(rèn)安裝目錄為:C:WINDOWSsystem32MacromedFlash;對于 64 位系統(tǒng),為:C:WindowsSysWOW64MacromedFlash。 Flash 控件的大版本號用數(shù)字表示,如 9,10,11 等,小版本號用小寫字母表示,如 a, b, c, d, e。如我安裝的版本為:Flash10l.ocx。 第二步第二步:通過 regsvr32.exe 注冊 flash 控件 Flash10l.ocx。 從開始菜單中打開運(yùn)行對話框,并輸入:regsvr32 C:Win
53、dowsSysWOW64MacromedFlashFlash10l.ocx 注冊該控件(注冊之后就可以在項(xiàng)目中進(jìn)行控件添加了),如果注冊成功,有如下提示: 注銷控件的命令行為 regsvr32 /u C:WindowsSysWOW64MacromedFlashFlash10l.ocx。 二、新建二、新建 MFC 項(xiàng)目,添加項(xiàng)目,添加 Flash 控件控件 :添加 Shockwave Flash Object 類。 VC+ 6.0 中,可以使用 ClassWizard 添加 ActiveX 控件,而 VS2005 以后的版本沒有。如果要添加 ActiveX對應(yīng)的類,可以“項(xiàng)目”“添加類”“Act
54、iveX 控件中的 MFC 類”,打開“從 ActiveX 控件添加類向?qū)А睂υ捒颉_x擇從“文件”添加類,找到 Flash 控件的安裝位置,即可添加 Shockwave Flash 控件,接口選擇“IShockwaveFlash”,以生成 CShockwaveFlash 類(類的名稱可以修改)。插入后,VC 會自動把這個類加入工程里面。 38 添加 Shockwave Flash Object 控件。 在資源視圖里找到 “Dialog” , 并選擇其中的 IDD_MFCFLASH_DIALOG, 在其上點(diǎn)右鍵, 選擇 “插入 ActiveX控件”,從彈出的列表中選擇“Shockwave Fla
55、sh Object”。 使用 BUTTON、EDIT 等其它 Windows 控件一樣,我們可以使用這個類的成員函數(shù)來操縱這個對象,來進(jìn)行 Flash 動畫的控制以及和自己的程序進(jìn)行交互等操作了。在 Flash 控件上點(diǎn)右鍵,然后選擇“添加變量”,設(shè)定“變量名”為:m_FlashPlayer。可再次在 Flash 控件上點(diǎn)右鍵,然后選擇“屬性”,將其 ID 改為 IDC_SHOCKWAVEFLASH。 39 第四步第四步:使用成員函數(shù) LoadMovie 和 Play 來導(dǎo)入并播放動畫。 在 MFCFlashDlg.cpp 文件中,找到 C 綜合 Dlg::OnInitDialog()函數(shù),在
56、“return TRUE”之前添加代碼: CString str = _T(E:VSFlashmediatest.swf); m_FlashPlayer.LoadMovie (0, str); m_FlashPlayer. Play (); 其中 m_FlashPlayer.LoadMovie(0, str)用來將動畫導(dǎo)入程序中, str 為要播放的 flash 路徑, 要用絕對路徑 (注意路徑用雙斜杠“”隔開); m_FlashPlayer. Play ()開始播放動畫。 四四總結(jié)及收獲體會總結(jié)及收獲體會 通過這次多媒體軟件設(shè)計(jì),我對文字顯示、繪圖、圖像處理與媒體播放的只是有了進(jìn)一步的理解和
57、掌握。能夠熟練地應(yīng)用 VS2010 設(shè) 40 計(jì) MFC 應(yīng)用程序,并實(shí)現(xiàn)其內(nèi)部各種控件與工具的應(yīng)用。對 MFC 提供的各種設(shè)備環(huán)境類有了進(jìn)一步的認(rèn)識, 并能熟練應(yīng)用一些常用的類與內(nèi)置函數(shù)。 在設(shè)計(jì)中也遇到許多問題,變量名稱不統(tǒng)一,函數(shù)未聲明,在視頻播放設(shè)計(jì)中, 遇到了get_URL()不是C0cx1的成員, 要用put_URL()函數(shù), 但用了還是一樣,后來找資料,用自己添加,所以解決了問題;在就是文字處理的問題旋轉(zhuǎn)自己不小心打錯把 i 打成 1,導(dǎo)致程序死循環(huán);還有動畫的問題,在自己增加“Shockwave Flash Object”控件時,是沒有這個空間的,我就著急了,后來上網(wǎng)查資料要自
58、己下載安裝,問題得到解決。 設(shè)計(jì)過程中遇到了還有很多問題,通過自己上網(wǎng)查資料,以及自向同學(xué)求助,最后完成了任務(wù),發(fā)現(xiàn)自己還是存在很多不足,基礎(chǔ)知識不夠扎實(shí),以后得更努力得學(xué)。 41 教師評語:教師評語: 教師簽名:教師簽名: 日日 期:期: 42 附加:附加:(自己下學(xué)期入黨申請轉(zhuǎn)正,所以成績參考很重要,上次老師說我的繪圖做的太簡單,給的分?jǐn)?shù)不是太滿意,自己又加了一部分功能,希望老師給予合適的分?jǐn)?shù),謝謝老師! ) 繪圖繪圖 2 2 1 1、界面:、界面: 43 2 2、實(shí)現(xiàn)步奏:實(shí)現(xiàn)步奏: 在之前菜單增加繪圖 2,新建對話框,并將其連接,增加菜單在新建的對話框上,為其依次增加響應(yīng),函數(shù)代碼如下
59、: void DrawDlg:OnBnClickedCancel() / TODO: 在此?加控?件t?知a處鋦理?程序代洙?碼? OnCancel(); /DestroyWindow(); /delete this; void DrawDlg:OnDot() / TODO: 在此?加命令?處鋦理?程序代洙?碼? m_nDrawType=1; void DrawDlg:OnLine() 44 / TODO: 在此?加命令?處鋦理?程序代洙?碼? m_nDrawType=2; void DrawDlg:OnRectangle() / TODO: 在此?加命令?處鋦理?程序代洙?碼? m_nDrawType=3; void DrawDlg:OnEllipse() / TODO: 在此?加命令?處鋦理?程序代洙?碼? m_nDrawType=4; void DrawDlg:OnTuya() / TODO: 在此?加命令?處鋦理?程序代洙?碼? m_nD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西寧花卉大棚管理辦法
- 宜興存儲檔案管理辦法
- 部門在家辦公管理辦法
- 肺與健康課件
- 肢端肥大護(hù)理課件
- 股骨護(hù)理課件
- 腸癖中醫(yī)教學(xué)課件
- 回彈儀培訓(xùn)課件
- 二零一九年小考數(shù)學(xué)試卷
- 高三考數(shù)學(xué)試卷
- 輸血相關(guān)法律法規(guī)及流程
- 2025年艾滋病知識講座
- 康養(yǎng)項(xiàng)目的可行性研究報告
- TCAMA 109-2024 半封閉溫室設(shè)計(jì)規(guī)范
- 《尼爾斯騎鵝旅行記》讀書分享課件
- 《摩爾根果蠅實(shí)驗(yàn)》課件
- 北京八中分班數(shù)學(xué)試卷
- 培訓(xùn)課件:血糖監(jiān)測
- 康復(fù)醫(yī)學(xué)科關(guān)于無效中止康復(fù)訓(xùn)練的制度與流程
- 工傷保險待遇申請表
- 【藝恩】JELLYCAT品牌洞察報告
評論
0/150
提交評論