WEB开发网
开发学院软件开发VC MFC程序员的WTL指南(6)高级对话框用户界面类 阅读

MFC程序员的WTL指南(6)高级对话框用户界面类

 2006-07-22 22:03:25 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 第五章介绍在上一篇文章我们介绍了一些与对话框和控件有关的WTL的特性,它们和MFC的相应的类作用相同,MFC程序员的WTL指南(6)高级对话框用户界面类,本文将介绍一些新类实现高级界面特性新类:控件自画和自定外观控件,新的WTL控件,你可以在父窗口处理它们,也可以将它们反射会控件,UI

本文示例源代码或素材下载

第五章介绍

在上一篇文章我们介绍了一些与对话框和控件有关的WTL的特性,它们和MFC的相应的类作用相同。本文将介绍一些新类实现高级界面特性新类:控件自画和自定外观控件,新的WTL控件,UI updating和对话框数据验证(DDV)。

特别的自画和外观定制类

由于自画和定制外观控件在图形用户界面中是很常用的手段,所以WTL提供了几个嵌入类来完成这些令人厌烦的工作。我接着就会介绍它们,事实上我们在上一个例子工程ControlMania2的结尾部分已经这么做了。如果你正随着我的讲解用应用程序生成向导创建新工程,请不要忘了使用无模式对话框,为了使正常工作必须使用无模式对话框,我会在对话框中控件的UI Updating部分详细解释为什么这样作。

COwnerDraw

控件的自画需要响应四个消息:WM_MEASUREITEM, WM_DRAWITEM, WM_COMPAREITEM, 和WM_DELETEITEM,在atlframe.h头文件中定义的COwnerDraw类可以简化这些工作,使用这个类就不需要处理这四个消息,你只需将消息链入COwnerDraw,它会调用你的类中的重载函数。

如何将消息链入COwnerDraw取决与你是否将消息反射给控件,两种方法有些不同。下面是COwnerDraw类的消息映射链,它使得两种方法的差别更加明显:

template <class T> class COwnerDraw
{
public:
 BEGIN_MSG_MAP(COwnerDraw<T>)
  MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
  MESSAGE_HANDLER(WM_MEASUREITEM, OnMeasureItem)
  MESSAGE_HANDLER(WM_COMPAREITEM, OnCompareItem)
  MESSAGE_HANDLER(WM_DELETEITEM, OnDeleteItem)
 ALT_MSG_MAP(1)
  MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem)
  MESSAGE_HANDLER(OCM_MEASUREITEM, OnMeasureItem)
  MESSAGE_HANDLER(OCM_COMPAREITEM, OnCompareItem)
  MESSAGE_HANDLER(OCM_DELETEITEM, OnDeleteItem)
 END_MSG_MAP()
};

注意,消息映射链的主要部分处理WM_*消息,而ATL部分处理反射的消息,OCM_*。自画的通知消息就像WM_NOTIFY消息一样,你可以在父窗口处理它们,也可以将它们反射会控件,如果你使用前一种方法,消息被直接链入COwnerDraw:

1 2 3 4 5 6  下一页

Tags:MFC 程序员 WTL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接