MFC按钮重绘

 1 //按钮重绘函数
 2  void CWeather091001Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) {
 3  CDC buttonDC;
 4  CBitmap bitmapTrans;
 5  BITMAP bmp;
 6  CDC mem;
 7  CRect rc;
 8  buttonDC.Attach(lpDrawItemStruct->hDC);
 9 //得到用于绘制按钮的DC
10  mem.CreateCompatibleDC(&buttonDC);
11 //准备向按钮区域传输图形
12  if(lpDrawItemStruct->CtlID == IDC_CLOSE)//重绘按钮的资源ID
13 {
14  rc = lpDrawItemStruct->rcItem;
15 //获取按钮所占的矩形大小
16  UINT state = lpDrawItemStruct->itemState;
17 //获取按钮当前的状态,不同状态绘制不同的按钮
18  if (state & ODS_FOCUS)//如果按钮已经取得焦点,绘制选中状态下的按钮
19  {
20  bitmapTrans.LoadBitmap(IDB_CLOSE3);
21  } else {
22  bitmapTrans.LoadBitmap(IDB_CLOSE1);
23  }
24  bitmapTrans.GetBitmap(&bmp);
25  CBitmap * old = mem.SelectObject(&bitmapTrans);
26  //向按钮传输位图,使用stretcnblt可以使图片随按钮大小而改变 buttonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); mem.SelectObject(old); bitmapTrans.DeleteObject();
27  }
28  CDialogEx::OnDrawItem(nIDCtl, lpDrawItemStruct);
29 }
时间: 2024-08-05 11:42:00

MFC按钮重绘的相关文章

mfc 按钮自绘

MFC  按钮自绘 :songyanwu 如果你是大神就没必要看这个文章了! 说明 源码下载:mfc 按钮自绘 先说说自己的一些想法:我就想把按钮封装成一个类,每次在使用的时候会很方便,当然在自己的类中去重载也可以! 此文章可借鉴学习:MFC基础,MFC自绘控件学习总结. (我也主要研究了自绘控件的子类化方法  ),看完前面推荐的文章,你似乎有何种感觉呢? 先实际操作吧;原理在后面介绍: 1 新建一个对画框 应用程序 2 新添加一个CMyButton继承CButton 3 为你自己添加的类 添加

【转】VC的MFC中重绘函数的使用总结(整理)

原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数MFC提供了三个函数用于窗口重绘InvalidateRect(&Rect)Invalidate()UpdateWindow()当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化)--WM_NVPAINT系统会自己搞定--WM_PAINT消息对应的函数是OnPain

MFC 窗口重绘问题

在客户区画直线等图形时, 发现当其最小化或者其他窗口遮挡时,出现窗口重绘,而将原来绘制的图形删除,上网上搜索知道,绘制图形的代码必须放置在Ondraw函数中,才能避免重绘时图形消失(因为一直在响应WM_PAINT消息,不断的重绘),但是这样做却只能保存最近的一次绘图,只适用于单幅固定的图形,对于其中有多幅图形就不能这么做了,解决的思路是:考虑到MFC时 文档/视图 类,视图CView负责数据的显示和修改,文档CDocument类负责数据的存储和加载,从而把数据管理和显示方法分离开来.我们在CDo

MFC窗口重绘

Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后, 通知所有视图作相应的改变, 和重画毫无关系. Invalidate()是使窗口无效,使系统向其发WM_PAINT消息,使的程序的OnPaint被调用重画客户区. 而UpdateAllViews()是文档与视之间的联系,调用从它会使程序与此文档相关的所有视的UpdateView被调用至于是否重画以

Windows开发进阶之VC++中如何实现对话框的界面重绘

技术:Windows 系统+Visual studio 2008 概述 应用程序界面是用户与应用程序之间的交互的桥梁和媒介,用户界面是应用程序中最重要的组成部分,也是最为直观的视觉体现.对用户而言,界面就是应用程序,界面设计的好坏,会直接影响应用程序的可用性,从而影响用户的体验. 在软件开发过程中,对界面的设计椅子都是一项很重要的技术,如今的应用软件界面可谓是“丰富多彩.美丽绝伦”,如大家熟悉的360安全卫士.腾讯QQ聊天软件.Visual C++ 编程词典软件等,都是非常不同于普通的对话框应用

一个重绘MFC的文件传输客户端

 一个重绘MFC的文件传输客户端,TCP/IP协议的文件传输客户端(支持上传.下载.续传.管理等功能,本处只选择了上传功能),从用户视觉上看,肯定比原生MFC界面要有感觉,啥也不说了,直接上图. 这个客户端界面,是从过浏览器通过ActiveX控件机制激活的,并且把文件传输任务传递给客户端的. (初始界面) (配置窗口) (锁屏对话框) (传输设置,还有很多配置,本次被省略了) (正在上传,右键菜单灵活多变) (上传完成) (回收站) 一个重绘MFC的文件传输客户端,布布扣,bubuko.co

【MFC】MFC中窗口重绘

MFC中窗口重绘 摘自:http://blog.csdn.net/shuilan0066/article/details/5859057 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT(通知非客户区有变化)WM_NVPAINT系统会自己搞定WM_PAINT消息对应的函数是

MFC控件重绘

MFC的一系列重绘控件: 如图所示: 示例下载地址:http://download.csdn.net/detail/qq_23992597/9510696

MFC中窗口重绘

搬家于CSDN 2015-05-14 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT    (通知非客户区有变化) WM_NVPAINT    系统会自己搞定 WM_PAINT         消息系统默认对应的函数是OnPaint(),但‍一般在重绘时都在OnDraw,因为在ONPAIN中调用了OND