ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:32.32KB ,
资源ID:16859128      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16859128.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC界面保存实现课案.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

MFC界面保存实现课案.docx

1、MFC界面保存实现课案将屏幕和MFC程序界面保存成bmp格式图片保存 分类: c+专区 MFC客户端 2014-06-03 16:39 915人阅读 评论(1) 收藏 举报 将屏幕保存为图片,使用vs2008编译通过。#include stdafx.h #include #include int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) HWND hwnd = :GetDesktopWindow(); HDC hDC = :GetDC(hwnd);

2、/获取屏幕DC RECT rect; :GetClientRect(hwnd, &rect);/获取屏幕大小 HDC hDCMem = :CreateCompatibleDC(hDC);/创建兼容DC HBITMAP hBitMap = :CreateCompatibleBitmap(hDC, rect.right, rect.bottom);/创建兼容位图 HBITMAP hOldMap = (HBITMAP):SelectObject(hDCMem, hBitMap);/将位图选入DC,并保存返回值 :BitBlt(hDCMem, 0, 0, rect.right, rect.bottom

3、, hDC, 0, 0, SRCCOPY);/将屏幕DC的图象复制到内存DC中 CImage image; image.Attach(hBitMap); image.Save(_T(c:/B.jpg);/如果文件后缀为.bmp,则保存为为bmp格式 image.Detach(); :SelectObject(hDCMem, hOldMap);/选入上次的返回值 /释放 :DeleteObject(hBitMap); :DeleteDC(hDCMem); :DeleteDC(hDC); return 0; 将当前MFC程序(这里是单文档程序)保存为图片,使用vs2005。第一个使用CImage类

4、保存图片,第二个使用BITMAPINFO。第一个:void CMainFrame:OnGetMap() HWND hwnd = this-GetSafeHwnd(); HDC hDC = :GetWindowDC(hwnd);/获取DC RECT rect; :GetWindowRect(hwnd, &rect);/获取屏幕大小 HDC hDCMem = :CreateCompatibleDC(hDC);/创建兼容DC HBITMAP hBitMap = :CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.to

5、p);/创建兼容位图 HBITMAP hOldMap = (HBITMAP):SelectObject(hDCMem, hBitMap);/将位图选入DC,并保存返回值 :BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);/将屏幕DC的图象复制到内存DC中 CImage image;/需要#include image.Attach(hBitMap); image.Save(_T(c:/B.jpg);/如果文件后缀为.bmp,则保存为为bmp格式 image.Detach();

6、 :SelectObject(hDCMem, hOldMap);/选入上次的返回值 /释放 :DeleteObject(hBitMap); :DeleteDC(hDCMem); :DeleteDC(hDC); VC6.0通过,第二个:void CMainFrame:OnGetMap() CDC* pDC = GetWindowDC(); CBitmap bitmap; CDC memDC ; CRect rect; GetWindowRect(rect); memDC.CreateCompatibleDC(pDC); bitmap.CreateCompatibleBitmap(pDC,rect

7、.Width(),rect.Height(); memDC.SelectObject(&bitmap); memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY); CFileDialog fDlg(FALSE,_T(bmp),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T(位图文件|*.bmp),this); if (fDlg.DoModal()=IDOK) CString bmpfile = fDlg.GetPathName(); CFile file(bmpfile,CFile:

8、modeCreate|CFile:modeWrite); BITMAP bInfo; bitmap.GetBitmap(&bInfo); /计算调色板大小 int panelsize = 0; if (bInfo.bmBitsPixelbmiHeader.biBitCount = bInfo.bmBitsPixel; bMapInfo-bmiHeader.biClrImportant = 0; bMapInfo-bmiHeader.biCompression = 0; bMapInfo-bmiHeader.biHeight = bInfo.bmHeight; bMapInfo-bmiHeade

9、r.biPlanes = bInfo.bmPlanes; bMapInfo-bmiHeader.biSize = sizeof(BITMAPINFO); bMapInfo-bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes; bMapInfo-bmiHeader.biWidth = bInfo.bmWidth; bMapInfo-bmiHeader.biXPelsPerMeter = 0; bMapInfo-bmiHeader.biYPelsPerMeter = 0; /获取位图的实际数据 char* pData = new ch

10、arbMapInfo-bmiHeader.biSizeImage; int len = GetDIBits(pDC-m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS); BITMAPFILEHEADER bFileHeader; bFileHeader.bfType = 0x4D42; bFileHeader.bfReserved1 = 0; bFileHeader.bfReserved2 = 0; bFileHeader.bfSize = sizeof(BITMAPFILEHEADER); bFileHeader.bfOf

11、fBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize; /向文件中写入位图数据 file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER); file.Write(&bMapInfo-bmiHeader,sizeof(BITMAPINFOHEADER); file.Write(pData,bMapInfo-bmiHeader.biSizeImage+panelsize); file.Close(); delete pData; LocalFree(bMapInfo); bit

12、map.DeleteObject(); memDC.DeleteDC(); c+截取屏幕图片并保存(函数代码实现) /获取桌面窗口的CDC CDC *pdeskdc = GetDesktopWindow()-GetDC(); CRect re; /获取窗口的大小 GetDesktopWindow()-GetClientRect(&re); CBitmap bmp; bmp.CreateCompatibleBitmap(pdeskdc , re.Width() , re.Height(); /创建一个兼容的内存画板 CDC memorydc; memorydc.CreateCompatibleD

13、C(pdeskdc); /选中画笔 CBitmap *pold = memorydc.SelectObject(&bmp); /绘制图像 memorydc.BitBlt(0,0,re.Width() ,re.Height(), pdeskdc , 0 ,0 ,SRCCOPY) ; /获取鼠标位置,然后添加鼠标图像 CPoint po; GetCursorPos(&po); HICON hinco = (HICON)GetCursor(); memorydc.DrawIcon(po.x-10 , po.y - 10 , hinco); /选中原来的画笔 memorydc.SelectObject

14、(pold); BITMAP bit; bmp.GetBitmap(&bit);/ DWORD size = bit.bmWidth * bit.bmHeight ; /定义 图像大小(单位:byte) DWORD size = bit.bmWidthBytes * bit.bmHeight ; LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR , size) ; /后面是创建一个bmp文件的必须文件头,想要了解可以参考msdn BITMAPINFOHEADER pbitinfo; pbitinfo.biBitCount = 24 ; pbitinfo.biClrI

15、mportant = 0; pbitinfo.biCompression = BI_RGB ; pbitinfo.biHeight = bit.bmHeight ; pbitinfo.biPlanes = 1 ; pbitinfo.biSize = sizeof(BITMAPINFOHEADER); pbitinfo.biSizeImage =size; pbitinfo.biWidth = bit.bmWidth; pbitinfo.biXPelsPerMeter = 0; pbitinfo.biYPelsPerMeter = 0 ; GetDIBits(pdeskdc-m_hDC , bm

16、p , 0 , pbitinfo.biHeight , lpdata , (BITMAPINFO*)&pbitinfo,DIB_RGB_COLORS); BITMAPFILEHEADER bfh; bfh.bfReserved1 = bfh.bfReserved2 = 0 ; bfh.bfType = (WORD)(M 8)|B); bfh.bfSize = 54 + size ; bfh.bfOffBits = 54 ; /写入文件 CFile file; if ( file.Open(1.bmp , CFile:modeCreate|CFile:modeWrite) ) file.Writ

17、eHuge( &bfh , sizeof(BITMAPFILEHEADER) ); file.WriteHuge(&pbitinfo , sizeof(BITMAPINFOHEADER); file.WriteHuge(lpdata , size); file.Close(); GlobalFree(lpdata);MFC程序实现给对话框添加背景图片 1.插入一个Bitmap的资源图片,假设资源名称为:IDC_BITMAP12.在CXXXDialog:OnPaint()中实现:void CMyDialogDlg:OnPaint() if (IsIconic() CPaintDC dc(this

18、); / 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); / 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;

19、 / 绘制图标 dc.DrawIcon(x, y, m_hIcon); else / / 给窗体添加背景 / CPaintDC dc(this); CRect rc; GetClientRect(&rc); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap* pbmpPri = dcMem.SelectObject(&bmpB

20、ackground); dc.StretchBlt(0,0,rc.Width(), rc.Height(), &dcMem,0,0,bitmap.bmWidth, bitmap.bmHeight, SRCCOPY); VC+中播放声音的方法声音是多媒体的一个重要组成部分,在应用程序中加入声音可以使界面更友好。在VC+中可以根据不同的应用要求,用不同的方法实现声音的播放。 一播放声音文件的简单方法 在VC+ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC+中提供的声音播放函数BOOL sndPlaySound ( LPC

21、STR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的.WAV文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC+中的帮助。 例如播放C:soundmusic.wav可以用sndPlaySound (c:soundmusic.wav,SND_ASYNC);或PlaySound(c:soundmusic.wav,NULL, SND_ASYNC|SND_NODEFAULT )

22、;如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。 二将声音文件加入到程序中 在VC+的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC+也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.WAV文件的声音播放。 要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件(实现过程并不复杂,这里不在叙述)。假设生成的声音文件资源标识符为IDR_WAVE1。在播放时只需要调用下面的语句: PlaySound(MAKEINTRESOURCE(ID

23、R_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP); 其中MAKEINTRESOURCE()宏将整数资源标识符转变为字符串,AfxGetResourceHandle()函数返回包含资源的模块句柄, SND_RESOURCE是必须的标志。 作为资源的声音文件的第二种播放方法是把资源读入内存后作为内存数据播放。具体步骤入下: 1获得包含资源的模块句柄: HMODULE hmod=AfxGetResourceHandle(); 2检索资源块信息: HRSRC hSndResource=Find

24、Resource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T(WAVE); 3. 装载资源数据并加锁: HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource); LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem); 4播放声音文件: sndPlaySound(lpMemSound,SND_MEMORY); 5释放资源句柄: FreeResource(hGlobalMem); 三播放声音文件的高级方法 在VC+中提供了一组对音频设备及多媒体文件直接进行操作的函数。利用这些函

25、数可以灵活地对声音文件进行各种处理。 首先介绍几个要用到的数据结构。WAVEFORMATEX结构定义了WAVE音频数据文件的格式。WAVEHDR结构定义了波形音频缓冲区。读出的数据首先要填充此缓冲区才能送音频设备播放。WAVEOUTCAPS结构描述了音频设备的性能。MMCKINFO结构包含了RIFF文件中一个块的信息。详细的说明请参考VC+中的帮助。 下面给出程序流程简图及程序源代码清单,在VC+环境下可直接使用: 源程序清单如下: LPSTR szFileName;/声音文件名 MMCKINFO mmckinfoParent; MMCKINFO mmckinfoSubChunk; DWORD

26、 dwFmtSize; HMMIO m_hmmio;/音频文件句柄 DWORD m_WaveLong; HPSTR lpData;/音频数据 HANDLE m_hData; HANDLE m_hFormat; WAVEFORMATEX * lpFormat; DWORD m_dwDataOffset; DWORD m_dwDataSize; WAVEHDR pWaveOutHdr; WAVEOUTCAPS pwoc; HWAVEOUT hWaveOut; /打开波形文件 if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF) /File open Error Error(Failed to open the file.);/错误处理函数 return false; /检查打开文件是否是声音文件 mmckinfoParent.fccType =mmioFOURCC(W,A,V,E); if(mmio

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2