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

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

 2008-01-19 20:25:19 来源:WEB开发网   
核心提示:调用SetBitmapButtonExtendedStyle()时,dwMask参数控制着那个样式将被改变,MFC程序员WTL指南(6)高级对话框用户界面类(7),默认值是0,意味着用新样式完全替换旧的样式,例如,InsertItem()函数返回一个CTreeItem而不是HTREEITEM,Image list ma

调用SetBitmapButtonExtendedStyle()时,dwMask参数控制着那个样式将被改变,默认值是0,意味着用新样式完全替换旧的样式。

Image list managementHIMAGELIST GetImageList()
HIMAGELIST SetImageList(HIMAGELIST hImageList)

调用SetImageList()设置按钮使用的image list。

Tooltip managementint GetToolTipTextLength()
bool GetToolTipText(LPTSTR lpstrText, int nLength)
bool SetToolTipText(LPCTSTR lpstrText)

CBitmapButton支持显示工具提示(tooltip),调用SetToolTipText()指定显示的文字。

Setting the images to usevoid SetImages(int nNormal, int nPushed = -1,int nFocusOrHover = -1, int nDisabled = -1)

调用SetImages()函数告诉按钮分别使用image list的拿一个图像表示那个状态。nNormal是必须的,其它是可选的,使用-1表示对应的状态没有图像。

CCheckListViewCtrl

CCheckListViewCtrl类在atlctrlx.h中定义,它是一个CWindowImpl派生类,实现了一个带检查框的list view控件。它和MFC的CCheckListBox不同,CCheckListBox只是一个list box,不是list view。CCheckListViewCtrl类非常简单,只添加了很少的函数,当然,它使用了一个新的辅助类CCheckListViewCtrlImplTraits,它和CWinTraits类的作用类似,只是第三个参数是list view控件的扩展样式属性,如果你没有定义自己的CCheckListViewCtrlImplTraits,它将使用没默认的样式:LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT。

下面是一个定义list view扩展样式属性的例子,加入了一个使用这个样式的新类。(注意,扩展属性必须包含LVS_EX_CHECKBOXES,否则会因起断言错误消息。)

typedef CCheckListViewCtrlImplTraits<
   WS_CHILD | WS_VISIBLE | LVS_REPORT,
   WS_EX_CLIENTEDGE,
   LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES | LVS_EX_UNDERLINEHOT |
    LVS_EX_ONECLICKACTIVATE> CMyCheckListTraits;
class CMyCheckListCtrl :
   public CCheckListViewCtrlImpl<CMyCheckListCtrl, CListViewCtrl,
                  CMyCheckListTraits>
{
private:
   typedef CCheckListViewCtrlImpl<CMyCheckListCtrl, CListViewCtrl,
                  CMyCheckListTraits> baseClass;
public:
   BEGIN_MSG_MAP(CMyCheckListCtrl)
     CHAIN_MSG_MAP(baseClass)
   END_MSG_MAP()
};
CCheckListViewCtrl methods SubclassWindow()

当子类化一个已经存在的list view控件时,SubclassWindow()查看CCheckListViewCtrlImplTraits的扩展样式属性并将之应用到控件上。未用到前两个参数(窗口样式和扩展窗口样式)。

SetCheckState() and GetCheckState()

这些方法实际上是在CListViewCtrl中,SetCheckState()使用行的索引和一个布尔类型参数,该布尔参数的值表示是否check这一行。GetCheckState()以行索引未参数,返回改行的checked状态。

CheckSelectedItems()

这个方法使用item的索引作为参数,它翻转这个item的check状态,这个item必须是被选定的,同时还将其他所有被选择的item设置成相应状态(译者加:多选状态下)。你大概不会用到这个方法,因为CCheckListViewCtrl会在check box被单击或用户按下了空格键时设置相应的item的状态。

下面是ControlMania2中的CCheckListViewCtrl的样子:

CTreeViewCtrlEx and CTreeItem

有两个类使得树控件的使用简化了很多:CTreeItem类封装了HTREEITEM,一个CTreeItem对象含有一个HTREEITEM和一个指向包含这个HTREEITEM的树控件的指针,使你不必每次调用都引用树控件;CTreeViewCtrlEx和CTreeViewCtrl一样,只是它的方法操作CTreeItem而不是HTREEITEM。例如,InsertItem()函数返回一个CTreeItem而不是HTREEITEM,你可以使用CTreeItem操作新添加的item。下面是一个例子:

// Using plain HTREEITEMs:
HTREEITEM hti, hti2;
   hti = m_wndTree.InsertItem ( "foo", TVI_ROOT, TVI_LAST );
   hti2 = m_wndTree.InsertItem ( "bar", hti, TVI_LAST );
   m_wndTree.SetItemData ( hti2, 100 );
// Using CTreeItems:
CTreeItem ti, ti2;
   ti = m_wndTreeEx.InsertItem ( "foo", TVI_ROOT, TVI_LAST );
   ti2 = ti.AddTail ( "bar", 0 );
   ti2.SetData ( 100 );

上一页  2 3 4 5 6 7 8 9 10 11  下一页

Tags:MFC 程序员 WTL

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