自己动手绘制ToolBar

SAP ALV开发必看:如何一键隐藏GUI状态和应用程序工具栏(附NO_TOOLBAR配置) 本文详细讲解了SAP ALV开发中如何精简界面,提升用户体验。核心内容包括:通过屏幕设计器彻底隐藏应用程序工具栏,以及利用NO_TOOLBAR参数一键隐藏ALV控件工具栏。此外,还介绍了通过IT_TOOLBAR_EXCLUDING参数精细化排除特定按钮的高级定制方法,帮助开发者根据业务场景打造简洁专业的报表界面。 阅读详情

VC MFC工具栏(CToolBar)控件

工具栏

工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。

CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如下:
BOOL CButton::Create(
     LPCTSTR lpszCaption,//按钮显示的文本
     DWORD dwStyle,//按钮样式
     const RECT& rect,//按钮控件显示的区域(大小)相对于父窗口
     CWnd* pParentWnd,//按钮的父窗口(按钮属于哪个窗口)
     UINT nID//指明按钮控件ID号

    );
这个函数的第二个参数dwStyle是按钮控件的样式,也就是在可视化添加按钮控件时,右击按钮控件,选择属性,之后会弹出一个对话框,这个对话框有一个样式的选项,该参数即对应这个样式。

好了,了解了上面这些我们就来动态创建一个按钮吧,首先在对应话类里添加一个按钮类成员变量CButton m_Button;

然后在对话框编辑区里给对话框添加一个按钮控件(单击这个按钮创建按钮控件),然后添加这个按钮控件单击消息处理函数,并在函数添加以下语句:

 RECT ButtonRect;//按钮控件显示的区域(大小)相对于父窗口
 ButtonRect.left=10;
 ButtonRect.top=10;
 ButtonRect.right=80;
 ButtonRect.bottom=30;
 m_Button.Create("动态创建",WS_CHILD,ButtonRect,this,1115);
 m_Button.ShowWindow(SW_SHOW);//显示按钮控件

知道了怎样动态创建按钮控件,我们就来创建工具栏控件。

首先在对话类中添加一个CToolBar类成员变量CToolBar m_Toolbar;

然后在对话类文件中定义工具栏命令ID

#define ID_BUTTON1    501
#define ID_BUTTON2    502
#define ID_BUTTON3    503

接着我们就要创建工具栏资源了,用于工具栏按钮的显示图片

方法是进入ResourceView(资源视图选项卡),再随便选中一个选项,右击选择插入,在弹出的对话框里选中Toolbar,点新建。

接着创建三个按钮。如下图所示:

好了,下面把三个按钮ID号,改成上面宏定义的ID号,如果要改变“天”字按钮,选中该按钮,然后回车键,就会弹出一个对话框,

在ID项填入ID_BUTTON1,就可以了。接着依次把两个ID号改为ID_BUTTON2,ID_BUTOON3。在这个对话框里也可以改变工具栏按钮的大小。

接下来我们样在对话框类的OnInitDialog函数里的所有代码之后,return TRUE;之间添加以下语句:
     m_Toolbar.Create(this);//创建工具栏控件
     m_Toolbar.LoadToolBar(IDR_TOOLBAR1);//装载工具栏资源
  CRect rect(100,100,200,200);//
  m_Toolbar.MoveWindow(rect);//移动工具栏在父窗口的位置
  m_Toolbar.ShowWindow(SW_SHOW);//显示工具栏

但这样显示工具栏不是很方便,特别是当窗口大小改变后,还要计算工具栏在窗口中的位置,有没有什么方法,可以根据窗口大小自动调整工具栏到合适的位置呢?答案是肯定的,RepositionBars函数可以做到。实现方法如下,把上面的语句换成下面的:

  m_Toolbar.Create(this);//创建工具栏控件
    m_Toolbar.LoadToolBar(IDR_TOOLBAR1);//装载工具栏资源
  //该函数用于显示工具栏,并根据窗口大小自动调整工具栏的位置
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

 而响应工具栏按钮单击消息,跟前面介绍的添加按钮单击消息差不多,进入类向导,找到要添加的工具栏按钮ID,添加COMMAND消息响应函数,如下图:

工具栏按钮上显示真彩位图

上面的例子有一个缺陷,那就是工具栏按钮显示的图形,不能超过256色,如果我想在工具栏按钮显示真彩位图,上面的方法显示是无法实现的,那这个功能是如何实现呢?

SetImageList函数可以做到,既然要显示真彩位图,那就不能使用上面的工具栏资源(256色),所以一切都得到用代码实现

 首先向工程引入六张位图(用于工具栏按钮显示的图片),假设ID号分别为IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4,IDB_BITMAP5,IDB_BITMAP6,大小为50X38

第一步:在对话框里添加两个成员变量分别是:

  CToolBar m_Toolbar;
  CImageList m_ImageList;

第二步:在对话类文件添加以下宏定义:
#define ID_BUTTON1    501
#define ID_BUTTON2    502
#define ID_BUTTON3    503
#define ID_BUTTON4    504
#define ID_BUTTON5    505
#define ID_BUTTON6    506

接下来在对话框初始化函数OnInitDialog后面添加如下语句:

m_ImageList.Create(50,38,ILC_COLOR24|ILC_MASK,1,1);//图片大小必须一致
  CBitmap bmp;
  for(int i=0;i<6;i++)
  {
   bmp.LoadBitmap(IDB_BITMAP1+i);
   m_ImageList.Add(&bmp,RGB(255,255,255));
   bmp.DeleteObject();
  }
  UINT nArray[6];
  for(i=0;i<6;i++)
  {
   nArray[i]=ID_BUTTON1+i;
  }
     m_Toolbar.CreateEx(this);//创建工具栏控件,CreateEx函数创建的工具栏,默认有浮动按钮属性
  m_Toolbar.SetButtons(nArray,6);//创建六个工具按钮,并依次设置ID号,对应nArray数组的元素
  m_Toolbar.SetSizes(CSize(60,56),CSize(50,38));//函数第一个是按钮大小,第二个是图像大小,按钮必须比图像要大,具体是按钮的要

     //比图像的宽大7或者以上,高6
  m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList);//设置图像
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

运行效果如下图:

 如果要响应工具栏按钮单击消息的话,必须手动添加消息映射:如

 ON_COMMAND(ID_BUTTON1,Button1)   //button1为消息处理函数

如果要设置按钮显示文本的话,就是CToolBar类的 SetButtonText函数。

设置工具栏背景位图

用CReBar类可以实现在工具栏背景里显示位图,可以把工具栏设置成CReBar类对应的子窗口,以上面的工程为例子,再在对话类里添加一个成员变量: CReBar m_Rebar;接着导入一张位图,用做工具栏的背景,ID号为ID_TOOLBACK,然后在OnInitDialog函数的

RepositionBar(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);语句前面添加如下语句:
m_Rebar.Create(this);//创建窗口(控件)
  m_Rebar.AddBar(&m_Toolbar);//添加m_Toolbar为子窗口
  m_Rebar.RedrawWindow();//重画窗口
  REBARBANDINFO info;
  info.cbSize=sizeof(info);
  info.fMask=RBBIM_BACKGROUND;
  m_Toolbar.ModifyStyle(0,TBSTYLE_TRANSPARENT);//设置工具栏背景色透明
  info.hbmBack=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_TOOLBACK));//加载位图
  m_Rebar.GetReBarCtrl().SetBandInfo(0,&info);

编译,运行效果如下:

为工具栏按钮添加鼠标停留提示信息

以上面的工程为例子,在对话类里添加一个成员变量CString str;

接着在m_Toolbar调用CreateEx函数后,调用这个语句:  m_Toolbar.EnableToolTips();//激活信息提示功能

然后在对话类里添加一个成员函数(用于TTN_NEEDTEXT消息处理函数),格式如下:

BOOL  OnDisplay(UINT id, NMHDR *pNMHDR, LRESULT *pResult)

然后添加TTN_NEEDTEXT消息映射宏

 ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnDisplay)

OnDisplay函数代码如下:

TOOLTIPTEXT *pTTT=(TOOLTIPTEXT *)pNMHDR;
UINT nID=pNMHDR->idFrom;//获取工具栏按钮ID
UINT nIndex=m_Toolbar.CommandToIndex(nID);//根据按钮ID获取索引
str.Format("工具栏按钮%d",nIndex);
pTTT->lpszText=str.GetBuffer(str.GetLength());//设置按钮提示信息
pTTT->hinst=AfxGetResourceHandle();
return TRUE;

工具栏按钮上显示图标

在按钮上显示图标,方法跟显示位图差不到哪去,只要让CImageList里添加的是图标就行了,首先向工程引入六个图标,假设ID号分别为IDI_ICON1、IDI_ICON2....IDI_ICON6

以上面的工程为例:在OnInitDialog函数最后添加如下代码:

m_ImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);//图片大小必须一致
 for(int i=IDI_ICON1;i<=IDI_ICON6;i++)
   m_ImageList.Add(AfxGetApp()->LoadIcon(i));//添加图标

  UINT nArray[6];
  for(i=0;i<6;i++)
  {
   nArray[i]=ID_BUTTON1+i;
  }
     m_Toolbar.CreateEx(this);//创建工具栏控件
  m_Toolbar.EnableToolTips();//激活信息提示功能
  m_Toolbar.SetButtons(nArray,6);
  m_Toolbar.SetSizes(CSize(60,56),CSize(48,48));
  m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList);
  m_Rebar.Create(this);
  m_Rebar.AddBar(&m_Toolbar);
  m_Rebar.RedrawWindow();
  REBARBANDINFO info;
  info.cbSize=sizeof(info);
  info.fMask=RBBIM_BACKGROUND;
  m_Toolbar.ModifyStyle(0,TBSTYLE_TRANSPARENT);//设置工具栏背景色透明
  info.hbmBack=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_TOOLBACK));
  m_Rebar.GetReBarCtrl().SetBandInfo(0,&info);
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

运行效果如下:

设置工具栏按钮热点图片

像前面的SetImageList函数设置工具栏按钮正常显示时的图片,而SetHotImageList函数是设置工具热点按钮图片,也就是当鼠标停留在按钮上所显示的图片,用法跟SetImageList函数一样,只是CImageList类关联的图片不一样。

为了显示热点按钮图片,我们得准备两组图片,一组用于正常显示,一组用于热点显示。这里我的图片格式是图标。还有一点要说明的是,工具栏必须具有TBSTYLE_FLAT(浮动按钮)属性,这一点在用CreateEx函数创建工具栏的时候,已经默认包含了。

两组图片:

正常显示:

热点显示:

工具栏背景位图:

首先向工程引入这十二个图标:假设正常显示的图标ID号依次为:IDI_NORMAL1、IDI_NORMAL2、。。。IDI_NORMAL6

热点图标ID依次为:IDI_HOT1、IDI_HOT2、。。。IDI_HOT6

然后引入背景位图,ID号为IDB_TOOLBACK

做完了这些,我们就向对话类里添加四个成员变量: 

 CToolBar m_Toolbar;
  CImageList m_ImageList;
  CImageList m_hotImageList;

 CReBar m_Rebar;

然后增加五个宏定义:

#define ID_BUTTON1    501
#define ID_BUTTON2    502
#define ID_BUTTON3    503
#define ID_BUTTON4    504
#define ID_BUTTON5    505

接着在OnInitDialog函数添加如下代码:

m_ImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);//图片大小必须一致
 m_hotImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);
 for(int i=0;i<5;i++)
 {
   m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_NORMAL1+i));
   m_hotImageList.Add(AfxGetApp()->LoadIcon(IDI_HOT1+i));
 }
  UINT nArray[5];
  for(i=0;i<5;i++)
  {
   nArray[i]=ID_BUTTON1+i;
  }
  m_Toolbar.CreateEx(this);//创建工具栏控件
  m_Toolbar.SetButtons(nArray,5);
  m_Toolbar.SetSizes(CSize(60,56),CSize(48,48));
  m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList);
  m_Toolbar.GetToolBarCtrl().SetHotImageList(&m_hotImageList);
  m_Rebar.Create(this);
  m_Rebar.AddBar(&m_Toolbar);
  m_Rebar.RedrawWindow();
  REBARBANDINFO info;
  info.cbSize=sizeof(info);
  info.fMask=RBBIM_BACKGROUND;
  m_Toolbar.ModifyStyle(0,TBSTYLE_TRANSPARENT);//设置工具栏背景色透明
  info.hbmBack=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_TOOLBACK));
  m_Rebar.GetReBarCtrl().SetBandInfo(0,&info);
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

运行效果:

 CToolBarCtrl工具栏控制类

 这个类的用法跟CToolBar的用法大同小异,模式都差不多,只需要了解一下这个类里的Create和AddButtons函数就行了,Create函数定义如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

dwStyle:工具栏控件的风格     rect:工具栏位置和区域   pParentWnd:工具栏父窗口句柄(属于哪个窗口) nID:工具栏控件ID号

AddButtons函数用于往工具栏里添加一组按钮,函数定义如下:

BOOL AddButtons( int nNumButtons, LPTBBUTTON lpButtons );
nNumButtons:要添加的按钮数量 也就是函数第二个参数数组大小。lpButtons:一个TBBUTTON结构数组的地址

TBBUTON结构定义如下:
typedef struct _TBBUTTON
{
  int iBitmap; // 按钮显示的图片索引,没有图像为NULL,
  int idCommand; // 与此按钮相关联的命令标识符,当fsStyle具有TBSTYLE_SEP属性时,该项必须为0
  BYTE fsState; // 按钮的状态标志
  BYTE fsStyle; //按钮风格
  DWORD dwData; // 用户定义的数据

  int iString; // 按钮显示的文本内容索引,无为NULL。
} TBBUTTON;

“MFC类库详解”关于fsState和fsStyle参数的解释如下:

fsState 按钮的状态标志。它可以是下面列出的值的一个组合: · TBSTATE_CHECKED 该按钮具有TBSTYLE_CHECKED风格并且被按下。 · TBSTATE_ENABLED 按钮接收用户输入。一个不具有这个状态的按钮是不接收用户输入的,并且变灰。 · TBSTATE_HIDDEN 按钮不可见,并且不能接收用户输入。 · TBSTATE_INDETERMINATE 按钮是变灰的。 · TBSTATE_PRESSED 按钮被按下。 · TBSTATE_WRAP 按钮之后是一个分隔线。此按钮还必须具有TBSTATE_ENABLED状态。 sStyle 按钮风格。它可以是下列值的一个组合: · TBSTYLE_BUTTON 创建一个标准的按钮。 · TBSTYLE_CHECK 创建一个每次用户点击时可以在按下和弹起状态间切换的按钮。该按钮则处于按下状态时有一种不同的背景颜色。 · TBSTYLE_CHECKGROUP 创建一个核选按钮,它被选择后一直处于按下状态,直到同组中的另一个按钮被按下时它才弹起。 · TBSTYLE_GROUP 创建一个被选择后一直处于按下状态,直到同组中的另一个按钮被按下时它才弹起的按钮。 · TBSTYLE_SEP 创建一个分隔线,为按钮组之间提供一个小的间距。具有这个风格的按钮是不接收用户输入的。

用CToolBarCtrl类在窗口里显示一个工具栏的步骤如下:

引入四个图标文件到工程里,然后在对话框类定义两个变量:

 CImageList m_ImageList;
  CToolBarCtrl m_TBarCtrl;

然后在OnInitDialog函数添加如下代码:

TBBUTTON button[4];
 m_ImageList.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
    m_TBarCtrl.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,1200);
 m_TBarCtrl.SetImageList(&m_ImageList);
 for(int i=0;i<4;i++)
 {
  button[i].fsState=TBSTATE_ENABLED;
  button[i].fsStyle=TBSTYLE_BUTTON;
  button[i].iBitmap=i;
 }
    m_TBarCtrl.AddButtons(4,button);
 m_TBarCtrl.AutoSize();
 m_TBarCtrl.SetStyle(TBSTYLE_FLAT|CCS_TOP);

运行效果:

为CToolBarCtrl类创建的工具栏添加按钮单击处理消息

 上面的TBBUTON结构里有一个成员idCommand,这个成员跟菜单项的ID值一样,用于标识工具栏按钮项,也就是说idCommand是工具栏项ID号,就是最前面设置工具栏资源时,选择一个按钮,然后按回车,弹出一个对话框,里面有一个ID项,跟这个是一样的。

所以呢,我们只要把上面的给TBBUTTON结构成员赋值的语句改成下面这样就行了:
 for(int i=0;i<4;i++)
 {
  button[i].fsState=TBSTATE_ENABLED;
  button[i].fsStyle=TBSTYLE_BUTTON;
  button[i].iBitmap=i;

button[i].idCommand=1100+i;//新加的语句
 }

这样我们只要添加ON_COMMAND消息映射就可以处理一个按钮单击消息了,如上面第一个按钮的ID号是:1100;那么手工添加这个按钮单击消息映射的语句就是:

ON_COMMAND(1100,OnToolbar1)

OnToolbar1为消息处理函数,可自行添加

Android开发实战:ToolBar组件详解与高级应用 首先在res/menu/目录下创建 XML 文件:<item<item<item</menu>解释一下的取值含义:值表现形式适用场景ifRoom若空间充足则显示在 ToolBar 上主要操作(搜索、编辑)never永远隐藏在三点菜单中次要操作(设置、帮助)always强制显示,可能导致布局错乱极少使用withText图标+文字一起显示高可见性需求建议将高频操作设为ifRoom,次要功能留在溢出菜单,避免拥挤。 阅读详情

相关推荐

继承CToolBar自绘具有真彩按钮的工具栏

继承了CToolBar类实现的工具栏,可以显示真彩图标的按钮,是学习VC界面编程的一个比较好的例子。

VS2019MFC进行无预览简单绘图:直线,画笔,画刷,矩形,椭圆

1.MFC常用绘图函数 CreatePen 创建画笔;属性:线型、宽度、颜色 CreateSolidBrush 创建画刷,填充封闭图形 SetPixel 绘制像素点,返回RGB值 SetPixelV 绘制像素点,返回0或非0 MoveTo 移动当前位置,绘制直线时确定起点 LineTo 移动直线段,绘制直线时确定终点 Rectangle 绘制矩形 Ellipse 绘制椭圆 FillSolidRect 填充矩形颜色

星辰大海的博客 4431

MFC界面源程序(学习分割,自定义工具栏,重绘,outlookBar)

这是个学习单文档视图分割,动态切换的好例子(思路清晰,代码简单),源文件中还提供了控件重绘、outlookBar及运用真色彩工具栏的代码。无dll,纯代码。 适合人群:c/c++/MFC中级程序员 目的:学习交流

CToolBar的使用总结

今天需要把程序工具栏的颜色背景改变,苦无解决办法,正在解决中,发现这边文章,学习之转载:http://hi.baidu.com/huangwenzhixin/blog/item/82df4bca5dbbf64ef21fe7c2.html(一)工具条控制的主要功能所谓工具条就是具有位图和分隔符组成的一组命令按钮,位图按钮部分可以是下推按钮、检查盒按钮、无线按 钮等。工

1123

绝对原创,派生CWnd,模仿MFClistctrl控件封装属于自己的listWnd噢

绝对原创,派生CWnd,模仿MFClistctrl控件封装属于自己的listWnd噢,有需要的尽管下载啊。

用Omniverse Kit开发第一个USD插件:从环境配置到实战案例(Python 3.7版)

本文详细介绍了如何使用NVIDIA Omniverse Kit和Python 3.7开发第一个USD插件,涵盖从环境配置到实战案例的全过程。通过创建可实时同步材质属性的USD插件,开发者可以快速掌握Omniverse开发框架,提升3D内容创作效率。

x8y9z0的博客 586

自绘工具条

  自绘工具条                          工具条总是界面设计中首先考虑的对象。它可以完成菜单的功能,并以绚丽的图标装饰,同时能够停靠和浮动。MFC实现了多种工具条封装类,如CToolBar、CReBar、CDialogBar、CToolBarCtrl等,它们可以实现不同特性的工具栏。如CToolBar可以停靠浮动,CReBar

窦怡彬的专栏 1643

Origin科研绘图——桑基图

是一种用于展示“流动”(flow)关系的可视化图表,常用于呈现能量流、物质流、资金流、信息流等在不同节点之间的传递和分配情况。它最大的特点是用“宽度可变的流线”来直观表示数量大小——流线越宽,代表流量越大,因此特别适合理解复杂系统中资源从哪里来、到哪里去、以及不同路径所占比例。为该流程对应的数量。只需将各个流程逐项填写在 A、B、C 三列即可,流程的排列顺序并非关键,确保起点、终点及对应数值准确才是最重要的。与柱状图、饼图不同,桑基图不仅展示“多少”,还展示“从哪到哪”。至此,本期教程就结束啦。

weixin_41301530的博客 1394

MFC--CToolBar

1 创建  CToolBar    m_wndToolBar; BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, UINT nID = AFX_IDW_TOOLBAR ); 参数说明 pParentWnd:标识父窗口。 dwStyle:标识工具栏风格。可选值如下: CBRS

evsqiezi 2277

方案设计之亿级排行榜方案设计

该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。

shine0312的专栏 1100

DRAM内存模拟持久化设备的方法

由于持久化内存介质NVM技术的发展,越来越多的科研工作者投身到NVM相关的研究当中。但由于目前工业界并没有推出广泛使用的NVM介质设备,所以科研工作都需要自己以现有的条件,模拟NVM设备使用场景。一个简单的方法是:通过修改DRAM模拟器,达到模拟NVM的目的(可以参考:DRAMSim2模拟器分析与应用)。更高端的方式是:在真实系统中,将内存划分出一块儿,用来模拟NVM设备(类似于传统的ramdis

酷炫人笨笨熊 1899

Android标题栏深度控制:从ActionBar到Toolbar的动态隐藏、显示与定制

在Android应用开发中,UI组件定制是提升用户体验的关键环节。标题栏作为用户与应用交互的首要视觉焦点,其灵活控制直接影响应用的直观性与专业性。从早期的ActionBar到现代主流的Toolbar,Android提供了多种技术方案来实现标题栏的动态管理。其核心原理在于通过主题配置和代码控制,调整窗口属性和视图可见性,从而满足不同场景下的界面需求。这项技术的价值在于,它允许开发者根据具体页面(如全屏游戏、视频播放器或简洁登录页)灵活调整布局,实现沉浸式体验或自定义导航。在实际工程实践中,开发者需要掌握在Ac

weixin_33709219的博客 385

C# HttpClient 实战:3步绕过Cloudflare指纹拦截,获取完整网页内容

本文详细介绍了如何使用C# HttpClient绕过Cloudflare指纹拦截,获取完整网页内容的3步实战方案。通过完美复制浏览器请求头、智能管理Cookie容器以及处理动态挑战页面,开发者可以有效突破Cloudflare的反爬机制,适用于爬虫开发和数据采集项目。

weixin_31856057的博客 320

12.2--Toolbar

Toolbar 将会是我们本章接触的第一个控件,是由AndroidX 库提供的。虽说对于 Toolbar 你暂时应该还是比较陌生的,但是对于它的另一个相关控件 ActionBar ,你就应该有点熟悉了。 回忆一下,我们曾经在 4.4.1 小节为了使用一个自定义的标题栏,而隐藏了系统原生的 ActionBar。没错,每个Activity 最顶部的那个标题栏其实就是 ActionBar,之前我们编写的所有程序里直都有它的身影。 不过ActionBar 由于其设计的原因,被限定只能位于 Activity 的顶

优快云_DaShuiNiu的博客 342

AutoSAR配置视频讲解:新建DaVinci工程

AutoSAR实验视频讲解:闪烁一颗LED实验【新建DaVinci工程】 上一篇 | 下一篇 | 总目录 实验架构图 视频本频放在了文末,下图描述了本次实验配置内容在AutoSAR架构中的位置,供大家参考 实验内容 本节课程讲解新建DaVinci工程,听上去新建工程很简单,但是还是需要很多的准备工作和细节。主要内容是新建工程和导入dbc文件和导入arxml文件的方法 主要步骤 新建DaVinci工程 导入.dbc通信矩阵文件 导入Mcal的arxml文件 实验视频2:Mcal配置 提示:版权所在,违

雪云飞星的博客 6275

用 SAP-ABAP-1 把 ABAP 代码读懂:从 Generative AI Hub Orchestration 到 Joule 落地的实战指南

SAP-ABAP-1 是 SAP 推出的 ABAP 专用基础模型,专注于代码解释与理解。它能显著降低企业遗留系统的维护成本,帮助开发人员快速掌握复杂业务逻辑。该模型通过 SAP Generative AI hub 托管,支持 128,000 tokens 的上下文长度,适合分析大型 ABAP 类和 CDS 视图。典型应用场景包括代码解释、迁移辅助和云合规检查。调用需通过 Orchestration service 进行,确保企业级安全治理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1212

Android之toolbar的使用

Android在5.0的时候已经淘汰了ActionBar,取而代之的是叫做toolbar的东西,toolbar类似于一个控件,放在layout文件中,可以在layout文件中直接添加属性,也可以在代码findviewbyid之后设置属性,并且可以在toolbar的XML文件中添加别的TextView或者ImageView等控件,使用非常的灵活,可以说和一个布局文件没什么区别,为了兼容低版本的机型,

欢乐斗佛的博客 6万+

通信原理 | CRC循环冗余校验码(最简介明了的原理和matlab程序)

异或运算: 多项式: CRC校验中用到的除数,是由多项式的各项系数组成的,如下所示: 没有的项系数为0,比如:x5次方、x3次方下一步,在原数据串的末端加“0”0的数量由多项式决定具体来说,多项式的阶数是多少就加几个0 具体操作: 现在,我们有了除数,也有了处理过的数据串,如下所示: 就可以开始计算校验和 了将数据串第一个1与除数左对齐,按位进行异或操作: 将未处理的数据搬下来作为新的数据,重复操作: 将新的数据串第一个1与除数左对齐,再重复按位异或操作: 如此循环,直到所有数据都处理过

若北辰 2357

java 动态生成toolbar_自定义Toolbar添加双击事件

今天在播放器中,突然想到了如果列表项过多,那么用户手指连续滑着回到顶部未免太累!类似微信朋友圈的 双击 TitleBar 返回顶部 ,既然微信这超级App都实现了,那还等什么呢?动手做起来吧。我们这里是 双击Toolbar返回顶部 ,不仅如此,其实在回调方法中可以做自己想做的事情。预览图 SuperToolbar.java代码:public classSuperToolbarextendsTool...

weixin_42314680的博客 249

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android L+ Theme 与 Toolbar 实例

随着Android L和M的发布,app的Material Design也逐渐普及。材料设计是良心之作,不仅逐渐推动Android琳琅满目的app界面的统一,而且使开发者更加关注app的功能,而非UI设计。

安卓猴的专栏 1116

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android toolbar右边更多菜单图标颜色修改

以前做app都是按设计师来,现在自己设计app,好爽,material design! <androidx.appcompat.widget.Toolbar android:id="@+id/toolBar" android:layout_width="match_parent" ...

情随事迁个人博客 1099

toolbar和popupwindow的使用

前言: 大多数时候,都习惯了”搬抄”,直接拿已有的东西,在改改,很多时候都是这样,toolbar和popupwindow使用的时候就是这样,今天整理一下,可以当用的时候,能复制粘贴,能修改,还能自己动手亲自写。 toolbar: 概述:在android 3.0的时候推出了actionBar这个控件,在android 5.0时,推出toolbar,在v7包中,用来取代actionBar. 使用:

amelons的博客 1783

android toolbar 不显示_第二百五十九回:Android中的Toolbar菜单二

各位看官们大家好,上一回中咱们说的是Android中Toolbar的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!看官们,我们在上一章回中介绍了如何使用菜单,相信大家对菜单有了整体的认识,这一回中我们将对菜单中的一些细节做介绍。或者更加准确的说是menu中item的属性介绍。我们以上一章回中创建的ment菜单为例进行说明,其中的id就是必须有的,在处理菜单...

weixin_30840919的博客 330

使用WinDbg对Windows Live Toolbar死锁的简单分析

 我一直在用Windows Live Toolbar中的Live Favorites来同步我的书签信息,但是速度总是很慢,甚至完全死掉。今天闲来无事,刚看到Mark的一篇Blog http://blogs.technet.com/markrussinovich/archive/2006/08/31/453100.aspx,对于他不放过任何问题的精神很是钦佩,准备效法一番。正好遇到IE关闭之后停

张羿的优快云专栏 4478
上一篇: 常用链接
下一篇: CHeaderCtrl 参考
htt9931
博客等级 码龄24年 43粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值