VC ++删除浮动工具栏中的“关闭”按钮

电脑杂谈  发布时间:2020-04-01 15:11:59  来源:网络整理

mfc中添加工具栏按钮的tooltips功能_mfc对话框 按钮变色_mfc对话框去掉关闭按钮

在Visual C ++自动生成的MFC框架应用程序中,将浮动工具栏拖离主框架窗口时,通常在工具栏的右上角有一个“关闭”按钮. 应该说这个按钮是完全按照应用程序的用户界面(UI)设计规范设计的,这意味着所有窗口都应该有一个供用户关闭此窗口的位置. 但是一些开发人员建议不要使用此“关闭”按钮. 本示例通过自定义扩展的工具栏类达到删除工具栏上“关闭”按钮的目的. 程序编译并运行后的界面效果如图1所示:

图1.没有“关闭”按钮的浮动工具栏

I. 实施方法

首先,对于删除工具栏上的“关闭”按钮的问题,让我们确定实施思路. 因为我们要实现的功能与工具栏有关,所以所涉及的类必须与CToolBar有关. 其次,为了确定工具栏浮动后“关闭”按钮的状态,我们需要一个表示状态的成员变量. 第三,要实现工具栏的浮动特性,我们需要处理工具栏窗口的ON_WM_WINDOWPOSCHANGED消息. 此消息负责CToolBar窗口的大小,位置或Z坐标的更改. 为什么不使用WM_SIZE / OnSize来处理窗口大小的变化?因为仅在更改窗口大小且不更改窗口位置时才调用它,所以不必在每次浮动工具栏时都调用WM_SIZE / OnSize. 我们可以使用基类CControlBar的m_pDockBar成员变量来调用GetParent()以获取工具栏的父窗口. 为了更改父级窗口的样式,请达到系统菜单的目的,即删除“关闭”按钮.

有了这个主意mfc对话框去掉关闭按钮,让我们看一下具体的实现代码. 让我们从CToolBar派生一个新的类CToolBarEx. 因为我们的目的是在工具栏浮动时删除“关闭”按钮,所以我们仅判断工具栏是否浮动. 是的,可以使用CControlBar类的属性判断函数: BOOL IsFloating()const来完成此操作. 在新类中添加一个成员变量以使用它来指示“关闭”按钮的状态: BOOL m_bMenuRemoved. 当我们删除主机的系统菜单属性时,其值为TRUE. 接下来,我们使用m_pDockBar来确定父窗口类型是否为CMiniFrameWnd. 此类表示浮动工具栏周围的框架窗口. 经过上述处理,我们可以安全地从CToolBar中删除系统菜单. 这是处理ON_WM_WINDOWPOSCHANGED消息的代码:

void CToolBarEx :: OnWindowPosChanged(WINDOWPOS FAR * lpwndpos)

{

CToolBar :: OnWindowPosChanged(lpwndpos);

//浮动时只能调用一次.

if(IsFloating())

{

如果(m_pDockBar &&!m_bMenuRemoved)

{

CWnd * pParent = m_pDockBar-> GetParent();

如果(pParent-> IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))

{

pParent-> ModifyStyle(WS_SYSMENU,0,0);

m_bMenuRemoved = TRUE;

}

}

}

否则,如果(m_bMenuRemoved){

mfc对话框 按钮变色_mfc中添加工具栏按钮的tooltips功能_mfc对话框去掉关闭按钮

m_bMenuRemoved =否;

}

}

两个编程步骤

1. 启动Visual C ++ 6.0,生成单个文档视图结构应用程序,并将程序命名为“ FltTBClsBtn”;

2. 使用类向导将新类CtoolBarEx添加到项目中,该类的基类为CToolBar;

3mfc对话框去掉关闭按钮,在CMainFrme类中,将成员变量m_wndToolBar的类型修改为CtoolBarEx;

4. 添加代码,编译并运行程序.

三,程序代码

///////////////////////////////////////////////// //// //////////////////////////////

// ToolBarEx.h: 头文件

#ifndef __TOOLBAREX_H __

#define __TOOLBAREX_H __

#if _MSC_VER> = 1000

#pragma一次

#endif // _MSC_VER> = 1000

CToolBarEx类: 公共CToolBar

{

DECLARE_DYNAMIC(CToolBarEx)

//施工

公开

:

CToolBarEx();

mfc对话框去掉关闭按钮_mfc中添加工具栏按钮的tooltips功能_mfc对话框 按钮变色

//属性

受保护的:

BOOL m_bMenuRemoved;

//操作

公开

:

//替代

// ClassWizard生成的虚函数重写

// {{AFX_VIRTUAL(CToolBarEx)

//}} AFX_VIRTUAL

//实施

公开

:

虚拟〜CToolBarEx();

//生成的消息映射功能

受保护的:

// {{AFX_MSG(CToolBarEx)

afx_msg void OnWindowPosChanged(WINDOWPOS FAR * lpwndpos);

//}} AFX_MSG

DECLARE_MESSAGE_MAP()

};

#endif // __TOOLBAREX_H __

///////////////////////////////////////////////// //// ////////////////////////// ToolBarEx.cpp: 实施文件

mfc对话框去掉关闭按钮_mfc对话框 按钮变色_mfc中添加工具栏按钮的tooltips功能

#include“ StdAfx.h”

#include“ ToolBarEx.h”

#include

#ifdef _DEBUG

#define新的DEBUG_NEW

#undef THIS_FILE

静态字符THIS_FILE [] = __FILE __;

#endif

CToolBarEx :: :: CToolBarEx()

{

// TODO: 在此处添加构造代码.

m_bMenuRemoved =否;

}

CToolBarEx ::〜CToolBarEx()

{

// TODO: 在此处添加销毁代码.

}

IMPLEMENT_DYNAMIC(CToolBarEx,CToolBar)

BEGIN_MESSAGE_MAP(CToolBarEx,CToolBar)

// {{AFX_MSG_MAP(CToolBarEx)

ON_WM_WINDOWPOSCHANGED()

//}} AFX_MSG_MAP

END_MESSAGE_MAP()

// CToolBarEx消息处理程序

void CToolBarEx :: OnWindowPosChanged(WINDOWPOS FAR * lpwndpos)

{

CToolBar :: OnWindowPosChanged(lpwndpos);

//浮动时只能调用一次.

if(IsFloating())

{

如果(m_pDockBar &&!m_bMenuRemoved)

{

CWnd * pParent = m_pDockBar-> GetParent();

如果(pParent-> IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))

{

pParent-> ModifyStyle(WS_SYSMENU,0,0);

m_bMenuRemoved = TRUE;

}

}

}

否则,如果(m_bMenuRemoved){

m_bMenuRemoved =否;

}

}

四个摘要

此示例使用自定义类处理Windows中的窗口位置更改消息,以达到删除浮动工具栏上的“关闭”按钮的目的. 在上述过程中,主要任务是确定当前窗口的父窗口是否为浮动工具栏的框架窗口类-CMiniFrameWnd类.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-160176-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...