Toolbar在Win SDK下用法

2024-04-16 16:48
文章标签 sdk 用法 win toolbar

本文主要是介绍Toolbar在Win SDK下用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Toolbar真的是要折磨死人,MSDN都翻遍了都调试不对。关键还是靠一个日本人写的Demo才搞好的[1]。

下面给出一个最简Toolbar,代码加入到WM_CREATE下面:

        // Create the toolbar.HWND hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,hwnd, NULL, hInst, NULL);// Create the image list.HIMAGELIST g_hImageList = NULL;g_hImageList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1);ImageList_AddMasked(g_hImageList, (HBITMAP)LoadImage(hInst, (TCHAR *)1, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR), 0);// Set the image list.SendMessage(hWndToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)g_hImageList);TBBUTTON tbButtons[] ={{ 0, 0, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, },{ 1, 1, TBSTATE_ENABLED, BTNS_BUTTON, },{ 2, 2, TBSTATE_ENABLED, BTNS_BUTTON, },{ 3, 3, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, },{ 4, 4, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, },{ 5, 5, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, 0, -1, },{ 0, 0, 0, BTNS_SEP, },{ 6, 6, TBSTATE_ENABLED, BTNS_BUTTON, },};// Add buttons.SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM)sizeof(tbButtons) / sizeof(TBBUTTON), (LPARAM)&tbButtons);// Resize the toolbar, and then show it.SendMessage(hWndToolbar, TB_AUTOSIZE, 0, 0);

在.rc中加入:

1 BITMAP "toolbar.bmp"

LoadImage的第二个参数可以是外来的.bmp,也可以是内置资源。如果是内置资源的话参数为“(TCHAR *)资源号”。

所以如果是VS自动生成的.rc和Resource.h的话,填入资源名称(例如IDR_TOOLBAR1)就好了。

我自己改的.rc文件,写成了类似

IDR_TOOLBAR1 BITMAP "toolbar.bmp"

形式,又在Resource.h里加入#define IDR_TOOLBAR1 101,结果死活找不到图片。对比了VS自动生成的.rc,发现VS的.rc前面有#include “Resource.h”,而我的没有。加上这句就好了。低级错误啊。

参考
1.http://www.cnblogs.com/ifaithu/articles/2455564.html
2.https://msdn.microsoft.com/en-us/library/windows/desktop/bb760435(v=vs.85).aspx

这篇关于Toolbar在Win SDK下用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909351

相关文章

#error用法

/* *检查编译此源文件的编译器是不是C++编译器 *如果使用的是C语言编译器则执行#error命令 *如果使用的是 C++ 编译器则跳过#error命令 */ #ifndef __cplusplus #error 亲,您当前使用的不是C++编译器噢! #endif #include <stdio.h> int main() {

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

tensorboard-----summary用法总结

Tensorflow学习笔记——Summary用法         最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。 其中tensorboard 作为一款可视化神器,可以说是学习tensorflow时模型训练以及参数可视化的法宝。 而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表

YTKKeyValueStore用法

iOS端的尝试 后来我从后台转做iOS端的开发,我就尝试了在iOS端直接使用Key-Value式的存储。经过在粉笔网、猿题库、小猿搜题三个客户端中的尝试后,我发现Key-Value式的存储不但完全能够满足大多数移动端开发的需求,而且非常适合移动端采用。主要原因是:移动端存储的数据量不会很大: 如果是单机的应用(例如效率工具Clear),用户自己一个人创建的数据最多也就上万条。 如果

redis高级用法

redis 慢日志查询 配置参数 slowlog-log-slower-than 10000 #单位微秒 slowlog-max-len 选项指定服务器最多保存多少条慢查询日志 redis-cli slowlog get #获取慢日志1) 1) (integer) 4 # 日志的唯一标识符(uid)2) (integer) 1378781447 # 命令执

Log4j用法

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录,具体请参考Log4j文档指南。 Log4j下载 在apache网站,可以免费下载到Log4j最新版本的软件包 Apache log4j  (推荐) Apache log4j 2 Log4j的包下载完成后,解压,将其中打包好的的log4j-1.x.x.jar导入你的工程

sql之top用法

TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 注释: 并非所有的数据库系统都支持 TOP 子句。 SQL Server 的语法: SELECT TOP number|percent column_name(s)FROM table_name MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的 M

Android自定义系列——9.Path详细用法

rXxx方法 rXxx方法的坐标使用的是相对位置(基于当前点的位移),而之前方法的坐标是绝对位置(基于当前坐标系的坐标)。 Path path = new Path();path.moveTo(100,100);path.lineTo(100,200);canvas.drawPath(path,mDeafultPaint); 在这个例子中,先移动点到坐标(100,100)处,之后再连接