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个图标开始执行

相关推荐
belldeep21 分钟前
如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?
c语言·开发语言
LuckyTHP22 分钟前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
a东方青2 小时前
蓝桥杯 2024 C++国 B最小字符串
c++·职场和发展·蓝桥杯
XiaoyaoCarter3 小时前
每日一道leetcode
c++·算法·leetcode·职场和发展·二分查找·深度优先·前缀树
Blossom.1183 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
da-peng-song3 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
galaxy_strive3 小时前
qtc++ qdebug日志生成
开发语言·c++·qt
TNTLWT3 小时前
Qt功能区:简介与安装
开发语言·qt
Darkwanderor4 小时前
c++STL-list的模拟实现
c++·list
Humbunklung4 小时前
Visual Studio 2022 中添加“高级保存选项”及解决编码问题
前端·c++·webview·visual studio