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

加入VIP,省得不是一点点
 

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

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

下载须知

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

版权提示 | 免责声明

本文(加背景图片的一种方法.DOC)为本站会员(天***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

加背景图片的一种方法.DOC

1、1加背景图片的一种方法Windows 在向窗口发送 WM_PAINT 消息之前,总会发送一个 WM_ERASEBKGND 消息通知该窗口擦除背景,默认情况下,Windows 将以窗口的背景色清除该窗口。 可以响应窗口(包括子元素)的 WM_ERASEBKGND,以更改它们的背景。WM_ERASEBKGND 的映射函数原型如下:afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返 回 值:指定背景是否已清除,如果为 FALSE,系统将自动清除 参 数:pDC 指定了绘制操作所使用的设备环境。 大致代码时:BOOL CUi4Dlg:OnInitDialog() /加载位

2、图/CBitmap m_Back;m_Back.LoadBitmap(IDB_BACK);BOOL CUi4Dlg:OnEraseBkgnd(CDC* pDC) CDC dc;dc.CreateCompatibleDC(pDC);dc.SelectObject(/获取 BITMAP 对象BITMAP hb;m_Back.GetBitmap(/获取窗口大小CRect rt;GetClientRect(/显示位图pDC-StretchBlt(0, 0, rt.Width(), rt.Height(),return TRUE;HBRUSH CUi4Dlg:OnCtlColor(CDC* pDC, C

3、Wnd* pWnd, UINT nCtlColor) /设置透明背景模式pDC-SetBkMode(TRANSPARENT);/设置背景刷子为空return (HBRUSH):GetStockObject(HOLLOW_BRUSH);显示位图原理:1、声明一个 CBitmap 对象,并从资源中加位图。2、创建一个兼容的 DC,用 CDC 的成员函数 CreateCompatibleDC。3、用 CDC 的成员函数 SelectObject 将位图选入到兼容 DC 中。4、用 CDC 的成员函数 BitBlt 来输出位图。GetWindowRect(rect);GetClientRect(rec

4、t);SetWindowPos用图片控件,好像图片最多色彩数不超过 256色,也就是 8 位,但是用代码在里面写的方法就可以解决这个问题了.2窗口的最前端显示Windows API 改变窗口的属性。一直保持在窗口的最前端,函数 SetWindowPos 声明如下:WINUSERAPI BOOL WINAPI SetWindowPos(_in HWND hWnd, / hWnd 是窗口的句柄。_in_opt HWND hWndInsertAfter, / hWndInsertAfter 是窗口 Z 顺序属性。_in int X, / X 是窗口在 X 轴的位置。_in int Y, / Y 是窗

5、口在 Y 辆的位置。_in int cx, / cx 是窗口的宽度。_in int cy, / cy 是窗口的高度。_in UINT uFlags / uFlags 是选择设置的标志。); 调用这个函数的例子如下:LRESULT CCaiWinMsg:OnCommand(int nID,int nEvent) switch (nID) / 菜单选项命令响应: case IDC_CREATEBTN: /显示一个按钮。if (!m_hBtn) m_hBtn = CreateWindow(_T(“BUTTON“),_T(“按钮“),WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,

6、50,50,100,32,m_hWnd,(HMENU)IDC_BTN,m_hInstance,NULL ); break;case IDC_BTN: OutputDebugString(_T(“按钮按下rn“); static bool bChangeText = true;if (bChangeText) SetWindowText(m_hBtn,_T(“改变它“); /设置按钮的文字。MoveWindow(m_hBtn,10,10,100,32,TRUE); /改变按钮窗口的位置和大小。/改变主窗口为最顶端窗口。SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,

7、0,SWP_NOMOVE|SWP_NOSIZE); else SetWindowText(m_hBtn,_T(“按钮“); / 设置按钮的文字。MoveWindow(m_hBtn,50,50,100,32,TRUE); /改变按钮窗口的位置和大小。/改变主窗口为普通窗口。SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);/每一次都改变。bChangeText = !bChangeText; break;default: return CCaiWin:OnCommand(nID,nEvent);return 1;3

8、图片显示方法(一) 非动态载入图片.方法 1.用 picture 控件来实现.在对话框中加入 Picture 控件,属性页中 GeneralType 设为 Bitmap, Image 中选中相关联的图片资源号。这样就编译运行,就会发现它己经可以了。 图片可能复盖了其它控件!这是由于你的 Picture 控件是后面放上去的,会显示在最上层,所以有些控件看不到了。有两种方法可以解决:(1)、选中所有控件 Ctrl+A, 然后取消对图片控件的选择,将其它控件剪切 Ctrl+X,再粘帖 Ctrl+C, 编译运行或 Ctrl+T 看看,是不是可以了?(2)、在.rc 文件中找到此对话框的定义,此处以例子

9、中的一对话框为例。 BEGIN CONTROL 129,IDC_STATIC,“Static“,SS_BITMAP,0,0,266,201 PUSHBUTTON “取消“,IDCANCEL,210,23,50,14 DEFPUSHBUTTON “确定“,IDOK,210,7,50,14 LTEXT “这是个通过图片控件来实现 Dialog 背景的“,IDC_STATIC,13,106,156,8 END 在 BEGIN 至 END 中便是各个控件的定义和先后顺序,可以随意调整它们的顺序,这样最先的,它将会显示在最底层(即可能被其它控件覆盖) 。方法 2.通过背景图同样如上,先载入一张图片,ID

10、 为 IDB_BITMAP2TestDlg.h 中: CBrush m_brBk;/在 public 中定义 TestDlg.cpp 中,在初始化函数 OnInitDialog()中加入:BOOL CTestDlg:OnInitDialog() CDialog:OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP2);m_brBk.CreatePatternBrush(bmp.DeleteObject();return TRUE; / return TRUE unless you set the focus to a control再打开类向

11、导,找到 WM_CTLCOLOR 消息,重载得对应函数 OnCtlColor(),添加如下:HBRUSH CTestDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);if (pWnd = this) return m_brBk; return hbr;A、非动态显示图片(即图片先通过资源管理器载入,有一个固定 ID)B、动态载入图片(即只需要在程序中指定图片的路径即可载入)环境:建一个基于对话框的工程,名为 Ttest 对话框类为

12、CTestDlg4方法 3.在 WM_PAINT 中画图 最常用的方法,各类窗体、控件要加上背景都基本上是在 OnPaint 中将图片画上。具体做法如下:CBitmap bmp; /从资源中载入图片 -bmp.LoadBitmap(IDB_BITMAP1); BITMAP bmpInfo; /得到图片信息-bmp.GetBitmap( CDC dcMemory; /在内存中创建一个位图兼容设备-dcMemory.CreateCompatibleDC(CBitmap *pOldBmp=dcMemory.SelectObject( /将图片选入兼容设备/将兼容设备的内容 copy 到屏幕设备中,实

13、现真正的 Paint dc.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, dcMemory.SelectObject(pOldBmp); /将设备还原这样图片便显示在主对话框上。特殊处理:是不是经常有人提到某些加快图形显示、减少闪烁?处理什么 WM_ERASEBKGND 消息?确实是这样,应为每个窗体重画时,它先会发 WM_ERASEBKGND 消息,让窗体用设置好的刷子将窗体需要重画的区域刷一次,然后才会发送 WM_PAINT 消息,将需要的再画上去。这样就可以保证不会有残留的图形。但这样就会在短暂的时间内出现灰色背景,如果执行比较慢,就会让

14、人感觉到。因此如果你确定不需要清除原有的背景,那么你就可以在 OnEraseBkgnd 中直接返回 TRUE,或者直接在这里面绘图。 但一定要注意,不擦除背景时弄不好会带来上些麻烦事,源码中有此演示(由于一开始设置为不擦除背景,所以窗体创建时,没有画图的部分将显示为原来屏幕上的图象) 。(二) 动态载入图片方法 4.图像控件(本例用 KoDak 图像编辑控件) - 未测试1. 首先应该保证系统中有这个控件。注意,它不能单独使用,必须和其他几个控件(特别是 Imgcmn.dll)一同使用。如果没有,从别的机器上 copy 过来即可。这几个文件是Imgadmin.ocx,Imgcmn.dll,Im

15、gedit.ocx,Imgscan.ocx ,Imgshl.dll,Imgthumb.ocx,Imgutil.dll,把它们 copy 到 windows“system 目录下,然后用 regsvr32.exe 将它们分别注册。 2. 打开工程,进入资源管理器,在对话框上单击右键,单击 Insert Activex control 选择 Kodak图象编辑控件,大小任意。 3. 在对话框上选中该控件,为其添加变量:m_ctrlPicture。 。 4. 在 BOOL CTestDlg:OnInitDialog()添加如下:BOOL CTestDlg:OnInitDialog() CDialog

16、:OnInitDialog();m_ctrlPicture.SetImage(“aa.jpg“); /保证图像在工程目录下,也可以写绝对路径m_ctrlPicture.Display();return TRUE; / return TRUE unless you set the focus to a control编译运行就 OK 了,此种方法的好处就是可能针对多种图像格式. 5首先在 CTestDlg 类中声明一个变量:CBitmap m_bmp;然后我们在对话框中加入一个 picture 标签,名为 IDC_STATIC1,然后添加如下代码:BOOL CDisplayPic:OnInitD

17、ialog() CDialog:OnInitDialog();if( m_bmp.m_hObject != NULL ) m_bmp.DeleteObject(); /判断HBITMAP hbmp = (HBITMAP):LoadImage(AfxGetInstanceHandle(),“c:“aaa.bmp“,IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION|LR_LOADFROMFILE); /载入图片if( hbmp = NULL ) return FALSE;/该断程序用来取得加载的 BMP 的信息/m_bmp.Attach( hbmp );DIBSECTI

18、ON ds;BITMAPINFOHEADER m_bmp.GetObject( sizeof(ds), int cx=bminfo.biWidth; /得到图像宽度int cy=bminfo.biHeight; /得到图像高度/得到图像的宽度和高度后,就可以对图像大小进行适应,即调整控件的大小,让它正好显示一张图片CRect rect;GetDlgItem(IDC_STATIC1)-GetWindowRect(ScreenToClient(GetDlgItem(IDC_STATIC1)-MoveWindow(rect.left,rect.top,cx,cy,true);/调整大小return

19、TRUE; / return TRUE unless you set the focus to a control/图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载 WM_PAINT 消息void CDisplayPic:OnPaint() /以下三种情况任选一种会是不同效果(只能一种存在)/CPaintDC dc(this); /若用此句,得到的是对话框的 DC,图片将被绘制在对话框上.CPaintDC dc(GetDlgItem(IDC_STATIC1); /用这句,得到 picture 控件的 DC,图像将被绘制在控件上CDC dc; /若用这两句,得到的是屏幕

20、的 DC,图片将被绘制在屏幕上dc.m_hDC=:GetDC(NULL); CRect rcclient; GetDlgItem(IDC_STATIC1)-GetClientRect(CDC memdc; memdc.CreateCompatibleDC( CBitmap bitmap;bitmap.CreateCompatibleBitmap(memdc.SelectObject( CWnd:DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);CDC maskdc; maskdc.CreateCompatibleDC(CBitmap maskbi

21、tmap;maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);maskdc.SelectObject( maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), CBrush brush; brush.CreatePatternBrush(dc.FillRect(rcclient, dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), brush.

22、DeleteObject();/ Do not call CDialog:OnPaint() for painting messages方法 5 通过 CBitmap,HBITMAP,直接用 OnPaint()绘制6wince 中显示 BMP、JPG、Gif 以及 PNG 的方法wince 中的图片解码方案中,利用 Wince 的 API 解码应该是用的非常广泛的。一来实现简单,二来支持多种图片格式(BMP、JPG、PNG、GIF) ,而且对每一种中的具体格式支持也很好。 (微软自己做的,经过了各种样本的测试) 。作一个简单概括,并给出源代码。1 确保操作系统中加入了组件,如果没有 COM 存

23、储和 Image 的组件(在 Wince 的 core licence中就提供此组件) ,那么下面的都是白搭,程序可能都不能启动。2 添加头文件 #include #include 3 制作自己的读取文件函数,此函数返回 HBITMAP,需要的地方可以自己放缩以及实现显示效果等等。HBITMAP LoadImageFromFile(TCHAR * pFileImage) IImagingFactory *pImgFactory = NULL;IImage *pImageBmp = NULL; CoInitializeEx(NULL, COINIT_MULTITHREADED); HBITMAP

24、 hResult = 0;if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory, NULL,CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void *)HRESULT hr = pImgFactory-CreateImageFromFile(pFileImage, if (SUCCEEDED(hr)CDC dcBitmap;dcBitmap.CreateCompatibleDC(hResult = CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Wid

25、th, imageInfo.Height);HGDIOBJ hOldBitmap = SelectObject(dcBitmap, hResult);/note:内存不足的话,Draw 操作可能会失败pImage-Draw(dcBitmap, CRect(0, 0, stImageInfo.Width, stImageInfo.Height), NULL); SelectObject(dcBitmap, hOldBitmap);DeleteDC(dcBitmap);pImageBmp-Release();pImgFactory-Release();CoUninitialize();return hResult;/end LoadImageFromFile4 局限性:A 需要 OS 组件支持,有的 OS 上可能没有。B 为 OS 提供的 API,不知道具体细节,尤其是对内存的控制不方便。C 如果要读取某一图片各种的某一字段,运用此 API 将不方便,需要自己解码。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。