WTL CTabViewImpl 重绘Tab控件

imlmy 2011-10-24 03:26:08
我先实现一个自定义的Tab View控件,继承自CTabViewImpl,重绘其Tab标签。发现CTabViewImpl的CTabCtrl m_tab成员变量就是其tab标签,但是我用自定义的TabCtrl类SubclassWindow(m_tab),实现tab的重绘,发现不会调用自定义类的绘制函数,还是调用了CTabCtrl中的绘制函数。
...全文
435 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
imlmy 2011-10-25
  • 打赏
  • 举报
回复
BEGIN_MSG_MAP(CZyTabCtrl)
REFLECT_NOTIFICATIONS()
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
MESSAGE_HANDLER(WM_SIZE, OnSize)
END_MSG_MAP()
是不是这样加,还是没反应。我在上面下了断点,如果有消息的话不管有没有自定义处理函数都会运行到该断点,但是现在只在控件Destroy时候才有消息
康斯坦汀 2011-10-25
  • 打赏
  • 举报
回复
3楼说的对,要在BEGIN_MSG_MAP中加入REFLECT_NOTIFICATIONS(),否则子控件收不到消息。
healer_kx 2011-10-25
  • 打赏
  • 举报
回复
父窗口有这个 宏吗?
REFLECT_NOTIFICATIONS()
imlmy 2011-10-25
  • 打赏
  • 举报
回复
目前只能收到Destroy消息,其他WM_PAINT等消息收不到
imlmy 2011-10-25
  • 打赏
  • 举报
回复
自己顶一下
imlmy 2011-10-25
  • 打赏
  • 举报
回复
找到原因了,程序里面有两个View类,一个是CTabView,另一个是自定义的view类,继承自CTabViewImpl。CTabView管理所有的自定义view对象。之前是子类化了自定义view类的tab控件,实际界面上的tab控件是属于CTabView的。低级的错误。
谢谢各位的帮助
imlmy 2011-10-25
  • 打赏
  • 举报
回复
我是重载了一个tab控件,想响应他的WM_PAINT消息进行重绘。我用subclasswindow方法子类化那个控件,但是没有办法响应他的绘制消息,只响应到销毁的消息。我使用wtl
康斯坦汀 2011-10-25
  • 打赏
  • 举报
回复
在的地方不对吧,应该这样:
比如你有一个窗体,窗体上面有一个子控件,需要子控件处理消息,要在窗体的消息映射里加
REFLECT_NOTIFICATIONS(),然后子控件的消息可以被处理:
例如:
BEGIN_MSG_MAP(CCaptionWnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnSysColorChange)
MESSAGE_HANDLER(WM_SIZE, OnSize)
COMMAND_ID_HANDLER(IDC_FLAT_BUTTON, OnFlatButton)
REFLECT_NOTIFICATIONS() // required by owner drawn buttons
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
END_MSG_MAP()

CCaptionWnd 是一个窗口,IDC_FLAT_BUTTON是上面的一个自绘的按钮子控件。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧