VxTerm:C++ MFC,在工具栏中增加Edit/ComboBox等组件,打造一个地址栏/搜索栏功能

VxTerm软件可以在本站链接下载:唯一国产化SSH工具下载,单文件纯绿色不需要安装,替代SecureCRT

在软件的主界面中,增加了一个地址栏功能。

本人的文章内容都是经本人亲自实现并验证成功的干货,关注我,互相交流学习,共同进步!

1、首先,得先假设您已实现了一个工具栏。

如果您还没有实现这个,那么就关注我吧,以后我应该会增加文章介绍如何实现这么一个工具栏的。

2、工具栏实现后,希望在工具栏中增加Edit/Combo等组件,实现类似于地址栏、搜索栏的功能。

实现步骤:

1、先在资源管理器中添加一个toolbar IDR_TOOLBAR_QuickConnect,在里面增加相应的占位图标

像我这样,中间那两个图标,一个是用于连接协议ID为ID_PROTOCOL,一个是用于地址栏ID为ID_ADDRESS。

2、在头文件中定义一个新的工具栏:

cpp 复制代码
	CMFCToolBar       m_wndQuickConnectBar;

同时定义两个变量,用于之后的组件管理:

cpp 复制代码
	CMFCToolBarComboBoxButton * m_QuickConnectComboProtocol = 0;
	CMFCToolBarComboBoxButton * m_QuickConnectComboAddress = 0;

3、初始化

cpp 复制代码
	if (!m_wndQuickConnectBar.Create(this) 
		|| !m_wndQuickConnectBar.LoadToolBar(IDR_TOOLBAR_QuickConnect))
	{
		TRACE0("未能创建快速连接工具栏\n");
		return -1; 
	}
	m_wndQuickConnectBar.ReplaceButton(ID_PROTOCOL, CMFCToolBarComboBoxButton(ID_PROTOCOL, 0, CBS_DROPDOWNLIST, 80));
	m_QuickConnectComboProtocol =(CMFCToolBarComboBoxButton*) m_wndQuickConnectBar.GetButton(1); //第1个图标为Protocol
	m_QuickConnectComboProtocol->AddItem(L"TELNET");
	m_QuickConnectComboProtocol->AddItem(L"SSH");
	m_QuickConnectComboProtocol->SelectItem(L"SSH");
	m_wndQuickConnectBar.ReplaceButton(ID_ADDRESS, CMFCToolBarComboBoxButton(ID_ADDRESS, 0, CBS_DROPDOWN, 150));
	m_QuickConnectComboAddress = (CMFCToolBarComboBoxButton*)m_wndQuickConnectBar.GetButton(2); //第2个图标为Address
	m_wndQuickConnectBar.SetWindowText(L"快速连接");

在代码里,由于在toolbar中增加了2个占位图标,所以可以使用ReplaceButton对它们一一进行替换。如果不使用占位图标方式,可以用InsertButton来添加,需自行从帮助中找到关于它的调用方法。

ReplaceButton的原型定义:

cpp 复制代码
int ReplaceButton(
    UINT uiCmd,
    const CMFCToolBarButton& button,
    BOOL bAll=FALSE);

参数

uiCmd

in 要替换的按钮的命令 ID。

button

in 对要插入的 CMFCToolBarButton 的引用。

bAll

in 一个布尔值,该值指定是否替换具有 uiCmd 指定的命令 ID 的所有按钮。 如果此参数为 TRUE,则替换具有指定命令 ID 的所有按钮。 否则,将替换第一个按钮。

返回值

已替换的按钮数。 如果工具栏上不存在具有指定命令 ID 的按钮,此方法将返回 0。

注解

如果要添加无法从资源加载的工具栏按钮,请调用此方法。 可以在设计时创建占位符按钮,并在初始化工具栏时将该按钮替换为自定义按钮。 有关使用此方法的示例,请参阅 VisualStudioDemo 示例。

4、在地址栏中增加消息响应,实现输入内容后按回车执行功能模块

在主程序的主消息循环模块中,增加特定按钮的点击响应:在toolbar中前后两个图标分别为ID_QuickConnect_Open和ID_DoQuickConnectFromBar

cpp 复制代码
BEGIN_MESSAGE_MAP(CVxTermApp, CWinAppEx)
。。。
	ON_COMMAND(ID_QuickConnect_Open, &CVxTermApp::OnQuickconnect)
	ON_COMMAND(ID_DoQuickConnectFromBar, &CVxTermApp::OnDoQuickconnectFromBar)
。。。
END_MESSAGE_MAP()

这两个消息响应正确执行后,咱们能确定可以在此模块中对中间的两个ID_PROTOCOL和ID_ADDRESS也能响应相应的消息,比如按回车键。

在此模块下面增加

cpp 复制代码
BOOL CVxTermApp::PreTranslateMessage(MSG* pMsg)
{
	switch (pMsg->message)
	{
	case WM_KEYDOWN:
	{
		if (pMsg->wParam == VK_RETURN)
		{
			HWND p = GetFocus(); //获取当前的输入焦点
			CMainFrame* pM = (CMainFrame*)theApp.m_pMainWnd;
			CMFCToolBarComboBoxButton * p2 = pM->m_QuickConnectComboAddress;
			CEdit* p22 = p2->GetEditCtrl(); //获取地址栏中的Edit组件的对象
			if (p == p22->GetSafeHwnd()) //判断当前焦点是否在此Edit组件对象中
			{
				OnDoQuickconnectFromBar(); //执行
				return 1;
			}
		}
	}
		break;
}
	return CWinAppEx::PreTranslateMessage(pMsg);
}

至此,我们实现了:

在工具栏中增加4个功能组件和相应的操作响应:

(1)打开快速连接的界面

(2)直接在工具栏中选择连接协议

(3)直接在工具栏中输入IP和端口等信息

(4)在地址输入框中按回车,或者是点击第4个图标开始执行

相关推荐
Chester_19995 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导7 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan7 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子7 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化7 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251497 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說8 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
学习星球9 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode