CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

SendMessage(WM_DRAWITEM...)?

楼主ni_ch(泥巴)2001-07-24 19:32:15 在 VC/MFC / 基础类 提问

一个对话框,有个按钮,  
  按钮的Style   是   BS_ICON|BS_OWNERDRAW,  
  我在一个程序中修改了按钮的Icon,但是论理DrawItem   是不会自动促动的,  
  所以我要SendMessage...  
  但是第二,第三个参数如何设置呢? 问题点数:20、回复次数:7Top

1 楼ni_ch(泥巴)回复于 2001-07-24 19:32:23 得分 0

谢谢Top

2 楼ShyWJB(家宝)回复于 2001-07-24 22:22:42 得分 0

如果想自绘一个控件,一般要从控件类中继承一个新的控件,在新控件OnDrawItem中处理自绘,这个函数的LPDRAWITEMSTRUCT   lpDrawItemStruct参数里面有该控件的DC,你的这种想法没试过,我这就试试,不管结果如何,再这里回复你  
  Top

3 楼ShyWJB(家宝)回复于 2001-07-24 22:35:18 得分 0

还是从CButton继承新类吧!下面是从CButton类的实现文件中摘录下来的  
  //   Derived   class   is   responsible   for   implementing   all   of   these   handlers  
  //       for   owner/self   draw   controls  
  void   CButton::DrawItem(LPDRAWITEMSTRUCT)  
  {  
  ASSERT(FALSE);  
  }  
   
  BOOL   CButton::OnChildNotify(UINT   message,   WPARAM   wParam,   LPARAM   lParam,  
  LRESULT*   pResult)  
  {  
  if   (message   !=   WM_DRAWITEM)  
  return   CWnd::OnChildNotify(message,   wParam,   lParam,   pResult);  
   
  ASSERT(pResult   ==   NULL);               //   no   return   value   expected  
  UNUSED(pResult);   //   unused   in   release   builds  
  DrawItem((LPDRAWITEMSTRUCT)lParam);  
  return   TRUE;  
  }  
  Top

4 楼azuo_lee(宿醉)回复于 2001-07-24 22:45:03 得分 0

<<我在一个程序中修改了按钮的Icon,但是论理DrawItem   是不会自动促动的,  
  <<所以我要SendMessage...  
  恰恰相反,DrawItem消息是由Windows在需要绘制控件时“自动”发送给你的窗口的,它会设置好第二第三个参数的。你不必发送此消息,你要做的只是在Button所在的父窗口中接管OnDrawItem(如果你使用的是标准的CButton类)或是在Button自己的类中重载DrawItem(如果你是自己从CButton派生了一个类)来完成绘制工作即可。  
  Top

5 楼ni_ch(泥巴)回复于 2001-07-24 23:26:09 得分 0

to   azuo_lee():  
          你没有明白我的意思,我给按钮设置了一个宽、高,在程序运行时可以让用户修改,这时必须我来手动发消息,系统以为没有必要,其实有必要  
          我已经重载了DrawItem(...),现在问题是我想自由的调用他,而不是由系统!!Top

6 楼ShyWJB(家宝)回复于 2001-07-24 23:34:30 得分 10

你可以在控件类中Invalidate,再UpdateWindow强制更新不就让系统自动发送你要求的消息了吗Top

7 楼azuo_lee(宿醉)回复于 2001-07-24 23:35:26 得分 10

强制重绘可由RedrawWindow或UpdateWindow来实现。Top

相关问题

  • SendMessage(WM_GETTEXT)怎么用呢?
  • 如何用sendmessage发送wm_lbuttondown?
  • WM_QUIT消息能用SendMessage发送吗
  • 当SendMessage与WM_COPYDATA发生矛盾时……………
  • NM_CUSTOMDRAW、WM_DRAWITEM及虚函数DrawItem,之间有什么区别?
  • 如何发送WM_PAINT消息? GetParent()->SendMessage(WM_PAINT); ??????
  • SendMessage
  • SendMessage
  • SendMessage?
  • SendMessage

关键词

  • 控件
  • drawitem
  • lpdrawitemstruct
  • cbutton
  • presult
  • 按钮
  • lparam
  • wparam
  • message

得分解答快速导航

  • 帖主:ni_ch
  • ShyWJB
  • azuo_lee

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo