




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 1 南京工程学院 多媒体编程基础课程多媒体编程基础课程 综合作业说明书综合作业说明书 题题 目目 多媒体综合设计多媒体综合设计 班班 级级 K 软件测试 101 学学 生生 姓姓 名名 贺贺 稳稳 学学 号号 240101825 240101825 2012013 3 年年 6 6 月月 2222 日日 2 一一程序功能与设计思路程序功能与设计思路 (必须含有文字处理文字处理、绘图绘图、图像图像、音频视频音频视频四部分内容各 3 种以上功能,界面及应用方法自己根据软件的特色综合考虑, 每位同学必须自己设计一个动画标动画标志志,放在【帮助】对话框中,或者窗口界面上) 1 1、主界面主界面 1.
2、1 主界面实现功能说明如下: 菜单项包括文字处理、绘图、图像、音频视频,帮助,点击进入各个功能界面 动画显示小蛇吐信 1.2 界面效果显示: 3 1.3 主界面设计思路: 首先创建一个基于对话框的对话框的 MFC 应用程序, 然后在资源里添加五个菜单栏和四个对话框并将其对应连接起来,在主对话框菜单栏中添加四个菜单选项与四个子对话框链接,以实现点击菜单项跳出对应的对话框。 其功能结构如下: 主界面 文字处理 绘图 帮助 音频视频播放 图像处理 4 2 2、文字处理文字处理 2.1 文字实现功能说明如下: 菜单项包括文字渐变、文字旋转、颜色背景颜色显示、文字镂空,点击菜单项将显示各个功能。 2.2
3、 界面效果显示: 5 6 2.3 文字处理功能结构图: 3 3、绘图工具、绘图工具 3.1 绘图工具实现功能如下: 画圆 画椭圆 画矩形 文字处理 文字旋转 倾斜文字 颜色渐变 镂空文字 7 3.2 功能界面效果显示 8 4 4、图像处理图像处理 4.1 图像处理实现功能如下: 从本地磁盘打开文件 图片去色 浮雕效果 颜色拾取 锐化效果 颜色取反 4.2 功能界面效果显示 9 .3 图像处理功能结构图: 图片处理 打开 锐化 镂空 取反 去色 10 5 5、音频视频播放音频视频播放 5.1 音频视频功能实现: 从本地磁盘添加音频视频文件 双击播放音频视频文件 点击播放按钮播放文件 点击上一个、
4、下一个选择当前文件的上一个、下一个文件 5.2 功能界面显示 11 5.3 音频视频播放功能结构图: 二二相关原理知识介绍相关原理知识介绍 1输出指定字体输出指定字体 定义系统以外的字体,可以调用函数定义系统以外的字体,可以调用函数 GreateFont 自行创建自行创建 音频视频播放音频视频播放 添加文件添加文件 控制控制 播放播放 上一个上一个 下一个下一个 12 HFont=CreateFont (int nHeight, /字体高度,0 采用系统缺省值,使用逻辑单位 int nWidth, /字体宽度,取 0 则由系统根据高宽比取最佳值 int nEscapement, /每行文字相对
5、于页底的角度,单位为 0.1 度 int nOrienation, /每个文字相对于页底的角度,单位为 0.1 度 DWORD nWeight, /字体粗细度,范围为 01000 DWORD Dwltalic, /如果要求字体倾斜,则取非零 DWORD dwUnderline,/如果要求下划线,则取非零 DWORD dwStrikeout, /如果要求中划线,则取非零 DWORD dwCharset, /字体所属字符集 DWORD dwOutputPrecision,/输出精度,一般取缺省值 OUT_DEFAULT_PRECIS DWORD dwClipPrecision, /剪裁精度,常取缺
6、省值 CLIP_DEFAULT_PRECIS DWORD dwQuality, /输出质量,一般取缺省值 DEFAULT_QUALITY DWORD dwPitchAndFamily, /字体名 ) 2.文本输出文本输出 常用的文本输出函数 TextOut 原型如下: BOOL TextOut ( HDC hdc, int X, int Y, /X, Y 为用户区中字符串的起始坐标 LPCTSTR lpstring, /lpstring 为显示的字符串 int nCount /nCount 为字符串中的字节数 ); 2 2、简单绘图工具、简单绘图工具 2.1 绘图的基本方法 实现简单图形的绘制
7、,绘图功能中,有绘制直线、矩形、椭圆、涂鸦等。用到的方法如下: CPoint MoveTo(int x,int y); /直线起点 CPoint LineTo(int x,int y); /直线终点 BOOL Rectangle(int x1,int y1,int x2,int y2); /绘制矩形 BOOL Ellipse(int x1,int y1,int x2,int y2); /绘制椭圆 涂鸦部分,以鼠标移动的轨迹画线。同样要用到 MouseMove()函数。使起点为鼠标前一个位置,终点为鼠标当前位置,以画直线的方式完成。 对于线型、线宽、颜色的设置,通过使用颜色通用对话框完成。 2.
8、2 绘图时需要用到的设备环境类介绍 设备环境类 CDC 提供了绘制和打印的全部函数。为了能让用户使用一些特殊的设备环境,CDC 还派生了 CPaintDC、CClientDC、CWindowDC 和 CMetaFileDC类。 (1)CPaintDC 比较特殊,它的构造函数和析构函数都是针对 OnPaint 进行的,但用户一旦获得相关的 CDC 指针,就可以将它当成任何设备环境(包括屏幕、打印机)指针来使用。CPaintDC 类的构造函数会自动调用 BeginPaint,而它的析构函数则会自动调用 EndPaint。 (2)CClientDC 只能在窗口的客户区(不包括边框、标题栏、菜单栏以及
9、状 13 态栏)中进行绘图,点(0,0)通常指的是客户区的左上角。而 CWindowDC 允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。CWindowDC 和CClientDC 构造函数分别调用 GetWindowDC 和 GetDC,但它们的析构函数都是调用 ReleaseDC 函数 3 3 图像图像处理处理的基本方法的基本方法 显示图像的方法并不复杂,图像已经绘制好保存在文件中,需要做的工作就是有效加载图像文件并让它显示出来,这里我们讨论几种最常用的方法。 LoadImageLoadImage 加载图像加载图像 该函数装载图标,光标,或位图。 函数原型:HANDLE Lo
10、adImage( HINSTANCE hinst, /包含图像的实例句柄,可以为 NULL LPCTSTR lpszName,/图像的资源名称,本机加载,完整路径 UINT uType, /图像类型 int cxDesired, /加载的位图,参数为 0 int cyDesired, /加载的位图,参数为 0 UINT fuLoad );/返回加载的图像句柄 图像文件只支持 bmp 类型的。 获取鼠标位置的颜色值 VC 提供了三个宏,用于获取某一颜色的红、绿、蓝三基色。 1)GetRValue 宏 该宏用于获取指定颜色的红颜色值 2)GetGValue 宏 该宏用于获取指定颜色的绿颜色值 3)
11、GetBValue 宏 该宏用于获取指定颜色的蓝颜色值 BYTE GetRValue(DWORD rgb ); rgb 标识一个颜色值。 返回值:指定颜色的红色值。 BYTE GetGValue(DWORD rgb ); rgb 标识一个颜色值。 返回值:指定颜色的绿色值。 BYTE GetBValue(WORD rgb ); 14 rgb 标识一个颜色值。 返回值:指定颜色的蓝色值。 提取颜色 GetPixel 方法 该方法用于获取某一点的颜色值。 语法: COLORREF GetPixel( int x, int y ) const; COLORREF GetPixel( POINT po
12、int ) const; 参数: x、y、point 标识坐标点。 返回值:坐标点的颜色值。 SetPixel 方法 该方法用于设置某一点的颜色值。 语法: COLORREF SetPixel( int x, int y, COLORREF crColor ); COLORREF SetPixel( POINT point, COLORREF crColor ); 参数 x、y、point 标识坐标点。 crColor 标识设置的颜色值。 返回值:坐标点实际显示的颜色值。 4 4 音频视频音频视频 播放 Wav 文件 用 mciSendCommand 函数 语法如下: MCIERROR mci
13、SendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD_PTR dwParam); 参数说明: IDDevice:表示接收命令消息的 MCI 设备标识符。 uMsg:表示命令消息, 使用 mciSendCommand 函数,需要 15 引用 Mmsystem.h 头文 件,链接 Winmm.lib 库文件。 #include Mmsystem.h /应用头文件 #pragma comment (lib,“Winmm.lib”) /引用库文 定义一个 CPlayWave 类,用于打开波形设备、 播放 wav 文件、
14、关闭波形设备。 向视图类中添加一个 CPlayWave 成员。 CPlayWave wave; 向视图类中添加一个按钮,处理按钮的单击事件。 /定义一个 CPlayWave 成员 void CPlayWaveView:OnBtPlay() wave.Stop(); /停止播放 wave.Play(m_hWnd, Windows XP 登录音.wav); /开始播放 wav文件 使用 MCIWndCreate 函数播放 avi 文件 在 PlayAvi Dlg.app 中引用 vfw.h 头文件并链接 Vfw32.lib 库文件。 #include Vfw.h /引用头文件 #pragma co
15、mment (lib,“Vfw32.lib”) /链接库文件 处理“OK”按钮的单击事件,弹出文件打开对话框让用户选择一个 avi 文件,并进行播放。 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(); /创建 MCI 窗口 MCIWndPlay(m_hAviWnd); /播放文件 /此时已可以播放 在调用 MCIWndCreate 函数前,如果之前已经创建了一个视频窗口,则首先需要调用MCIWndDestroy 函数释放视频窗口。 在对话框关闭时释放 MCI 窗口。 void CPlayAviDlg:OnCancel() MCIWndDestroy(m_hAviWnd); /释放 MCI 窗口 CDialog:OnCancel();
17、 向对话框中添加 OnNotifyMode 消息方法, 当设备的模式发生改变时调用该方法。 (手动添加) LRESULT CPlayAviDlg:OnNotifyMode(WPARAM wparam, LPARAM lparam) long code = (long)lparam; /获取通知代码 if (code = MCI_MODE_STOP) /判断 avi 文件是否播放完毕 MCIWndClose(m_hAviWnd); /关闭 MCI 窗口 return 0; 在对话框的消息映射部分添加消息映射宏。 ON_MESSAGE(MCIWNDM_NOTIFYMODE,OnNotifyMode
18、) 17 三、三、设计方法及步骤设计方法及步骤 1、主对话框 首先启动 VS2008 创建一个基于对话框的应用程序,然后在资源中添加四个菜单栏,并将住对话框与主对话框连接起来,在菜单栏里添加文字处理、简单绘图、图像处理、音频视频播放,帮助五个菜单项。接着添加四个对话框,标题分别改为文字处理、简单绘图、图像处理、音频视频播放,并将其与对应的菜单项连接起来。然后将给四个对话框添加对话框类,给主菜单的四个子菜单添加消息响应函数,并调用对应的对话框,将四个子对话框设为无模式对话框,使点击主菜单的四个子菜单弹出对应的对话框。 对话框的 ID 号及对应的菜单栏如下: 对话框的 ID 号及对应的菜单栏如下:
19、 1.1增加背景图片: 首先进入资源视图,添加一个位图资源如下图所示,点击导入;然后给C综合3Dlg 类添加消息映射函数BOOL CWordDlg:OnEraseBkgnd(CDC* pDC),添加以下代码以实现根据窗口大小按比例显示添加的背景图片。 ID 标题 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: 在此添加消息处理程序代码和/或调用默认值 CBitmap bitmap;/构建位图对象 bitmap.LoadBitmapA(IDB_BITMAP5);/加载位图 CDC dcCompatible;/创建于当前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连接四个对话框: 给对话框添加类:选中对话框点击右键,选择添加类,然后进入如下对话框,填入相应的类名,点击“完成” 。 19 添加代码如下: 首先添加四个对话框
22、类的头文件 #include DrawDlg.h #include ImagDlg.h #include WmpDlg.h #include#include WordDlg.hWordDlg.h 然后给主对话框的子菜单添加对应的消息响应函数,代码如下: 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 增加背景:增加背景: 首先进入资源视图,添加一个位图资源如下图所示,点击导入;然后给CWordDlg类添加消息映射函数BOOL CWordDlg:OnEraseBkgnd(CDC* pDC),添加以下代码以实现根据窗口大小按比例显示添加的背景图片。 代码如下: 21 BOOL CWordDlg:OnEraseBkgnd(CDC* pDC) / TODO: 在此添加消息处理
25、程序代码和/或调用默认值 CBitmap bitmap;/构建位图对象 bitmap.LoadBitmapA(IDB_BITMAP5);/加载位图 CDC dcCompatible;/创建于当前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 按钮事件响应 然后添加四个按钮,修改其对应的 ID 值,如下: 然后给各个菜单项添加对应的消息映射函数,代码如下: void CWordDlg:OnBnClickedButton1() / TODO: 在此?加控?件t?知a处鋦理?程序代洙?码? m=3; Invalidate();
27、void CWordDlg:OnBnClickedButton2() 名称名称 ID 文字渐变 IDC_BUTTONIDC_BUTTON1 1 文字镂空 IDC_BUTTONIDC_BUTTON2 2 颜色旋转 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绘?图?消?息调獭?用? 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(南?京?工程学院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(南?京?工程学院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); /创洹?建输?出?字?符?串?. CString str (_T (南?京?工程学院o!); 24 /设?置?字?体?颜?
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=综?合?作痢?业唉?说明书酣?,?请?不?要癮找我要癮!?谢?谢?!?; 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: 在此?加消?息处鋦理?程序代洙?码?和/或调獭?用?默?认?值 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(); /释酣?放?设?备?上?下?文?对?象 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 控件,分别用来实现文件列表的添加显示和音频视频媒体的播放。然后添加四个按钮,Caption 值分别设为:添加、播放、下一个和上一个。 其对应的 ID 值和消息响应函数名如下: Caption ID 消息响应函数 添加 IDC_OPEN CWmpDlg:OnBnClickedOpen() 34 播放 IDC_PLAY CWmp
46、Dlg:OnBnClickedPlay() 下一个 IDC_NEXT CWmpDlg:OnBnClickedNext() 上一个 IDC_LAST CWmpDlg:OnBnClickedLast() 分别给 ListBox 和 WindowsMediaPlay 添加一个变量,如下图所示: 系统将自动生成一个 COcx1 类 在源文件 COcx1.cpp 文件中添加如下代码: #include ocx1.h IMPLEMENT_DYNCREATE(COcx1, CWnd) 然后在对话框源文件的对应消息响应函数中添加如下代码, 以实现从本地添加一个媒体文件,并在ListBox中列表显示,双击则播放
47、文件,单击选中点击播放按钮则播放媒体文件, 点击上一个或下一个则选中当前媒体文件的上一个或下一文 35 件。 对应代码如下: 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(); /获取当前选择的列表项索引 if (selIndex != LB_ERR) /判断是否有项目被选中 /定义一个字符串对象 CString str; /根据索引获取当前项目的字符串 m_List.GetText(selIndex,str); m_Avi.put_URL(str); void CWmpDlg:OnBnClick
49、edPlay() / TODO: 在此添加控件通知处理程序代码 int selIndex = m_List.GetCurSel(); /获取当前选择的列表项索引 if (selIndex != LB_ERR) /判断是否有项目被选中 /定义一个字符串对象 CString str; /根据索引获取当前项目的字符串 m_List.GetText(selIndex,str); 36 m_Avi.put_URL(str); void CWmpDlg:OnBnClickedLast() / TODO: 在此添加控件通知处理程序代码 int selIndex = m_List.GetCurSel(); /
50、获取当前选择的列表项索引 if (selIndex != LB_ERR) /判断是否有项目被选中 /定义一个字符串对象 CString str; /根据索引获取当前项目的字符串 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(); /获取当前选择的列表项索引 if (selIndex != LB_ERR) /判断是否有项目被选中 /定义一个字符串对象 CString str; /根据索引获取当前项目的字符串 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 一、准备工作一、准备工作 第一步第一步:下载并安装 Adobe Flash Player。 从官方网站(
52、http:/ Flash Player(大约为 2.66M),并安装。对于 Windows 32 位系统,其默认安装目录为:C:WINDOWSsystem32MacromedFlash;对于 64 位系统,为:C:WindowsSysWOW64MacromedFlash。 Flash 控件的大版本号用数字表示,如 9,10,11 等,小版本号用小写字母表示,如 a, b, c, d, e。如我安装的版本为:Flash10l.ocx。 第二步第二步:通过 regsvr32.exe 注册 flash 控件 Flash10l.ocx。 从开始菜单中打开运行对话框,并输入:regsvr32 C:Win
53、dowsSysWOW64MacromedFlashFlash10l.ocx 注册该控件(注册之后就可以在项目中进行控件添加了),如果注册成功,有如下提示: 注销控件的命令行为 regsvr32 /u C:WindowsSysWOW64MacromedFlashFlash10l.ocx。 二、新建二、新建 MFC 项目,添加项目,添加 Flash 控件控件 :添加 Shockwave Flash Object 类。 VC+ 6.0 中,可以使用 ClassWizard 添加 ActiveX 控件,而 VS2005 以后的版本没有。如果要添加 ActiveX对应的类,可以“项目”“添加类”“Act
54、iveX 控件中的 MFC 类”,打开“从 ActiveX 控件添加类向导”对话框。选择从“文件”添加类,找到 Flash 控件的安装位置,即可添加 Shockwave Flash 控件,接口选择“IShockwaveFlash”,以生成 CShockwaveFlash 类(类的名称可以修改)。插入后,VC 会自动把这个类加入工程里面。 38 添加 Shockwave Flash Object 控件。 在资源视图里找到 “Dialog” , 并选择其中的 IDD_MFCFLASH_DIALOG, 在其上点右键, 选择 “插入 ActiveX控件”,从弹出的列表中选择“Shockwave Fla
55、sh Object”。 使用 BUTTON、EDIT 等其它 Windows 控件一样,我们可以使用这个类的成员函数来操纵这个对象,来进行 Flash 动画的控制以及和自己的程序进行交互等操作了。在 Flash 控件上点右键,然后选择“添加变量”,设定“变量名”为:m_FlashPlayer。可再次在 Flash 控件上点右键,然后选择“属性”,将其 ID 改为 IDC_SHOCKWAVEFLASH。 39 第四步第四步:使用成员函数 LoadMovie 和 Play 来导入并播放动画。 在 MFCFlashDlg.cpp 文件中,找到 C 综合 Dlg::OnInitDialog()函数,在
56、“return TRUE”之前添加代码: CString str = _T(E:VSFlashmediatest.swf); m_FlashPlayer.LoadMovie (0, str); m_FlashPlayer. Play (); 其中 m_FlashPlayer.LoadMovie(0, str)用来将动画导入程序中, str 为要播放的 flash 路径, 要用绝对路径 (注意路径用双斜杠“”隔开); m_FlashPlayer. Play ()开始播放动画。 四四总结及收获体会总结及收获体会 通过这次多媒体软件设计,我对文字显示、绘图、图像处理与媒体播放的只是有了进一步的理解和
57、掌握。能够熟练地应用 VS2010 设 40 计 MFC 应用程序,并实现其内部各种控件与工具的应用。对 MFC 提供的各种设备环境类有了进一步的认识, 并能熟练应用一些常用的类与内置函数。 在设计中也遇到许多问题,变量名称不统一,函数未声明,在视频播放设计中, 遇到了get_URL()不是C0cx1的成员, 要用put_URL()函数, 但用了还是一样,后来找资料,用自己添加,所以解决了问题;在就是文字处理的问题旋转自己不小心打错把 i 打成 1,导致程序死循环;还有动画的问题,在自己增加“Shockwave Flash Object”控件时,是没有这个空间的,我就着急了,后来上网查资料要自
58、己下载安装,问题得到解决。 设计过程中遇到了还有很多问题,通过自己上网查资料,以及自向同学求助,最后完成了任务,发现自己还是存在很多不足,基础知识不够扎实,以后得更努力得学。 41 教师评语:教师评语: 教师签名:教师签名: 日日 期:期: 42 附加:附加:(自己下学期入党申请转正,所以成绩参考很重要,上次老师说我的绘图做的太简单,给的分数不是太满意,自己又加了一部分功能,希望老师给予合适的分数,谢谢老师! ) 绘图绘图 2 2 1 1、界面:、界面: 43 2 2、实现步奏:实现步奏: 在之前菜单增加绘图 2,新建对话框,并将其连接,增加菜单在新建的对话框上,为其依次增加响应,函数代码如下
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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毛石供应合同范本
- RU26988-生命科学试剂-MCE
- PNU-142300-生命科学试剂-MCE
- 薪酬福利合同范本
- 科技医疗远程诊疗的未来之路
- 皮肤疾病患者心理调适与治疗支持
- 科技改变农业以科学种植为核心的现代农业模式
- 科技推动下的绿色包装材料与物流进步
- 化肥运输合同范本
- 社交媒体中的大事件与品牌互动策略
- 中国古典文献学(全套)
- WOMAC骨性关节炎指数评分表
- 年处理量48万吨重整装置芳烃精馏的工艺设计-二甲苯塔
- CRPS电源设计向导 CRPS Design Guide r-2017
- 16防冲工题库题库(238道)
- SH/T 1627.1-1996工业用乙腈
- GB/T 5534-2008动植物油脂皂化值的测定
- GB/T 3452.2-2007液压气动用O形橡胶密封圈第2部分:外观质量检验规范
- GB/T 30797-2014食品用洗涤剂试验方法总砷的测定
- GB/T 20057-2012滚动轴承圆柱滚子轴承平挡圈和套圈无挡边端倒角尺寸
- GB/T 19808-2005塑料管材和管件公称外径大于或等于90mm的聚乙烯电熔组件的拉伸剥离试验
评论
0/150
提交评论