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 ); |
CTreeViewCtrl对HTREEITEM的每一个操作,CTreeItem都有与之对应的方法,正像每一个关于HWND的API都有一个CWindow方法与之对应一样。查看ControlMania2的代码可以看到更多的CTreeViewCtrlEx和CTreeItem类的方法的演示。
CHyperLink
CHyperLink是一个CWindowImpl派生类,它子类化一个static text控件,使之变成可点击的超链接。CHyperLink根据用户的IE使用的颜色画链接对象,还支持键盘导航。CHyperLink类的构造函数没有参数,下面是其它的公有方法。
CHyperLink methods
CHyperLinkImpl类内含实现一个超链接的全部代码,如果不需要重载它的方法或处理消息的话,你可以直接使用CHyperLink类。
SubclassWindow() BOOL SubclassWindow(HWND hWnd) |
重载函数SubclassWindow()完成控件子类化,然后初始化该类保有的内部数据。
Text label management bool GetLabel(LPTSTR lpstrBuffer, int nLength) bool SetLabel(LPCTSTR lpstrLabel) |
获得或设置控件显示的文字,如果不指定显示文字,控件会显示资源编辑器指定给控件的静态字符串。
Hyperlink management bool GetHyperLink(LPTSTR lpstrBuffer, int nLength) bool SetHyperLink(LPCTSTR lpstrLink) |
获得或设置控件关联超链接的URL,如果不指定超链接URL,控件会使用显示的文字字符串作为URL。
Navigation bool Navigate() |
导航到当前超链接的URL,该URL或者是由SetHyperLink()函数指定的URL,或者就是控件的窗口文字。
Tooltip management
没有公开的方法设置工具提示,所以需要直接使用CToolTipCtrl成员m_tip。
下图显示的就是ControlMania2对话框中的超链接控件:
在OnInitDialog()函数中设置URL:
m_wndLink.SetHyperLink ( _T("http://www.codeproject.com/") ); |