如何获取工具栏按钮的句柄?

时间:2014-04-22 18:58:44

标签: winapi

我想获得工具栏按钮的句柄。我知道它的ID和工具栏按钮所在的窗口句柄。但GetDlgItem函数似乎不适用于工具栏按钮。

 GetDlgItem ( windowHandle, buttonID); 

我想也许带有正确参数的函数SendMessage()可以得到句柄,但是我没有找到任何有助于它的msg参数。

问题::任何人都可以告诉我一个可以帮助我处理它的功能吗?

3 个答案:

答案 0 :(得分:1)

工具栏的按钮没有手柄(它们不是常规按钮的窗口)。有很多工具栏消息(TB_ *)可以使用这些按钮。

参考http://msdn.microsoft.com/en-us/library/bb760435(VS.85).aspx

您可以发送TB_BUTTONCOUNT消息以获取工具栏中的按钮计数,并创建一个简单的循环,该循环遍历每个按钮并通过发送TB_ISBUTTONENABLED来检查是否已丢失。您还可以发送TB_GETBUTTON消息以获取有关TBBUTTON中每个按钮的更多信息

答案 1 :(得分:0)

工具栏按钮是非窗口的。没有窗口句柄供您检索。

如果您希望自动化工具栏按钮,则应使用UI Automation

答案 2 :(得分:0)

您可以选择2种方式 1:自己创建按钮

INT_PTR CALLBACK myModelessToolbar(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
      case WM_INITDIALOG:
      {
        HWND hYellowButton = CreateWindow(L"BUTTON", L"Yellow button", BS_ICON | WS_VISIBLE | WS_CHILD, 610, 0, 20, 20, hDlg, (HMENU)1, NULL, NULL);
        m_pBitmap = Gdiplus::Bitmap::FromFile(L"Yellow.jpg"); //image must be in executable directory.
        m_pBitmap->GetHICON(&hicon);
        LRESULT lr = SendMessage(hYellowButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hicon);

        return (INT_PTR)TRUE;
      }
    }
}

2:使用Visual Studio编辑器将按钮设置为接收位图。这也为我工作。还将其放在wm_initdialog部分。

HWND test = GetDlgItem(hDlg, IDC_BUTTON8);
lr = SendMessage(test, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hicon);