如何将热跟踪与工具栏配合使用

当鼠标指针悬停在某个项目上时,该项目就会被激活。 如果启用了热跟踪,则会高亮显示“热”项目。 使用 TBSTYLE_FLAT 样式创建的工具栏或使用视觉样式的工具栏默认支持热跟踪。

热跟踪要求创建图像列表;因此,不能使用 TB_ADDBITMAP 消息或 CreateToolbarEx 函数来创建工具栏。

当鼠标悬停在工具栏按钮上时,按钮就会突出显示其轮廓。 下图显示的是启用了热跟踪功能的工具栏;在抓取屏幕截图时,鼠标指针正悬停在“Save”按钮上。

screen shot of a dialog box with a three-item toolbar; the selected icon is outlined

如果想在控件状态发生变化时更改工具栏按钮位图,请将不同的图像存储在图像列表中。 例如,某些应用程序的黑白工具栏按钮在被选中时会变成彩色。 图像列表中存储了两个不同的图像。 工具栏支持使用最多三个图像列表。 通常情况下,一个应用程序会有默认、禁用和热跟踪图像列表。 要设置和检索常用工具栏按钮的图像列表,请使用 TB_SETHOTIMAGELISTTB_GETHOTIMAGELIST 消息。

需要了解的事项

技术

先决条件

  • C/C++
  • Windows 用户界面编程

说明

将热跟踪与工具栏一起使用

以下代码示例为热按钮创建、填充和分配了一个图像列表。

// Create the image list, himlHot.
g_himlHot = ImageList_Create(MYICON_CX,MYICON_CY,ILC_COLOR8,0,4);

// Load a bitmap from a resource file, and add the images to the image list.
// Note that the bitmap contains four images.

hBitmapHot = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_HOT));

ImageList_Add(g_himlHot, hBitmapHot, NULL);
   
// Set the image list. 
SendMessage(hwndTB, TB_SETHOTIMAGELIST, 0, (LPARAM)g_himlHot);
   
// Loop to fill the array of TBBUTTON structures.  
for(i=0;i<MAX_BUTTONS;i++)
{
    tbArray[i].iBitmap   = i;                   // Bitmap from image list.
    tbArray[i].idCommand = IDM_BUTTONSTART + i;
    tbArray[i].fsState   = TBSTATE_ENABLED;
    tbArray[i].fsStyle   = BTNS_DROPDOWN;
    tbArray[i].dwData    = 0;
    tbArray[i].iString   = i;
}

DeleteObject(hBitmapHot);    // Delete the loaded bitmap.

使用工具栏控件

Windows 通用控件演示 (CppWindowsCommonControls)