SDK实现真彩工具栏

《Winodws API每日一练》11.3 工具栏控件 因为不同控件的通知消息都使用 WM_NOTIFY消息,有些通知消息可能需要附带其他数据,这时仅使用一个NMHDR结 构来表达是不够的,Windows的处理办法是为需要附带其他数据的WM_NOTIFY消息定义不同的数据结构,但这些结构头部都是一个NMHDR结构,NMHDR结构以后才是其他字段,这样在得知通知码之前,把lParam参数指针当做一个NMHDR结构来处理总是正确的。NMTOOLBAR 消息的参数是一个 NMHDR 结构体,其中包含了关于通知消息的详细信息,包括发送消息的控件句柄、标识符和消息代码。 阅读详情

    如果是采用MFC工程的话,要实现真彩工具栏是一件简单的事,网上都提供了封装好的类来实现,例如:TrueColorToolBar。可是采用SDK实现真彩工具栏就需要自己去实现,在网络上搜索了很多关于这方面的资料,都没有称心如意的,最后自己一步一步的使用SDK函数来实现这一功能,代码如下:

void	CreateToolBar(const HWND hWndParent)
{
	RGBTRIPLE	*rgb;
	COLORREF	rgbMask;
	HIMAGELIST	himl;
	HBITMAP		hBitmap;
	BITMAP		bmBitmap;

	HWND m_hToolbar= CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
		WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT |TBSTYLE_AUTOSIZE,
		0, 0, 0, 0,hWndParent, (HMENU)IDR_TOOLBAR, GetModuleHandle(NULL), NULL);

	himl=ImageList_Create(48, 48, ILC_COLOR24 | ILC_MASK, 0, 0);
	hBitmap= (HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1)
			,IMAGE_BITMAP, 0, 0,LR_DEFAULTSIZE|LR_CREATEDIBSECTION);

	GetObject(hBitmap, sizeof(BITMAP), &bmBitmap);
	rgb	= (RGBTRIPLE*)(bmBitmap.bmBits);
	rgbMask	= RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);
	ImageList_AddMasked(himl, hBitmap, rgbMask);
	SendMessage(m_hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl);
	DeleteObject (hBitmap);

	hBitmap= (HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP2)
	,IMAGE_BITMAP, 0, 0,LR_DEFAULTSIZE|LR_CREATEDIBSECTION);

	GetObject(hBitmap, sizeof(BITMAP), &bmBitmap);
	rgb	= (RGBTRIPLE*)(bmBitmap.bmBits);
	rgbMask	= RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);
	ImageList_AddMasked(himl, hBitmap, rgbMask);
	SendMessage(m_hToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)himl);
	DeleteObject (hBitmap);

	TBBUTTON tbb[5];
	ZeroMemory(tbb, sizeof(tbb));
	SendMessage(m_hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

	tbb[0].iBitmap= -1;
	tbb[0].fsState = TBSTATE_ENABLED;
	tbb[0].fsStyle = TBSTYLE_SEP ;
	tbb[0].idCommand = 0;

	tbb[1].iBitmap= MAKELONG(0,0);
	tbb[1].fsState = TBSTATE_ENABLED;
	tbb[1].fsStyle = TBSTYLE_BUTTON ;
	tbb[1].idCommand = IDC_Btn_Start;
	tbb[1].iString=(INT_PTR)("Start"); 

	tbb[2].iBitmap =MAKELONG(1,0);
	//tbb[1].fsState = TBSTATE_ENABLED;
	tbb[2].fsStyle = TBSTYLE_BUTTON;
	tbb[2].idCommand = IDC_Btn_Stop; 
	tbb[2].iString=(INT_PTR)("Stop"); 

	tbb[3].iBitmap= -1;
	tbb[3].fsState = TBSTATE_ENABLED;
	tbb[3].fsStyle = TBSTYLE_SEP ;
	tbb[3].idCommand = 0;

	tbb[4].iBitmap =MAKELONG(2,0);
	tbb[4].fsState = TBSTATE_ENABLED;
	tbb[4].fsStyle = TBSTYLE_BUTTON;
	tbb[4].idCommand = IDC_Btn_Login; 
	tbb[4].iString=(INT_PTR)("Login"); 

	SendMessage(m_hToolbar, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb);
	SendMessage(m_hToolbar, TB_AUTOSIZE, 0, 0);
}
Win32 SDK Gui编程系列之--工具栏(ToolBar) 鼠标光标放置的位置会以3D按钮的风格凸显出来。工具栏(ToolBar) 阅读详情

相关推荐

VC++集成DWGdirect控件实现DWG图纸读取与交互开发实战

在工业软件与CAD二次开发领域,DWG文件作为AutoCAD原生格式,承载了复杂的几何与属性数据。其解析原理涉及坐标系转换、实体遍历与图层控制等核心技术,对实现自主可控的图纸处理能力具有重要价值。通过ActiveX控件集成,开发者能在VC++/MFC环境中快速嵌入专业图纸浏览与处理功能,广泛应用于图纸审查、数据提取与轻量批注等场景。本文基于DWGdirect控件,详细讲解在TDNET框架中实现DWG文件加载、实体遍历及用户交互的工程实践,涵盖性能优化与常见问题排查,为VC++开发者提供高效集成方案。

weixin_33834910的博客 321

Windwos SDK开发 --实现工具栏和状态务栏

 打开记事本,打开任何一个常用软件,几乎都用工具栏和任务栏,很神秘吗?一点也不,跟我来,一起动手做由于不能用Resource Edit绘制,要实现这两个控件,需要引用头文件和它的动态连接库,来手动创建首先,加上头文件,加载动态连接库#pragma comment(lib,"comctl32.lib"),接着注册通用控件typedef struct tagINITCOMMONCONTRO

郁郁 3422

GUI Guider实战:从零构建嵌入式图形界面,LVGL开发效率翻倍

在嵌入式系统开发中,图形用户界面(GUI)是实现人机交互的核心组件。其基本原理是通过驱动显示设备,将控件、图像和文本等元素渲染到屏幕上,响应用户的输入事件。这项技术对于提升产品易用性和用户体验具有关键价值,广泛应用于智能家居、工业控制、医疗设备等场景。传统的嵌入式GUI开发往往面临代码冗长、维护困难或成本高昂的挑战。而LVGL(Light and Versatile Graphics Library)作为一款开源、轻量且功能强大的图形库,为资源受限的微控制器(MCU)提供了高效的解决方案。NXP推出的GUI

weixin_33843947的博客 518

SDK实现带工具栏、状态栏的窗口程序

创建一个工具栏 2个函数可以用,CreateToolbarEx或者CreateWindowEx.这里用后者。用CreateWindowEx需要指定窗口类为TOOLBARCLASSNAME,初始化为没有包含任何按钮。MSDN中也说了它属于公共控件(common control),需要使用InitCommonControlsEx初始化。可以用2个消息来增加按钮。分别是TB_ADDBUTTONS,TB

yiruirui0507的专栏 5396

MFC界面美化实战:SkinMagic集成、原理与高级定制指南

在Windows桌面开发领域,界面美化是提升软件用户体验和市场竞争力的关键技术。其核心原理在于通过窗口子类化、钩子技术和资源替换,接管系统原生绘制流程,实现控件外观的全面定制。这项技术为遗留系统现代化改造提供了高性价比方案,尤其适用于MFC这类稳定但界面陈旧的框架。通过引入轻量级皮肤引擎,开发者能在不改动核心业务逻辑的前提下,快速实现界面的视觉升级,支持动态换肤、不规则窗口等高级特性。本文以SkinMagic为例,深入解析其集成步骤、工作原理及在MFC项目中的实战应用,涵盖控件美化、源码机制与性能优化等关键

weixin_30363981的博客 607

高清卫星地图稳定访问指南:技术方案、应用场景与QGIS实战

卫星影像作为地理信息系统的核心数据源,其获取与处理技术是GIS领域的基础。其原理在于通过遥感平台采集地表电磁波信息,形成多分辨率、多时相的栅格数据。这项技术的核心价值在于为宏观决策与微观分析提供客观、大范围的空间基准。在工程实践中,高清卫星影像广泛应用于城市规划、农业监测、环境评估和工程项目勘查等多个场景。本文聚焦于如何实现高清卫星地图(如谷歌卫星影像)的稳定、高效访问与应用,深入解析了通过QGIS等专业工具配置瓦片服务、优化渲染性能以及进行多源数据叠加分析的具体方法,并结合亚米级影像、影像偏移等常见问题,

weixin_33889665的博客 326

Win32公共控件 - 状态栏和工具栏

原文:http://blog.youkuaiyun.com/henbing/archive/2005/02/18/293167.aspx 本篇是介绍公共控件系列文章的第2部分,描述了两种新的公共控件:状态栏和工具栏。本系列的其它文章涵盖了以下主题:  第1部分:基础  第3部分:滑动条、进度条和上下控件  第4部分:表头窗口和列表视图窗口  第5部分:图像列表和树形

dunhuacc1234的专栏 5213

AI工程插件开发实战:从环境配置到CAD/SolidWorks智能集成

在工业软件自动化领域,插件开发是连接专业软件与外部智能能力的关键桥梁。其核心原理在于通过进程间通信(IPC)或组件对象模型(COM)技术,调用宿主软件提供的应用程序接口(API),实现对软件内部对象和功能的程序化控制。这项技术的价值在于能够将重复性、规则性的设计任务自动化,从而极大提升工程师的工作效率与准确性。典型的应用场景包括CAD图纸的批量处理、设计规则的自动检查以及智能标注等。本文聚焦于将人工智能(AI)能力集成到工程插件中,详细拆解了如何配置开发环境、设计规则引擎,并最终实现一个可运行的智能插件De

virusswb的专栏 342

C++ Builder高光谱遥感图像处理软件:从算法到桌面应用开发全解析

高光谱遥感图像处理是遥感技术领域的核心分支,它通过分析包含数百个连续光谱波段的数据立方体,能够识别地物成分,广泛应用于农业监测、环境评估和资源勘探。其技术原理在于将复杂的光谱算法转化为高效、稳定的软件应用,这对处理海量数据提出了极高的性能要求。在工程实践中,C++因其卓越的计算效率和内存控制能力,成为实现底层算法的首选。而C++ Builder作为经典的RAD工具,则能快速构建专业的Windows图形界面,将高性能算法与用户友好的操作界面无缝结合。这种技术组合特别适合开发需要直接交付给终端用户的桌面级软件包

weixin_30443813的博客 419

笔记【图书管理系统】开发之客户端界面设计 (TBBUTTON,IMAGELIST,BITMAP,兼容DC)

要设计这样一个界面,这篇主要讲五个按钮的设置以及下面背景图片的载入 首先5个按钮 一、设置工具栏以及工具栏按钮 1.工具栏的设置: HWND hToolbar; CreateWindowEx(  0,        //窗口扩展风格  TOOLBARCLASSNAME,       //窗口类名称  "TOOLBAR",      //窗口名称 WS_VISIBLE |

yong_ss的博客 1034

SolidWorks C#插件开发入门包:57个可运行源码+21个零件模型+完整配置文件

直接上手SolidWorks二次开发的实战素材包,全部基于C#语言编写,包含57个已验证可编译运行的源代码文件,覆盖插件注册、草图标注、工程图尺寸添加、BOM表导出、自定义特征创建等高频功能场景;配套提供21个实际可用的SolidWorks零件(.sldprt)、17个装配体(.sldasm)和7个工程图(.slddrw),所有模型均通过真实环境测试;内置14个动态链接库(DLL)、11个配置文件(app.config / packages.config),以及多尺寸工具栏图标(20x–128x)和主界面图

info6的博客 476

win32强化练习4.5_标准工具栏的使用

只有进行过充分的练习,才能够真正掌握一门技能!通过进行或单项或综合的知识点强化训练,巩固和提高自己的windows程序设计的技能水平!

AouSdu 630

QMI8658A与QMC5883L(9轴)评估板实战指南:从硬件连接到数据校准

本文提供了QMI8658A与QMC5883L九轴传感器评估板的完整实战指南。详细介绍了从硬件I2C/USART连接到传感器零偏与地磁校准的关键步骤,并利用上位机实现数据可视化,帮助开发者快速上手9轴姿态传感技术,应用于无人机、机器人等领域。

metaverse5vr的博客 475

C语言 工具栏创建

VOID CreatToolBar(HINSTANCE hInstance,HWND hParent) { //1.初始这个公共控件的DLL,因要指定使用ComCtl32.dll来启用可视化方式,需要用InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX ComCtr={2*sizeof(DWORD),ICC_BAR_CLASSES}

flfihpv259的博客 1230

Information Fusion投稿避坑指南:从初稿到返修的完整流程解析(附模板下载)

本文详细解析了向Information Fusion投稿的全流程,从初稿准备到返修策略,涵盖了22个关键细节。特别强调了投稿前的隐形门槛、LaTeX模板的字体陷阱、图表规范要求以及返修回复的进阶技巧,帮助研究者避免常见错误,提升稿件接受率。附有实用模板下载,助力学术写作效率提升。

tgb34567890的博客 1417

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法

本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。

weixin_29189003的博客 402

Windows 编程用SDK建立工具栏

<br />引用网址:http://hi.baidu.com/zuolong99/blog/item/153c514a7f65092209f7ef85.html<br />自微软推出Windows 95后,一大批全新的控件使我们的应用程序更加美观,使用也更加方便。其中一个显著的变化就是工具条不再是一个突出的3D小方框,而是变成了平面的状态,但是只要把鼠标移动到上面,它就会自动地浮出来,大大方便了用户。 <br /><br />笔者经过一段时间摸索,终于找到了制作这种工具条的方法。原来Windows 95封装

hasegetc的专栏 1091

ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP

基于改进的 CASA 模型反演 NPP 数据为地理空间数据云提供的 TM 影像,其具体信息如图 1 所示。该实验中所使用的 TM 数据已进行过 QUAC 快速大气校正,来消除大气和光照等因素对地物反射的影响。Landsat 主题成像仪(TM)是 Landsat4 和 Landsat5 携带的传感器,每 16 天扫描同一地区,即 16 天覆盖全球一次。 TM 影像包含 7 个波段,波段 1-5 ...

Arcgiser的博客 3万+

win32sdk学习-简单的创建一个自己的工具栏

window程序中常使用的一个组件,就是工具栏了,基本上工具栏都是和菜单的选择是对应的。 在win32 api中有一个专门创建工具栏的函数(尽管msdn上说不建议使用) CreateToolbarEx。 自定义的工具栏,除了使用默认系统提供的图像之外,就是使用自己的图片资源了,不知道是不是win32程序兼容的关系,工具栏的图片资源要是bmp并且是8位256色的,网上有其他很多使用真彩图片的办

sujudz的专栏 7006

开源网格划分软件-Gmsh二次开发教程 (4)网格生成与控制​

​本章将深入讲解Gmsh的网格生成技术,包括全局/局部网格控制、边界层生成、自适应细化等,并提供完整的代码示例。

ZQGG的博客 1472

图像处理(1)--数字图像及彩色空间

目录1. 数字图像 像素:数字图像由二维的元素组成,每一个元素具有一个特定的位置(x,y)和幅值f(x,y),这些元素就称为像素。它是数字图像的基本单位。 1. 数字图像 单色(灰度)图像:每个像素的亮度用一个数值来表示,取值范围0-255,0表示黑、255表示白,其他值表示处于黑白之间的灰度 彩色图像:用红、绿、蓝三元组的二维矩阵来表示。三元组的每个数值也是在0-255之间,0表示相应的基...

ShaneHolmes 1万+

Power Automate Desktop实战:一键自动登录Chrome网站

本文详细介绍了如何使用Power Automate Desktop实现Chrome网站的一键自动登录,提升工作效率。从环境准备、基础配置到高级技巧与异常处理,全面解析自动化登录流程的构建与优化,特别适合需要频繁登录多个系统的用户。

weixin_29231725的博客 465
上一篇: 将asp.net的后台cs代码移动到页面上
下一篇: 打印文件夹中所有dll输出表中函数名称
萧柚
博客等级 码龄15年 7粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值