- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在VC中如何使Static控件来显示图像
怎么样在VC中使用Static控件来显示图像?
MFC编写程序时,经常需要显示图像;根据GDI的要求,需要一个DC(设备内容)作为显示的基础;实际上任何Windows的窗口都可以作为一个DC,我们可以通过API或MFC的函数来得到,例如: HDC GetDC HWND ;---这里的HWND是窗口的句柄 CDC * CWnd::GetDC ;---这里的CWnd实际上是任何从CWnd的类
当我们使用MFC的单文档或多文档框架时,我们可以使用CView作为图像显示的DC,这个时候我们将绘制图像的操作放在OnDraw中就可以了;当窗口无效或更新的时候,框架会自动调用该函数来重新绘制图像;这里没有什么问题,我们主要来谈谈另外一种模式:当你需要在一个基于Dialog程序或一个CDialog控件中显示图像的问题。
实际上什么控件都可以作为图像显示的DC,他们可以是按钮、图片控件、Static控件等,只要有窗口的控件都可以得到DC。这里仅以Static控件作为图像显示的控件来介绍。
首先看我程序的基本逻辑:
源文件后面的按钮是用来选择位图文件的;而下面的图像显示区域是用来显示图像的StaticStatic中画出来。 第一次
一开始,我在CDialog对应的按钮处理程序中调用显示图像的代码,代码如下(IDC_PICVIEW为Static的ID):
然后在CImageCntDlg::OnPaint中也调用ShowImage TRUE ;然后编译运行。一开始还可以,选择BMP文件之后也可以正确选择,但当激活另一个程序(也就是隐藏了该窗口),然后再激活这个程序,这个时候发现Static中图像显示闪烁一下后变成灰色的背景。到底什么发生了? 到底什么发生了?
上面的现象告诉我们,即使我们将ShowImage放在CDialog的WM_PAINT处理消息中,在某些情况下仍然不能正确的处理。
从现象看,我们的图像应该是先画出来了,但然后又被清除了;感觉是PAINT的消息处理不正确。
没有办法,自己想不同那么就使用工具。VC自带的Spy++是个很好的工具,打开Spy++;运行程序,然后打开某个图像,这个时候在Spy++中找到对应的窗口,然后观察与该窗口相关的消息;如图:
这个时候我们切换程序窗口,先让其被覆盖,然后再显示;观察Spy++的结果,发现这样几条记录:
可以看到在WM_PAINT消息之后,窗口又收到了很多WM_CTLCOLORBTN和WM_CTLCOLORSTATIC等多条消息,查询MSDN知道这些是主窗体收到的绘制窗口上空间的消息;实际上,主窗体在处理WM_PAINT消息的时候也需要绘制发送消息给各个控件有机会绘制自己;而对应的消息是控件本身的WM_PAINT消息。
好了,终于找到原因了,我们在CDialog的OnPaint中调用ShowImage之后不久,OnPaint也主动通知各控件重绘,结果这个时候Static上的图像给覆盖了。 定义自己的Static控件
知道原因就好办了,只需要将ShowImage放到适当的地方就可以了。这里需要自己从CStatic继承一个自己的类,然后重写其OnPaint函数,在其中显示图像。代码如下:
void?CImageWnd::OnPaint HDC?hDC? ?::GetDC m_hWnd ; PAINTSTRUCT?paintStruct; ::BeginPaint m_hWnd,paintStruct ; DrawImage m_strImageName ; TRACE CImageWnd?OnPaint!\n ; ::EndPaint m_hWnd,paintStruct ; void?CImageWnd::DrawImage CString?imageName if imageName? ? ?return?; m_hBitmap? ?NULL; m_hBitmap? HBITMAP ::LoadImage?? NULL,imageName.GetBuffer , IMAGE_BITMAP,?0,?0,?LR_DEFAULTCOLOR?|?LR_LOADFROMFILE ; if m_hBitmap? ?NULL ?return?; CDC?*?pDC? ?GetDC ; CDC?cdc; cdc.CreateCompatibleDC pDC ; cdc.SelectObject m_hBitmap ; int?startLeft? ?0,startTop? ?0; BITMAP?bmpInfo; GetObject m_hBitmap,?sizeof BITMAP ,?bmpInfo ; GetClientRect m_picViewRect ; startLeft? ?
您可能关注的文档
- 国内权威3G软工程师培训.docx
- 国内近三年海明研究综述.doc
- 国古代思想宝库元复习设计.doc
- 国外比较著名的习科学研究中心简介.doc
- 国外电子商务现2014.docx
- 国学《声律启蒙讲座稿.doc
- 国学修养与人生慧考试.doc
- 国学名师姚淦铭智慧孔子带到申城.doc
- 国学精义之诸子家——名家论坛第51部.docx
- 国家公务员考试测真题答案下载【完整打印版】.doc
- Haier海尔413升风冷变频多门冰箱 BCD-413WGHFD1BSJU1(白)说明书用户手册.pdf
- Siemens西门子工业抽屉式断路器主回路后垂直连接 抽屉式断路器主回路后垂直连接使用手册.pdf
- Samsung三星智能佩戴设备 Galaxy Fit3安全手册.pdf
- Samsung三星滚筒洗衣机 AI神 黑钻热泵洗烘旗舰 WD18DB8995BZSC使用手册.pdf
- Sakura樱花消毒柜 保洁柜消毒柜 SCQ-130D6用户手册说明书.pdf
- Hifiman头领科技ARYA UNVEILED说明书用户手册.pdf
- Siemens西门子工业抽屉式主回路连接前置端子 支撑件 抽屉式主回路连接前置端子 支撑件使用手册.pdf
- Siemens西门子工业中性线的外部电流传感器 中性线的外部电流传感器使用手册.pdf
- Siemens西门子工业电子脱扣单元 电子脱扣单元使用手册.pdf
- Razer雷蛇Playstation 专用雷蛇战锤狂鲨极速版 RZ12-038203 用户指南 (简体中文)说明书用户手册.pdf
最近下载
- 腰椎的解剖及腰部的层次解剖ppt参考课件.ppt
- 知识产权助推新质生产力发展.pptx VIP
- NB∕T 10805-2021 水电工程溃坝洪水与非恒定流计算规范.pdf
- 2022年鄄城县工会系统招聘考试题库及答案解析.docx VIP
- 2024年医师定期考核必考题库及答案.pdf
- 2023年互联网信息审核员理论考试题库(含答案).pdf VIP
- 2024中考语文《西游记》历年真题专练(学生版+解析版).pdf VIP
- 高中音乐鉴赏测试题.doc VIP
- 人教三上数学《数学广角—集合》单元作业设计方案(13页).pdf VIP
- 省级政府和重点城市一体化政务服务能力调查评估报告2021年.pdf VIP
文档评论(0)