在工具栏外部使用Win32工具栏标准位图,可以通过以下步骤实现:
windows.h
头文件,并链接comctl32.lib
库文件。CreateWindowEx
函数创建一个具有工具栏样式的窗口,设置窗口类为TOOLBARCLASSNAME
。TB_ADDBITMAP
消息向工具栏添加位图按钮。这可以通过SendMessage
函数来实现。该消息指定了要添加的位图资源的ID,并返回新加按钮的索引。TB_SETBUTTONINFO
消息来设置按钮的属性,例如按钮的样式、标识符、命令ID等。通过SendMessage
函数来发送该消息。WM_COMMAND
消息来处理工具栏按钮的点击事件。在消息处理函数中,根据按钮的命令ID进行相应的处理逻辑。下面是一个示例代码片段,展示了如何在工具栏外部使用Win32工具栏标准位图:
#include <windows.h>
#include <commctrl.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASSEX wc = {0};
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = TEXT("ToolboxWindowClass");
RegisterClassEx(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(
0,
TEXT("ToolboxWindowClass"),
TEXT("Win32 Toolbox Example"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 500, 400,
NULL, NULL, hInstance, NULL);
// 创建工具栏
HWND hwndToolbar = CreateWindowEx(
0, TOOLBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE | TBSTYLE_WRAPABLE, 0, 0, 0, 0,
hwnd, NULL, hInstance, NULL);
// 加载标准位图
SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
SendMessage(hwndToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(16, 16));
SendMessage(hwndToolbar, TB_ADDBITMAP, 0, (LPARAM)HINST_COMMCTRL);
// 添加按钮
TBBUTTON tbButtons[3] = {0};
tbButtons[0].iBitmap = STD_FILENEW;
tbButtons[0].idCommand = IDM_FILE_NEW;
tbButtons[0].fsState = TBSTATE_ENABLED;
tbButtons[0].fsStyle = TBSTYLE_BUTTON;
tbButtons[1].iBitmap = STD_FILEOPEN;
tbButtons[1].idCommand = IDM_FILE_OPEN;
tbButtons[1].fsState = TBSTATE_ENABLED;
tbButtons[1].fsStyle = TBSTYLE_BUTTON;
tbButtons[2].iBitmap = STD_FILESAVE;
tbButtons[2].idCommand = IDM_FILE_SAVE;
tbButtons[2].fsState = TBSTATE_ENABLED;
tbButtons[2].fsStyle = TBSTYLE_BUTTON;
SendMessage(hwndToolbar, TB_ADDBUTTONS, sizeof(tbButtons) / sizeof(TBBUTTON), (LPARAM)&tbButtons);
// 显示窗口
ShowWindow(hwnd, nCmdShow);
// 消息循环
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
// 处理按钮点击事件
if (HIWORD(wParam) == 0 && LOWORD(wParam) == IDM_FILE_NEW)
{
// 点击了新建按钮
MessageBox(hwnd, TEXT("New button clicked!"), TEXT("Button Clicked"), MB_OK);
}
else if (HIWORD(wParam) == 0 && LOWORD(wParam) == IDM_FILE_OPEN)
{
// 点击了打开按钮
MessageBox(hwnd, TEXT("Open button clicked!"), TEXT("Button Clicked"), MB_OK);
}
else if (HIWORD(wParam) == 0 && LOWORD(wParam) == IDM_FILE_SAVE)
{
// 点击了保存按钮
MessageBox(hwnd, TEXT("Save button clicked!"), TEXT("Button Clicked"), MB_OK);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
这个示例代码中创建了一个包含三个按钮的工具栏,并且在按钮被点击时弹出相应的消息框。你可以根据自己的需求修改按钮的样式、位置和处理逻辑。
关于Win32工具栏的更多信息和使用方法,可以参考腾讯云的相关产品文档:Win32 应用开发。
领取专属 10元无门槛券
手把手带您无忧上云