Win32 SDK学习笔记_工具栏控件(ToolBar)

工具栏类名

ToolbarWindow32

工具栏控件的创建

1用CreateWindowEx来创建工具栏

HWND hToolBar=CreateWindowEx(0,
	TEXT("ToolbarWindow32"),				//工具栏类名
	NULL,
	WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS|TBSTYLE_FLAT,	//工具栏样式
	0,0,0,0,
	hParent,								//父窗口句柄
	(HMENU)uToolBarID,						//工具栏ID
	GetModuleHandle(NULL),					//应用程序实例句柄
	0);
	

1.1工具栏样式

工具栏样式:
TBSTYLE_ALTDRAG 允许按住ALT键手动按钮位置
TBSTYLE_FLAT 平面工具栏样式
TBSTYLE_LIST 列表样式,文本显示在按钮右铡
TBSTYLE_TOOLTIPS 工具栏提示信息
TBSTYLE_TRANSPARENT 透明样式
TBSTYLE_WRAPABLE 多行显示

2.创建图像列表

创建图像列表要添加头文件和库文件
#include <commctrl.h>
#pragma comment(lib,“comctl32.lib”)

//a.创建图像列表
int cx=32;
int cy=32;
HIMAGELIST hImageList=ImageList_Create(cx,cy,ILC_COLOR32|ILC_MASK,2,1);
ImageList_SetBkColor(hImageList, CLR_NONE);//CLR_NONE设置成透明的

//b.加载资源位图
HBITMAP hBitmap=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(uBitmapID));

//c.添加位图到图像列表中
ImageList_Add(hImageList,hBitmap,nullptr);

//d.设置图像列表和工具栏关联
SendMessage(hToolBar,TB_SETIMAGELIST,0,(LPARAM)hImageList);

3.设置按钮样式,显示文本,图像索引

工具栏按钮结构体:
TBBUTTON

//定义6个按钮
TBBUTTON tBtn1,tBtn2,tBtn3,tBtn4,tBtn5,tBtn6;

//tBtn1的数据结构
tBtn1.fsStyle=(BYTE)BTNS_BUTTON;		//普通的按钮样式
tBtn1.fsState=(BYTE)TBSTATE_ENABLED;	//按钮状态
tBtn1.idCommand=10001;					//按钮id标记
tBtn1.iBitmap=0;						//按钮显示的图像索引
tBtn1.iString=(INT_PTR)TEXT("添加");	//按钮显示的文本

//tBtn2的数据结构
tBtn2.fsStyle=(BYTE)BTNS_BUTTON;		
tBtn2.fsState=(BYTE)TBSTATE_ENABLED;	
tBtn2.idCommand=10002;				
tBtn2.iBitmap=1;						
tBtn2.iString=(INT_PTR)TEXT("修改");	

//tBtn3,tBtn4为单选样式
tBtn3.fsStyle=(BYTE)TBSTYLE_CHECK | TBSTYLE_GROUP;	//单选按钮样式	
tBtn3.fsState=(BYTE)TBSTATE_ENABLED;	
tBtn3.idCommand=10003;				
tBtn3.iBitmap=2;						
tBtn3.iString=(INT_PTR)TEXT("分类查看");

tBtn4.fsStyle=(BYTE)TBSTYLE_CHECK | TBSTYLE_GROUP;	//单选按钮样式	
tBtn4.fsState=(BYTE)TBSTATE_ENABLED;	
tBtn4.idCommand=10004;				
tBtn4.iBitmap=3;						
tBtn4.iString=(INT_PTR)TEXT("查询所有");

//分隔栏
tBtn5.fsStyle=(BYTE)TBSTYLE_SEP ;	//分隔栏样式	
tBtn5.fsState=(BYTE)TBSTATE_ENABLED;	
tBtn5.idCommand=0;				
tBtn5.iBitmap=0;						
tBtn5.iString=0;

//复选按钮样式
tBtn6.fsStyle=(BYTE)TBSTYLE_CHECK ;	//复选选按钮样式	
tBtn6.fsState=(BYTE)TBSTATE_ENABLED;	
tBtn6.idCommand=10005;				
tBtn6.iBitmap=4;						
tBtn6.iString=(INT_PTR)TEXT("窗口置顶");

//把6个按钮组成按钮数组
TBBUTTON btnArray[]={tBtn1,tBtn2,tBtn3,tBtn4,tBtn5,tBtn6};

//设置按钮数组与工具栏关联
SendMessage(hToolBar,TB_ADDBUTTONS,6,(LPARAM)btnArray);

3.1按钮样式

TBSTYLE_BUTTON 普通的按钮样式
TBSTYLE_SEP 分隔栏样式
TBSTYLE_CHECK 复选框样式,按下不自动弹起
TBSTYLE_GROUP 按钮分组,和TBSTYLE_CHECK一起使用组成单选按钮样式

4.自动调整大小适应窗口

如果窗口大小改变要在WM_SIZE消息中也要添加自动调整大小

SendMessage(hToolBar,TB_AUTOSIZE,0,0);

5.显示/隐藏按钮文本

BOOL bShowString=TRUE;//真为显示,假为不显示
SendMessage(hToolBar,TB_SETMAXTEXTROWS,(bShowString?1:0),0);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Win32 API提供了许多绘图函数,可以用于绘制工具栏。以下是一个简单的示例代码,可以创建一个工具栏并在上面绘制按钮: ```c++ #include <windows.h> // 定义工具栏按钮的标识符 #define IDM_TOOLBAR_BUTTON1 101 #define IDM_TOOLBAR_BUTTON2 102 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hToolbar; switch (message) { case WM_CREATE: // 创建工具栏 hToolbar = CreateToolbarEx(hWnd, WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS, 1, 0, NULL, 0, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON)); // 添加按钮 TBBUTTON tbButtons[] = { { 0, IDM_TOOLBAR_BUTTON1, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0}, 0, 0 }, { 1, IDM_TOOLBAR_BUTTON2, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0}, 0, 0 }, }; SendMessage(hToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); SendMessage(hToolbar, TB_ADDBUTTONS, sizeof(tbButtons) / sizeof(TBBUTTON), (LPARAM)&tbButtons); break; case WM_COMMAND: // 处理工具栏按钮的消息 switch (LOWORD(wParam)) { case IDM_TOOLBAR_BUTTON1: MessageBox(hWnd, L"Button 1 clicked!", L"Info", MB_OK); break; case IDM_TOOLBAR_BUTTON2: MessageBox(hWnd, L"Button 2 clicked!", L"Info", MB_OK); break; } break; case WM_DESTROY: // 销毁工具栏 DestroyWindow(hToolbar); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 创建窗口 WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = NULL; wcex.lpszClassName = L"ToolbarWindowClass"; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, L"Failed to register window class.", L"Error", MB_OK | MB_ICONERROR); return 1; } HWND hWnd = CreateWindow( L"ToolbarWindowClass", L"Toolbar Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, L"Failed to create window.", L"Error", MB_OK | MB_ICONERROR); return 1; } // 显示窗口 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } ``` 这个示例代码创建了一个工具栏,其中包含两个按钮。当用户单击按钮时,会弹出一个消息框。你可以根据自己的需要修改按钮的标识符、图标、大小等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值