MFC 非线程创建模态化窗口 实现工具栏拓展

这篇具有很好参考价值的文章主要介绍了MFC 非线程创建模态化窗口 实现工具栏拓展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MFC 非线程创建模态化窗口 实现工具栏拓展

1 实现基本工具栏

1.1 在Dlg.h文件中声明变量和定义资源ID

#define ID_BUTTONS 501

CToolBar m_toolbar;  //工具栏
CImageList m_imageList;  //工具栏图片
CImageList m_hotImageList;  //工具栏热点图片
CReBar m_Rebar;  //可以在位图上显示子窗口口 用来显示背景
CString str;  //用于鼠标停留时的消息

1.2 在资源视图中导入Bitmap资源图片

MFC 非线程创建模态化窗口 实现工具栏拓展
可以在右击资源符号中查看具体ID值

MFC 非线程创建模态化窗口 实现工具栏拓展

1.3 在Dlg.cpp文件中的OnInitDialog()方法中导入Bitmap与按钮ID

//大小要一致
m_imageList.Create(70, 70, ILC_COLOR24 | ILC_MASK, 1, 1);
m_hotImageList.Create(70, 70, ILC_COLOR24 | ILC_MASK, 1, 1);

CBitmap bmp;

bmp.LoadBitmap(IDB_BITMAP2);
m_imageList.Add(&bmp, RGB(255, 255, 255));
bmp.DeleteObject();

bmp.LoadBitmap(IDB_BITMAP3);
m_hotImageList.Add(&bmp, RGB(255, 255, 255));
bmp.DeleteObject();

//按钮ID列表
UINT nArray[1];
nArray[0] = ID_BUTTONS;

m_toolbar.CreateEx(this);
m_toolbar.EnableToolTips();  //开启消息提示
m_toolbar.SetButtons(nArray,1); //注入按钮
m_toolbar.SetButtonText(0, _T("0")); //设置索引为0的按钮文本为"0"
m_toolbar.SetSizes(CSize(90, 90),CSize(80, 80)); //设置工具栏的大小 前一个CSize必须比后一个大!!!
m_toolbar.GetToolBarCtrl().SetImageList(&m_imageList); //设置图片列表
m_toolbar.GetToolBarCtrl().SetHotImageList(&m_hotImageList); //设置热点图片列表
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST0,0); //自适应放置工具栏

1.4 开启鼠标停靠信息提示

先在Dlg.h中增加函数声明

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

再Dlg.cpp中实现

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

增加消息映射宏开启提示

 ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnDisplay)

1.5 效果呈现

MFC 非线程创建模态化窗口 实现工具栏拓展
MFC 非线程创建模态化窗口 实现工具栏拓展

MFC 非线程创建模态化窗口 实现工具栏拓展

2 重绘窗口

2.1 新建一个Dialog资源

MFC 非线程创建模态化窗口 实现工具栏拓展

2.2 新建一个类继承CDialogEx

MFC 非线程创建模态化窗口 实现工具栏拓展

2.3 声明按钮资源ID宏和自定义消息ID

#define MESSAGE_CAD WM_USER+100
#define ID_CHILD_BUTTON_CAD 1001

2.4 声明工具栏和图片列表

CToolBar m_child_toolbar;
CImageList m_child_imageList;
int x = 0;

2.5 重载OnInitDialog()函数

增加

if(x==0){
	m_child_imageList.Create(50,38,ILC_COLOR24 | ILC_MASK , 1, 1);
	CBitmap bmp;
	bmp.LoadBitmap(IDB_BITMAP2);
	m_child_imageList.Add(&bmp,RGB(255,255,255));
	bmp.DeleteObject();
	UINT nArray[2];
	for(int i = 0 ; i < 1; i++){
		nArray[i] = ID_CHILD_BUTTON_CAD + i;
	}
	m_child_toolbar.CreateEx(this);
	m_child_toolbar.SetButtons(nArray,1);
	m_child_toolbar.SetButtonText(0, _T("0"));
	m_child_toolbar.SetSizes(CSize(80,80),CSize(70,70));
	m_child_toolbar.GetToolBarCtrl().SetImageList(&m_child_imageList);
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
}
CRect tempRect;
::GetWindowRect(AfxGetMainWnd()->m_hWnd, tempRect);
MoveWindow(tempRect.left, tempRect.top + 125, 600, 200, FALSE);

2.6 增加按键消息声明并实现

void OnBnClickForCAD1();
CString s = _T("成功");
//向主界面发送MESSAGE_CAD消息
::PostMessage(AfxGetMainWnd()->m_hWnd , MESSAGE_CAD,(WPARAM)_T(""),(LPARAM)&s);

2.7 增加按键消息映射宏

ON_COMMAND(ID_CHILD_BUTTON_CAD,&CChildDlg::OnBnClickForCAD1)

2.8 实现窗口不能移动

声明OnNcLButtonDown()方法

afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);

实现OnNcLButtonDown()方法

if (HTCAPTION == nHitTest)
{
    return;
}
CDialog::OnNcLButtonDown(nHitTest, point);

增加消息映射

 ON_WM_NCLBUTTONDOWN()

3 带工具栏弹出窗口

3.1 导入CChildDlg

#include "ChildDlg.h"

3.2 声明自定义消息ID

#define MESSAGE_CAD WM_USER+100

3.3 重写WindowProc函数

if(message == MESSAGE_CAD){
	AfxMessageBox(_T("成功"));
}
return CDialogEx::WindowProc(message,wParam,lParam);

MFC 非线程创建模态化窗口 实现工具栏拓展文章来源地址https://www.toymoban.com/news/detail-498030.html

3.4 增加消息映射函数声明并实现

ON_COMMAND(ID_BUTTONS,&CMyToolbarDlg::OnBnClickForCAD);
CChildDlg dlg;
dlg.x = 0;
dlg.DoModal();

3.7 增加按钮消息映射宏

ON_COMMAND(ID_BUTTONS,&CMyToolbarDlg::OnBnClickForCAD);

到了这里,关于MFC 非线程创建模态化窗口 实现工具栏拓展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt之菜单栏、工具栏、状态栏介绍及工具栏QAction的动态增删显示实现方式

    目的 端应用程序或者编辑器基本都支持工具栏快捷功能的动态增删,即通过在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮。那么Qt如何实现这个功能,本篇目的就是记录实现此功能的方法及思路。 效果 先看下

    2024年02月08日
    浏览(52)
  • Antd G6实现自定义工具栏

           在使用g6实现知识图谱可视化中,产品经理提出了有关图谱操作的不少功能,需要放置在工具栏中,其中有些功能不在g6自带的功能里,且工具栏样式、交互效果也和官方自定义工具栏不同。那我们怎么去实现呢?         g6官方的工具栏案例是这样:G6,提供了“重

    2024年01月25日
    浏览(55)
  • 微信小程序,商城底部工具栏的实现

    效果演示:   前提条件: 去阿里云矢量图标,下载8个图标,四个黑,四个红,如图: 新建文件夹icons,把图标放到该文件夹,然后把该文件夹移动到该项目的文件夹里面。如图所示     app.json

    2024年02月15日
    浏览(40)
  • 【IntelliJ IDEA】怎么调整工具栏的工具图标,比如在工具栏显示git push按钮

    演示版本为2019.1.1 想调整一下IDEA的工具栏图标,但是搜了一下,都感觉说的不是很完整,或者跟着步骤却没有任何效果,以下是个人使用的一些经验,希望可以帮到你 如果你是想在View - ToolBar中的工具栏添加按钮,也就是这一栏 比如我的git 原本是没有push按钮的,该怎么添加

    2024年02月11日
    浏览(63)
  • WPF自定义漂亮顶部工具栏 WPF自定义精致最大化关闭工具栏 wpf导航栏自定义 WPF快速开发工具栏

    在WPF应用程序开发中,自定义一个漂亮的顶部工具栏具有多重关键作用,它不仅增强了用户体验,还提升了整体应用的专业性和易用性。以下是对这一功能的详细介绍: 首先,自定义顶部工具栏是用户界面设计的重要组成部分,它集成了应用程序的核心操作入口,如关闭、最

    2024年01月15日
    浏览(51)
  • vue3使用工作流bpmn.js实现保存 ,新增,修改 ,右边工具栏自定义,属性栏自定义

    vue3使用工作流bnpm.js实现保存 ,新增,修改 ,右边工具栏自定义,属性栏自定义

    2024年02月13日
    浏览(36)
  • Android工具栏ToolBar

    主流APP除了底部有一排标签栏外,通常顶部还有一排导航栏。在Android5.0之前,这个顶部导航栏以ActionBar控件的形式出现,但AcionBar存在不灵活、难以扩展等毛病,所以Android5.0之后推出了 ToolBar工具栏 控件,意在取代AcionBar。 但为了兼容之前的版本,ActionBar按件仍然保留。 T

    2024年02月05日
    浏览(51)
  • 16.Qt 工具栏生成

    目录 前言: 技能: 内容: 1. 界面添加 2. 信号槽  功能实现 参考: 前言: 基于QMainWindow ,生成菜单下面的工具栏,可以当作菜单功能的快捷键,也可以完成新的功能 直接在UI文件中生成 技能: 创建工具栏 内容: 基于QMainWindow!!!创建时基类选择QMainWindow 1. 界面添加 菜

    2024年02月19日
    浏览(50)
  • wangEditor系列之工具栏配置

    mode为default mode为simple 下方分别介绍对面得四个属性 结果如下 分组可以给key设置 | 斜体就不在工具栏展现了 如果你感觉文章不咋地 //(ㄒoㄒ)// ,就在评论处留言,作者继续改进; o_O??? 如果你觉得该文章有一点点用处,可以给作者点个赞; \\\\*^o^*// 如果你想要和作者一起进步

    2024年02月09日
    浏览(51)
  • idea上方工具栏调整位置

    一,点进去idea发现在上方的工具栏那里所有的工具都消失了,如下图所示,Tomcat服务器,包括安装的一些插件都不显示了 二,解决办法:可能是由于自己不小心点到了某个按钮,按照下图操作再把它设置一下就行了,点view–appearance–Navigation bar 三,点Toolbar会把工具栏位置

    2024年02月15日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包