我想获得工具栏按钮的句柄。我知道它的ID和工具栏按钮所在的窗口句柄。但GetDlgItem函数似乎不适用于工具栏按钮。
GetDlgItem ( windowHandle, buttonID);
我想也许带有正确参数的函数SendMessage()可以得到句柄,但是我没有找到任何有助于它的msg参数。
问题::任何人都可以告诉我一个可以帮助我处理它的功能吗?
答案 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);