VC制作类似于IE4的酷工具条

vc2019切分位图图像带动态创建工具条 win10, VC 2019;新建一个单文档工程; 运行结果如下; 此程序的VC6版本运行结果如下;暂时还不知道为什么2019里面没有彩色; 在2019中导入位图; 新建一个菜单,名为 创建; 为此菜单添加命令消息处理函数;由视类处理此菜单; 此菜单的ID如下;自己生成; Resource.h里面要有如下;一般自动生成; #define IDB_BITMAP... 阅读详情
用VC制作工具条的方法很多,本文提供一种制作类似于IE4.0的工具条。能实现鼠标移上图标时,图标变为彩色,在工具条的位置,能停摆几种工具条。具体原理解释见步骤过程。
步骤如下:
1.    运行AppWizard,选择Single Document,其余选缺省设置。
2.    点击Insert Resource ,加入两条Bitmap,定义为:IDB_COLDTOOLBAR和IDB_HOTTOOLBAR
3.    在CMainFrame中加入成员变量:
    CReBar      m_wndReBar;            
    CComboBoxEx m_wndAddress;
4.    修改CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    CImageList img;
    CString str;

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD ¦ WS_VISIBLE ¦ CBRS_TOP
        ¦ CBRS_GRIPPER ¦ CBRS_TOOLTIPS ¦ CBRS_FLYBY ¦ CBRS_SIZE_DYNAMIC) )
    {
        TRACE0("Failed to create toolbar ");
        return -1;      // fail to create
    }

    if (!m_wndStatusBar.Create(this) ¦¦
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Failed to create status bar ");
        return -1;      // fail to create
    }

m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);    //设置工具条按钮大小
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

//创建鼠标移上时的图标列表
    img.Create(IDB_HOTTOOLBAR, 22, 0, RGB(255, 0, 255));        m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
    img.Detach();
//创建无焦点的图标列表
    img.Create(IDB_COLDTOOLBAR, 22, 0, RGB(255, 0, 255));
    m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
    img.Detach();
    m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT ¦ TBSTYLE_TRANSPARENT);
//设置要显示的图标数,可根据实际情况修改
    m_wndToolBar.SetButtons(NULL, 9);

    //逐个设置图标按钮的属性
/*SetButtonInfo(( int nIndex, UINT nID, UINT nStyle, int iImage ); 参数如下:
  nIndex :  图标按钮的索引值
  nID:        图标按钮关联的资源号
  nStyle:    图标按钮的风格
                常用的几种如下:
            TBBS_BUTTON  标准按钮
TBBS_SEPARATOR  分隔符
TBSTYLE_DROPDOWN  带有下箭头的按钮
  iImage:    关联建立的ImageList中图形的索引值
*/
 
    m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW, TBSTYLE_BUTTON, 0);
    m_wndToolBar.SetButtonText(0, "回退");
    m_wndToolBar.SetButtonInfo(1, ID_FILE_OPEN, TBSTYLE_BUTTON , 1);
    m_wndToolBar.SetButtonText(1, "前进");
    m_wndToolBar.SetButtonInfo(2, ID_FILE_SAVE, TBSTYLE_BUTTON¦TBBS_SEPARATOR  , 2);
    m_wndToolBar.SetButtonText(2, "停止");
    m_wndToolBar.SetButtonInfo(3, ID_FILE_PRINT_SETUP, TBSTYLE_BUTTON ¦ TBSTYLE_DROPDOWN, 3);
    m_wndToolBar.SetButtonText(3, "打印设置");

    CRect rectToolBar;

    // 设置工具条大小
    m_wndToolBar.GetItemRect(0, &rectToolBar);
    m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(30,20));

    // 创建
    if (!m_wndAddress.Create(CBS_DROPDOWN ¦ WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR + 1))
    {
        TRACE0("Failed to create combobox ");
        return -1;      // fail to create
    }

    COMBOBOXEXITEM item;

    item.mask = CBEIF_TEXT;
    item.iItem = -1;
    item.pszText = "健松思想";
    m_wndAddress.InsertItem(&item);

    if (!m_wndReBar.Create(this))
    {
        TRACE0("Failed to create rebar ");
        return -1;      // fail to create
    }

    // 将工具条和生成的输入框加入CReBar对象,集中显示在工具条区域
    m_wndReBar.AddBar(&m_wndToolBar);
    m_wndReBar.AddBar(&m_wndAddress, "地址", NULL, RBBS_FIXEDBMP ¦ RBBS_BREAK);

    return 0;
}

    到此,运行程序,已经可以看到一个类似IE4.0的程序出来了。但是下拉式图标按钮并没有显示出下拉菜单,也没有对输入框进行消息响应。继续修改程序如下:

5.    制作菜单IDR_PRINT_POPUP
6.    在MainFrame.h加入
    afx_msg void OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult);
在MainFrame.cpp中的MESSAGE_MAP加入消息映射
    ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)
和处理函数体:
void CMainFrame::OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult)
{
    // this function handles the dropdown menus from the toolbar
    NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNotifyStruct;
    CRect rect;

    // translate the current toolbar item rectangle into screen coordinates
    // so that we'll know where to pop up the menu
    m_wndToolBar.GetToolBarCtrl().GetRect(pNMToolBar->iItem, &rect);
    rect.top = rect.bottom;
    ::ClientToScreen(pNMToolBar->hdr.hwndFrom, &rect.TopLeft());
    if(pNMToolBar->iItem == ID_FILE_PRINT_SETUP)
    {
        CMenu menu;
        CMenu* pPopup;

        // the font popup is stored in a resource
        menu.LoadMenu(IDR_PRINT_POPUP);
        pPopup = menu.GetSubMenu(0);
        pPopup->TrackPopupMenu(TPM_LEFTALIGN ¦ TPM_LEFTBUTTON, rect.left, rect.top + 1, AfxGetMainWnd());
    }
    *pResult = TBDDRET_DEFAULT;
}

7.    处理对Combox的响应,这里只对内容改变的消息进行处理,若要添加别的处理,参看Combo Box Handlers的消息映射。
在MainFrame.h中加入    afx_msg void OnNewAddress();
在MainFrame.cpp中的MESSAGE_MAP中加入消息映射
    ON_CBN_SELENDOK(AFX_IDW_TOOLBAR + 1,OnNewAddress)
同时加入函数体
void CMainFrame::OnNewAddress()
{
    CString str;
    ShellExecute(NULL,"OPEN" ,"http://jonson.126.com",NULL,NULL,SW_SHOW);
}

使用Visual C++开发IE浏览器工具条插件实战 特性__declspec.def文件是否需要 extern “C”是(防名称修饰)否支持序号导出否是易于维护高中编译期检查有无推荐场景普通导出函数COM标准接口✅最终建议:结合使用!用.def文件导出COM标准函数(等)其他内部函数使用__declspec这才是高手的做法 👨‍💻。 阅读详情

相关推荐

VC源码实现分形图像制作器

在本章中,我们将概述分形图像制作器的VC源代码,为接下来深入探讨其核心算法和实现细节打好基础。分形图像制作器作为一种利用计算机生成分形图案的工具,深受艺术家、数学家和计算机图形学家的喜爱。其源代码不仅涉及到复杂的数学算法,还要求开发者具备良好的软件工程实践。分形是自然界中一种普遍存在的复杂几何结构。它具有自相似性,即在不同尺度下都显示出相似的模式。这种性质使得分形图形即使放大到极高的倍数,也仍然能观察到与整体相似的细节。

weixin_42607969的博客 831

4、MFC:菜单栏、工具栏与状态栏

MFC:菜单栏、工具栏和状态栏

qingttqing的博客 3234

VS Code配置Java开发环境避坑指南:从JDK到Spring Boot插件全流程

本文详细介绍了在VS Code中配置Java开发环境的完整流程,涵盖JDK选择、环境变量配置、核心插件安装、构建工具优化及Spring Boot项目专项设置。特别针对常见问题提供避坑方案,帮助开发者快速搭建高效稳定的开发环境,提升Java和Spring Boot开发效率。

weixin_28839699的博客 985

VS2013/MFC编程入门之三十四(工具栏:工具栏资源及CToolBar类)

上一节中讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏。        工具栏简介        工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成。当用户用鼠标单击工具栏上某个按钮时,程序会执行相应的操作,如果鼠标没有点击,只是停留在某个按钮上一会后,会弹出一个小窗口显示提示信息。        一般工具栏中的按钮在菜单栏中都有对应的菜单项中,

赵小咖的博客 9730

机器视觉学习(七)—— 卷积、边缘和滤波器

卷积运算、垂直边缘与水平边缘、滤波器

歆歆~黯了 2740

保姆级教程:给你的Jetson Orin NX换个‘大房子’——新SSD初始化与JetPack 6.x刷机全流程

本文提供Jetson Orin NX存储升级与JetPack 6.x系统部署的完整指南,涵盖SSD选型、分区策略、刷机流程及性能优化技巧。通过实测数据展示如何提升AI模型加载速度33%,并分享温度管理、I/O调度等实战经验,助力开发者突破边缘计算存储瓶颈。

weixin_42715608的博客 158

细谈SetButtonInfo函数及其用途

SetButtonInfo用于设置某个按钮,它的接口定义如下: 下面是它的几个接口函数说明: void CToolBar::SetButtonInfo(int nIndex, UINT nID, UINT nStyle, int iImage) 注意CToolBarCtrl类也有这个函数,但是它们的定义是完全不同的,实际上,CToolBar::SetButtonInfo的代码如下: voi...

weixin_33722405的博客 566

归因分析计算因子贡献度常见的方法

在归因分析中,我们一般都需要计算出每个因子的贡献度是多少,比如产品DAU上升,对年龄段维度进行拆解,看是不同年龄段的用户对DAU上升的贡献度是多少,一般根据指标的类型,计算贡献度的方法也不一样,下面就列出一些常见的归因分析贡献度的计算方法。

Hubans的博客 4万+

MFC关于工具栏介绍

一个好的软件,界面非常重要,其中的功能要让客户一目了然。而这些可以借助于工具栏,如在MicrosoftWord中的工具栏,相关的操作基本上都可以借助工具栏来完成。下面,我就将我知道的关于VC中关于工具栏的一些东西写写,与大家共享,不对的地方请大家帮忙纠正。    下面我以Visual Studio.net 2003下的单文档/视图的程序为例说明。    在VS中,实现工具栏

feimashenhua的专栏 4434

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

深山技术宅的博客 1863

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 299

用VC编写具有动态换肤功能的应用程序

用VC编写具有动态换肤功能的应用程序   2002-07-15· ·信息产业部电子第二十二研究所青岛分所 郎锐··yesky

skyremember的专栏 1751

SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员

笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。 对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3万+

FAQ:启动IE时自动显示工具条

问========================================eagleboost,您好!  在csdn上看到你以前写的关于IE编程方面的文章,看得出来你对这方面非常熟悉。我现在有个问题想请教一下你,就是我已经做了一个类似google工具条的东西,已经注册了,但要自己去右键菜单勾上才能显示出来。我想让它一注册,ie就默认将其显示出来,不知道要修改注册表什么地方? 麻烦你解答一下

eagleboost's blog 7247

Agent驱动电商运营:从选品到售后的全链路革新

在当今竞争激烈的电商市场中,传统的电商运营模式面临着诸多挑战。从选品到售后,每个环节都需要大量的人力投入和专业知识。选品需要深入了解市场趋势和消费者需求,营销需要精准定位目标用户,客服需要24小时响应用户咨询。这些工作不仅耗时耗力,而且容易受到人为因素的影响,导致效率低下和成本高企。AI Agent是一种能够感知环境、做出决策并采取行动的智能系统。感知能力:能够获取和处理环境信息。决策能力:能够根据感知到的信息做出决策。行动能力:能够执行决策,对环境产生影响。学习能力。

AI 领航者的博客 356

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC改造IE浏览器

自从微软捆绑了IE以后,网虫们便注定了要永远地面对那一成不变的微软模式:窗口、按钮和www.microsoft.com网站,从用户的角度,我们希望能够拥有自己特色的IE;从商业运作角度,商人希望无处不有他们公司的宣传信息,希望IE一经运行便可自动进入他们的网站。下面笔者介绍一种用VC6编程,通过修改注册表来改变IE面貌的方法。VC修改注册表的方法与函数注册表是由树干和键组成的,对注册表的修改便是对

小发猫 1768

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC6中工具条的新特色

VC6中工具条的新特色加入时间:01-1-8 下午 09:10:32在Visual C++ 版本6中工具条的新特色作者: Dave Schmitt 微软在www.microsoft.com/visualc已经推出Visual C++6.0预览版几个月了。正式版预计到今年年底发布。同时,预览版显示出版本6将包含大量的改进和提高,包括支持Internet控件,例如扁平工具条等。虽然改进的控

silver的专栏 1441

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC编程实现IE风格的界面

VC编程实现IE风格的界面作者:nimu007 日期:2005-10-18  使用过IE浏览器的朋友都知道IE界面上的扁平工具条、地址栏,扁平工具栏上的按钮正常状态下为扁平态,按钮上的图像为灰色,当鼠标放在按钮上时,按钮突起(这种状态称为手柄),并且其上的图像变得鲜艳醒目,一些按钮上还有汉字说明或标有小黑三角的下拉按钮,单击时显示下拉菜单,这些技术是怎么实现的呢,本文针对这些问题介绍了

724

VC中自定义IE浏览器

VC中自定义IE浏览器http://www.5xsoft.com/Article.aspx?id=155本教程提供了自定义浏览器控件的行为和外观的一些方法。你将看到高级的宿主接口,IDocHostUIHandler, IDocHostUIHandler2, IDocHostShowUI,和ICustomDoc。本文也讨论其他自定义方法,例如在宿主的IDispatch实现中处理DISPID_

skyremember的专栏 6208

VC6中工具条的新特色 (转)

VC6中工具条的新特色 (转)[@more@]VC6中工具条的新特色 加入时间:01-1-8 下午 09:10:32 在Visual C++ 版本6中工具条的新特色作者: Dave Schmitt 微软在www.microso...

csd3176的博客 183
上一篇: 用VC++6.0 Sockets API实现聊天室程序
下一篇: VC增加自定义消息
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值