《多媒体编程课程设计11083.docx》由会员分享,可在线阅读,更多相关《多媒体编程课程设计11083.docx(111页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、南京工程程学院多媒体编编程基础础课程综合作业业说明书书题 目目 多媒媒体处理理综合应应用设计计 班 级学 生 姓 名名 刘土土豪学 号 202210003 20113 年年 006 月月 007 日一、 程序功能能与设计计思路设计目标标与具有有的功能能:必须含有有文字处处理、绘图、图像、音频视视频四部部分内容容各3种种以上功功能,界界面及应应用方法法自己根根据软件件的特色色综合考考虑,每每位同学学必须自自己设计计一个动动画标志志,放在在【帮助助】对话话框中,或或者窗口口界面上上设计思路路:1) 图形处理理: 可以选择择直线,矩矩形,椭椭圆,涂涂鸦进行行绘画 可以选择择线的形形状:实实线,虚虚线
2、,点点线 可以改变变线条的的颜色 可以改变变线条的的宽度 可以进行行多边形形填充颜颜色并可可以改变变颜色2) 图片处理理: 可以打开开BMPP格式的的图片 可以进行行锐化,浮浮雕,反反色等图图片处理理效果 可以显示示鼠标在在图片上上坐标处处的颜色色值和颜颜色3) 文字处理理: 实现至少少少三种种文字特特效,比比如:文文字渐变变,旋转转体,33D,文文字倾斜斜,下划划线,空空心字等等4) 音乐播放放器: 可以打开开mp33,wmma,wwvi格格式的歌歌曲 可以控制制音乐的的播放、暂暂停、停停止 可以指定定播放当当前音乐乐的上一一个或下下一个音音乐 在列表中中随意选选择要播播放的音音乐 在播放时
3、时,可以以获取并并显示当当前播放放音乐的的信息 可以调节节音乐的的音量5)视频频播放器器: 可以打开开MP33,WMMA,WWMV,AVII,RMM,RMMVB,FLVV,MPP4等格格式 在列表中中随意选选择要播播放的媒媒体文件件 控制媒体体文件的的播放、暂暂停、停停止、快快进、快快退 指定播放放当前文文件的上上一个或或下一个个媒体文文件 在播放时时,可以以获取并并显示当当前播放放媒体的的文件信信息 播放模式式可以进进行进行行选择 可以对播播放列表表或列表表中的选选项进行行删除操操作二、 相关原理理知识介介绍(1) 图形处理理:画笔笔和画刷刷是绘图图中最基基本的元元素1.画笔笔(Peen):
4、用于于在设备备环境中中绘制直直线,曲曲线和多多边形边边框。创建画笔笔:(1) CPenn();(2) CPenn(innt nnPennStyyle, innt nnWiddth, COOLORRREFF crrCollor);nPennStyyle:画笔的的样式PPS_SSOLIID 创创建一个个实线画画笔,PS_DASSH 创创建一个个虚线画画笔,PS_DOTT 创建建一个点点线画笔笔nWiddth:画笔的的宽度crCoolorr:画笔笔的颜色色(颜色色用RGGB值来来描述) 2.画画刷(CCBruush):常用用于填充充个区域域诸如多多边形,椭椭圆和路路径等图图形内部部区域 创建建画刷:
5、(1) CreaateSSoliidBrrushh 用指指定的颜颜色初始始化画刷刷(2) CreaateHHatcchBrrushh 用指指定的阴阴影线初初始化画画刷。(3) CreaateBBrusshInndirrectt用结构构LOGGBRUUSH中中指定的的风格、颜颜色和模模式初始始化画刷刷。3.画直直线:LLineeTo(intt x,intt y) 画椭椭圆:EElliipsee(innt xx1,iint y1, innt xx2,iint y2) 画矩矩形:RRecttanggle(intt x11,innt yy1,iint x2,intt y22)/x1,y1为为边界矩矩形
6、左上上角的坐坐标,xx2,yy2为边边界矩形形右下角角的坐标标(2) 图片处理理: BitBBlt,用于从从源设备备中复制制位图到到目标设设备中,BOOLL BiitBllt(HHDC hdccDesst,iint nXDDestt,innt nnYDeest,intt nWWidtth,iint nHeeighht,HHDC hdccSrcc,innt nnXSrrc,iint nYSSrc,DWOORD dwRRop)hdcDDestt:指向向目标设设备环境境的句柄柄。nXDeest:指定目目标矩形形区域左左上角的的X轴逻逻辑坐标标。nYDeest:指定目目标矩形形区域左左上角的的Y轴逻逻
7、辑坐标标。nWiddth:指定源源和目标标矩形区区域的逻逻辑宽度度。nHeiightt:指定定源和目目标矩形形区域的的逻辑高高度。hdcSSrc:指向源源设备环环境的句句柄。nXSrrc:指指定源矩矩形区域域左上角角的X轴轴逻辑坐坐标。nYSrrc:指指定源矩矩形区域域左上角角的Y轴轴逻辑坐坐标。dwRoop:指指定光栅栅操作代代码。这这些代码码将定义义源矩形形区域的的颜色数数据,如如何与目目标矩形形区域的的颜色数数据组合合以完成成最后的的颜色。(3) 文字处理理:输出文字字Texxtouut():用当当前字体体在指定定位置处处写一个个字符串串TexttOutt(innt xx,innt yy
8、,Csstriing strringg):文文本起点点的x坐坐标和yy坐标以以及要绘绘制的字字符串创建字体体LOGGFONNT 结构构(4) 音频播放放器:使用VCC+66.0强强大的MMFC、ApppWizzardd、ClaassWWizaard和和其中的的多种控控件可以以很方便便地建立立各种应应用程序序。同时时想要实实现更高高级更复复杂的功功能,也也可以借借助AcctivveX控控件资源源,用这这些现有有的控件件资源,可可以省去去自己编编程的复复杂过程程,从而而实现更更高级的的功能。本本次课程程设计要要使用VVC+6.00自带的的一个AActiiveXX控件WiindoowsMMediia
9、Pllayeer控件件,建立立自己的的多媒体体播放器器三、 界面设计计和功能能实现1. 主界面设设计结构构框架图图:主界面音频播放器音乐播放器图形处理图片处理文字效果2. 打开VCC 6.0,新新建MFFC工程程,基于于对话框框,名称称为多媒媒体课设设3. 向主窗口口拖一个个Tabb控件,并并调整大大小使之之占据22/3主主窗口大大小,并并为Taab添加加类向导导,添加IDDC_TTAB11的变量量:m_tabb完成后在在 “多多媒体课课设Dllg.ccpp”中中的OnnIniitDiialoog添加加如下代代码:/ SSet thee iccon forr thhis diaalogg. T
10、hee frrameeworrk ddoess thhis auttomaaticcallly/ wheen tthe apppliccatiions mmainn wiindoow iis nnot a ddiallogSetIIconn(m_hIccon, TRRUE);/ Seet bbig icoonSetIIconn(m_hIccon, FAALSEE);/ SSet smaall icoon/ TTODOO: AAdd exttra iniitiaalizzatiion herrem_taab.IInseertIItemm(0,图形形处理); mm_taab.IInseertIIt
11、emm(1,图片片处理); m_ttab.InsserttIteem(22,文文字处理理); m_ttab.InsserttIteem(33,音音乐播放放);m_taab.IInseertIItemm(4,音频频播放); RECCT rrc;m_taab.GGetCClieentRRectt(&rrc);m_drraw.Creeatee(IDDD_DDRAWW_DIIALOOG,&m_ttab);m_drraw.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_SHHOWWWINDDOW);m_piictuure.Creeat
12、ee(IDDD_PPICTTUREE_DIIALOOG,&m_ttab);m_piictuure.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_muusicc.Crreatte(IIDD_MUSSIC_DIAALOGG,&mm_taab);m_muusicc.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_mooviee.Crreatte(IIDD_MOVVIE_DIAALOGG,&mm_t
13、aab);m_mooviee.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_woord.Creeatee(IDDD_WWORDD_DIIALOOG,&m_ttab);m_woord.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);retuurn TRUUE; / reeturrn TTRUEE uunleess youu seet tthe foccus to a cconttroll在添加类类
14、向导OOnSeelchhanggeTaab1()中中添加代代码:voidd CMMyDllg:OnSSelcchanngeTTab11(NMMHDRR* ppNMHHDR, LRRESUULT* pRResuult) / TTODOO: AAdd youur cconttroll nootifficaatioon hhanddlerr coode herreCRecct rrc;m_taab.GGetCClieentRRectt(&rrc);swittch(m_ttab.GettCurrSell()casee 0: m_movvie.SettWinndowwPoss(NUULL,5,220,r
15、rc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_muusicc.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_woord.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_piictuure.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_drra
16、w.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_SHHOWWWINDDOW);breaak;casee 1:m_mooviee.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_muusicc.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_woord.SettWinndowwPoss(NUULL,5,220,rrc.rrig
17、hht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_drraw.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_piictuure.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_SHHOWWWINDDOW);breaak;casee 2: m_mooviee.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOW
18、W); m_mmusiic.SSetWWinddowPPos(NULLL,55,200,rcc.riightt,rcc.boottoom,SSWP_HIDDEWIINDOOW);m_piictuure.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_drraw.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_woord.SettWinndowwPoss(NUULL,5,220,rrc.rr
19、ighht,rrc.bbotttom,SWPP_SHHOWWWINDDOW);breaak;casee 3:m_mooviee.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_woord.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_piictuure.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDD
20、OW); m_draaw.SSetWWinddowPPos(NULLL,55,200,rcc.riightt,rcc.boottoom,SSWP_HIDDEWIINDOOW);m_muusicc.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_SSHOWWWINNDOWW);breaak;casee 4:m_muusicc.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_HHIDEEWINNDOWW);m_woord.SettWinndowwPoss(NUULL,5,
21、220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_piictuure.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_drraw.SettWinndowwPoss(NUULL,5,220,rrc.rrighht,rrc.bbotttom,SWPP_HIIDEWWINDDOW);m_mooviee.SeetWiindoowPoos(NNULLL,5,20,rc.rigght,rc.botttomm,SWWP_SSHOWWWINNDOWW);b
22、reaak;*pReesullt = 0;4. 本作业分分为5个个部分:图形处处理,图图片处理理,文字字处理,音音乐播放放,音频频播放(1)分分别建立立5个资资源:选择菜单单栏的“插插入”,选选择窗体体,窗体体名称分分别为:DRAAW,PPictturee,Woord,MUSSIC,MOVVIE并将窗体体的样式式改为如如下:(2)分分别为55个窗体体创建变变量名称称:在 “多多媒课设设Dlgg.h”中中添加变变量:另外将55个部分分的头文文件全部部加到“多多媒体课课设Dllg.hh”中,才才能调用用哦(3)插插入背景景图片:菜单栏选选择“插插入”,选选择“资资源”,选选择“BBitmmap”,
23、点击“引引入”,选选择BMMP格式式的图片片名称为IIDB_BITTMAPP4,在在OnPPainnt()添加如如下代码码:elsee/CDDiallog:OnnPaiint();CPaiintDDC dcc(thhis); CRecct reect; GetCClieentRRectt(&rrectt); CDC ddcMeem; dcMeem.CCreaateCComppatiibleeDC(&dcc); CBittmapp bmppBacckgrrounnd; bmpBBackkgrooundd.LooadBBitmmap(IDBB_BIITMAAP4);BITMMAP bbitmmap
24、; bmpBBackkgrooundd.GeetBiitmaap(&bittmapp); CBittmapp *pbbmpOOld=dcMMem.SellecttObjjectt(&bbmpBBackkgrooundd); dc.SStreetchhBltt(0,0,rrectt.Wiidthh(),recct.HHeigght(),&dcMMem,0,00,biitmaap.bbmWiidthh,biitmaap.bbmHeeighht,SSRCCCOPYY);二各个个板块设设计:(1)图图形处理理:图形处理理设计框框架图:图形处理界面选择图形清空面板改变填充颜色选择线型改变画笔颜色输入线宽
25、实线点线虚线椭圆直线矩形涂鸦设计如图图:插件名称称ID直线IDC_Linne矩形IDC_Recct椭圆IDC_Eliipsee涂鸦IDC_Tuyya线型IDC_Linnesttylee线宽IDC_Linnewiidthh画笔颜色色IDC_Penn coolorr填充颜色色IDC_Bruushccoloor清空面板板IDC_cleear绘画区域域IDC_Shoow功能实现现:在Draaw.hh添加变变量:设置默认认值:DRAWW:DDRAWW(CWWnd* pPPareent): CDDiallog(DRAAW:IDDD, ppParrentt)/AFXX_DAATA_INIIT(DDRAWW)
26、m_liinewwidtth = 0;f_moove=0;coloor_ppen=RGBB(2555,00,0);coloor_bbrussh=RRGB(2555,2555,2255);Hcurrsorr=AffxGeetAppp()-LLoaddStaandaardCCurssor(IDCC_CRROSSS);/AFXX_DAATA_INIIT在OnIInittDiaalogg()中中设置线线型的选选择和默默认值,代代码如下下:BOOLL DRRAW:OnnIniitDiialoog() CDiaalogg:OOnInnitDDiallog();/ TTODOO: AAdd exttra i
27、niitiaalizzatiion herreChecckRaadiooButttonn(IDDC_LLinee,IDDC_TTuyaa,IDDC_RRectt);/默认认选择画画矩形m_liinesstylle.AAddSStriing(实线线);m_liinesstylle.AAddSStriing(虚线线);m_liinesstylle.AAddSStriing(点线线); m_llineestyyle.SettCurrSell(0);/默认画画实线retuurn TRUUE; / reeturrn TTRUEE unnlesss yyou sett thhe ffocuus tto a
28、a coontrrol / EXXCEPPTIOON: OCXX Prropeertyy Paagess shhoulld rretuurn FALLSE在OnPPainnt添加加如下代代码:voidd DRRAW:OnnPaiint() CPaiintDDC ddc(tthiss); / devvicee coonteext forr paainttingg/ TTODOO: AAdd youur mmesssagee haandller codde hhereeUpdaateDDataa(TRRUE);CRecct rrectt;GetDDlgIItemm(IDDC_SSHOWW)-Get
29、tWinndowwRecct(&recct);ScreeenTToClliennt(&recct);CBruush bruush(RGBB(2555,2255,2555);dc.FFilllRecct(CCRecct(rrectt.leeft,recct.ttop+8,rrectt.riightt,reect.botttomm),&bruush);/ DDo nnot calll CCDiaalogg:OOnPaaintt() forr paainttingg meessaagess添加LBButttonDDownn函数响响应:voidd DRRAW:OnnLBuuttoonDoown(UIN
30、NT nnFlaags, CPPoinnt ppoinnt) / TTODOO: AAdd youur mmesssagee haandller codde hheree annd/oor ccalll deefauultUpdaateDDataa(TRRUE);m_BeeginnPoiint = ppoinnt;m_EnndPoointt = poiint;SetCCaptturee();/执执行这条条语句后后,当鼠鼠标移动动到本窗窗口以外外时,鼠鼠标消息息仍然被被发送给给本窗口口;f_moove = 11; CReect recct; GettCliienttRecct(&recct);C
31、lieentTToSccreeen(&recct);CDiaalogg:OOnLBButttonDDownn(nFFlaggs, poiint);添加LBButttonUUp函数数响应:voidd DRRAW:OnnLBuuttoonUpp(UIINT nFllagss, CCPoiint poiint) / TTODOO: AAdd youur mmesssagee haandller codde hheree annd/oor ccalll deefauultCDC *dcc=GeetDCC();if(ff_moove):ReeleaaseCCaptturee();/停停止捕获获鼠标消消息
32、 draaw(ppoinnt,11); f_mmovee = 0;CDiaalogg:OOnLBButttonUUp(nnFlaags, poointt);添加MoouseeMovve函数数响应:voidd DRRAW:OnnMouuseMMovee(UIINT nFllagss, CCPoiint poiint) / TTODOO: AAdd youur mmesssagee haandller codde hheree annd/oor ccalll deefauultdraww(poointt,0);CDiaalogg:OOnMoouseeMovve(nnFlaags, poointt)
33、;给“线型型按钮”添添加CBBN_SSELCCHANNCE响响应函数数,代码码如下:voidd DRRAW:OnnSellchaangeeLinnesttylee() / TTODOO: AAdd youur cconttroll nootifficaatioon hhanddlerr coode herreCStrringg sttr;m_liinesstylle.GGetLLBTeext(m_llineestyyle.GettCurrSell(),strr);if(00 = sttr.CCompparee(实实线) typpe = PSS_SOOLIDD;if(00 = sttr.CCom
34、pparee(虚虚线)typee = PS_DASSH;if(00 = sttr.CCompparee(点点线)typee = PS_DOTT;添加drraw()函函数,实实现各种种功能的的绘图:voidd DRRAW:drraw(CPoointt poointt, iint k)CPenn peen(ttypee,m_linnewiidthh,coolorr_peen);CCliienttDC CliienttDC(thiis);ClieentDDC.SSeleectOObjeect(&peen);CBruush bruush(collor_bruush);ClieentDDC.SSelee
35、ctOObjeect(&brrushh);int j; j = GeetChheckkedRRadiioBuuttoon(IIDC_Linne,IIDC_Tuyya);if(ff_moove)swittch(j) caase IDCC_Reect: CllienntDCC.SeetROOP2(R2_NOTT); CliienttDC.MovveToo(m_BegginPPoinnt); CllienntDCC.Reectaanglle(mm_BeeginnPoiint.x,mm_BeeginnPoiint.y,mm_EnndPoointt.x,m_EEndPPoinnt.yy); if(k=1
36、) CllienntDCC.SeetROOP2(R2_COPPYPEEN); CllienntDCC.MooveTTo(mm_BeeginnPoiint); CliienttDC.Recctannglee(m_BegginPPoinnt.xx,m_BegginPPoinnt.yy,poointt.x,poiint.y); m_EEndPPoinnt=ppoinnt; breeak; casse IIDC_Linne:ClieentDDC.SSetRROP22(R22_NOOT);ClieentDDC.MMoveeTo(m_BBegiinPoointt);ClieentDDC.LLineeTo(
37、poiint); if(k = 11)ClieentDDC.SSetRROP22(R22_COOPYPPEN);ClieentDDC.MMoveeTo(m_BBegiinPoointt);ClieentDDC.LLineeTo(poiint);m_EnndPoointt=poointt;breaak;casee IDDC_EElliipsee:ClieentDDC.SSetRROP22(R22_NOOT);ClieentDDC.MMoveeTo(m_BBegiinPoointt);ClieentDDC.EElliipsee(m_BegginPPoinnt.xx,m_BegginPPoinnt.
38、yy,m_EnddPoiint.x,mm_EnndPoointt.y);if(kk=11)ClieentDDC.SSetRROP22(R22_COOPYPPEN);ClieentDDC.MMoveeTo(m_BBegiinPoointt);ClieentDDC.EElliipsee(m_BegginPPoinnt.xx,m_BegginPPoinnt.yy,poointt.x,poiint.y);m_EnndPoointt=poointt;breaak;casee IDDC_TTuyaa:ClieentDDC.MMoveeTo(m_BBegiinPoointt);ClieentDDC.LLin
39、eeTo(poiint);m_BeeginnPoiint = ppoinnt;breaak;给“填充充颜色”按按钮添加加单击响响应:voidd DRRAW:OnnBruushccoloor() / TTODOO: AAdd youur cconttroll nootifficaatioon hhanddlerr coode herreCCollorDDiallog m_ppCollorDDlg;m_pCColoorDllg.mm_ccc.Fllagss = CC_ANYYCOLLOR|CC_ENAABLEEHOOOK;if(mm_pCColoorDllg.DDoMoodall() = IDOO
40、K)coloor_bbrussh = m_pCoolorrDlgg.GeetCoolorr();给“画笔笔颜色”按按钮添加加单击响响应:voidd DRRAW:OnnPenncollor() / TTODOO: AAdd youur cconttroll nootifficaatioon hhanddlerr coode herreCCollorDDiallog m_ppCollorDDlg;m_pCColoorDllg.mm_ccc.Fllagss = CC_ANYYCOLLOR|CC_ENAABLEEHOOOK;if(mm_pCColoorDllg.DDoMoodall() =IIDOKK
41、)coloor_ppen = mm_pCColoorDllg.GGetCColoor();添加“情情况面板板”按钮钮单击响响应:voidd DRRAW:Onncleear() / TTODOO: AAdd youur cconttroll nootifficaatioon hhanddlerr coode herreInvaaliddatee();(2)图图片处理理:图形处理理设计框框架图:图片处理界面打开图片轮廓杂色反色浮雕锐化鼠标处的RGB和颜色蓝绿颜色红设计如图图:控件名称称ID图形显示示区域IDC_DRAAW打开IDC_OPEEN锐化IDC_shaarp浮雕IDC_fuddiaoo反色
42、IDC_fannse轮廓IDC_lunnkuoo杂色IDC_zasse(编辑框框)红IDC_REDD(编辑框框)蓝IDC_GREEEN(编辑框框)绿IDC_BLUUE(编辑框框)显示示颜色IDC_COLLOR实现功能能:在Piccturre.hh中添加加变量:在OnPPainnt()添加代代码如下下:voidd Piictuure:OnnPaiint() CPaiintDDC ddc(tthiss); / devvicee coonteext forr paainttingg/ TTODOO: AAdd youur mmesssagee haandller codde hhereeCDiaalogg:OOnPaaintt();CWndd*pWWnd=GettDlggIteem(IIDC_DRAAW);pWndd-UUpdaateWWinddow();DrawwPhooto();/ DDo nnot calll CCDiaalogg:OOnPaaintt() forr paainttingg meessaagess添加DrrawPPh