Download demo project - 26 Kb
Download source files - 6 Kb

This example shows the hot list control used in a CView class. A tool tip displays
information about the highlighted item. George Washington is the currently selected item,
but the mouse is hovering over Martin Van Buren, and display the tool tip assigned to
Martin Van Buren.

This example shows the hot list control used in a dialog box. The selected item is
Chester Arthur, but the mouse is currently highlighting Abraham Lincoln. Scroll buttons at
the top an bottom of the control allow the user to scroll this list.
Description
CHotListCtrl is not derived from CListCtrl.
CHotListCtrl mimics the behavior of the TLookOut control developed
by Peter Thornqvist for Borland's Delphi. Peter described the control as being similar to
a control used in Microsoft Outlook. I do not use Microsoft Outlook, so I do not know
if this is true, or how similar the control is to anything in Outlook.
The control displays a list of items. For each item, you can specify the text for the
item (from a string or resource ID), the tool tip text to display when the item is
highlighted, and a dwData value for the item.
When an item is selected, a WM_HOT_LIST_CHANGED (user-defined) message is sent
to the parent window. As the mouse moves over each item in the list, that item is
highlighted (drawn raised). The currently selected item is drawn pressed. There are
scroll buttons at the top and bottom for lists that exceed the height of the control.
CHotListCtrl is Unicode safe (to the best of my knowledge).
Using the Control in a View
- Add a
CHotListCtrl member to you CView derived class.
class CHotsView : public CView
{
protected: CHotsView();
DECLARE_DYNCREATE(CHotsView)
public:
CHotsDoc* GetDocument();
CHotListCtrl m_HotListCtrl;
[snip]
- On
CView::InitialUpdate, create the control, and populate it with the
desired list items.
void CHotsView::OnInitialUpdate()
{
CView::OnInitialUpdate();
if (::IsWindow(m_HotListCtrl.m_hWnd) == FALSE)
{
CRect rc;
GetClientRect(&rc);
m_HotListCtrl.Create(WS_CHILD | WS_VISIBLE, rc, this, IDC_HOTLIST_CTRL);
m_HotListCtrl.AddItem("George Washington", IDS_PRES1, 0);
m_HotListCtrl.AddItem("John Adams", IDS_PRES2, 0);
m_HotListCtrl.AddItem("Thomas Jefferson", IDS_PRES3, 0);
m_HotListCtrl.AddItem("James Madison", IDS_PRES4, 0);
m_HotListCtrl.AddItem("James Monroe", IDS_PRES5, 0);
m_HotListCtrl.AddItem("John Quincy Adams", IDS_PRES6, 0);
m_HotListCtrl.AddItem("Andrew Jackson", IDS_PRES7, 0);
m_HotListCtrl.AddItem("Martin Van Buren", IDS_PRES8, 0);
m_HotListCtrl.AddItem("William Henry Harrison", IDS_PRES9, 0);
m_HotListCtrl.AddItem("John Tyler", IDS_PRES10, 0);
}
}
- Handle
WM_SIZE messages in your CView derived class to
reposition the control.
void CHotsView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if (::IsWindow(m_HotListCtrl.m_hWnd))
{
CRect rc;
GetClientRect(&rc);
m_HotListCtrl.MoveWindow(&rc, TRUE);
}
}
Using the Control in a Dialog
There is more than one way to use a custom control in a dialog, but this is the way
I chose for this example.
- Add a button to your dialog resource. Make it the size you desire for the control.
- Use ClassWizard to add to your dialog class, a
CButton data member for
the button. Change the CButton declaration to CHotListCtrl.
class CTestDlg : public CDialog
{
public:
CTestDlg(CWnd* pParent = NULL);
enum { IDD = IDD_TEST_DIALOG };
CHotListCtrl m_HotListCtrl;
[snip]
- Process your
WM_INITDIALOG message for the dialog. In your
WM_INITDIALOG handler, call CHotListCtrl::Initialize(),
and populate the control with the desired list items.
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_HotListCtrl.Initialize();
CRect rc;
m_HotListCtrl.AddItem("George Washington", 0, 0);
m_HotListCtrl.AddItem("Thomas Jefferson", 0, 0);
m_HotListCtrl.AddItem("John Adams", 0, 0);
m_HotListCtrl.AddItem("John Tyler", 0, 0);
m_HotListCtrl.AddItem("Millard Fillmore", 0, 0);
return TRUE; }
Filling CHotListCtrl
Use the following functions to fill the list control:
void CHotListCtrl::AddItem(CString strText, UINT nToolTipID, DWORD dwData);
void CHotListCtrl::AddItem(UINT nIDText, UINT nToolTipID, DWORD dwData);
strText is the text to display for the list item.
nIDText is the resource string identifier of the text to display for the list item
nToolTipID is the resource string identifier of the text to display for the list item.
dwData is the data member for the list control item.
CHotListCtrl Notifications
When a new list control item is selected, the control sends a
WM_HOT_LIST_CHANGED (user-defined) message is sent to the parent window,
with the following parameters:
wParam is the number of the newly selected item in the list (zero-based).
lParam is the dwData member for the newly selected item.
Don't forget to define WM_HOT_LIST_CHANGED somewhere in your
application, such as stdafx.h.