当前位置: 首页 > news >正文

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

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

在软件的主界面中,增加了一个地址栏功能。
本人的文章内容都是经本人亲自实现并验证成功的干货,关注我,互相交流学习,共同进步!

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

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

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

实现步骤:

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

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

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

	CMFCToolBar       m_wndQuickConnectBar;

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

CMFCToolBarComboBoxButton * m_QuickConnectComboProtocol = 0;CMFCToolBarComboBoxButton * m_QuickConnectComboAddress = 0;

3、初始化

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个图标为Protocolm_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个图标为Addressm_wndQuickConnectBar.SetWindowText(L"快速连接");

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

ReplaceButton的原型定义:

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


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也能响应相应的消息,比如按回车键。

在此模块下面增加


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

http://www.lryc.cn/news/291768.html

相关文章:

  • 【Android】屏幕锁
  • springCloud gateway 防止XSS漏洞
  • 美赛摘要写作重点
  • RUST笔记: 动态链接库的创建和使用
  • 「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建
  • @ 代码随想录算法训练营第6周(C语言)|Day36(贪心)
  • 数组打印杨辉三角
  • 【操作系统·考研】文件系统
  • 中国传媒网CEO徐晓艺荣膺第九届金鸥奖“2023年度最佳创新人物”殊荣
  • ElementUI Form:Switch 开关
  • 通俗易懂理解注意力机制(Attention Mechanism)
  • git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支
  • 【leetcode100-081到090】【动态规划】一维五题合集1
  • 数据结构-顺序表详解专题
  • 对商业知识和思维的一些小体会
  • 【笔记】计算文件夹的大小
  • 机器学习_常见算法比较模型效果(LR、KNN、SVM、NB、DT、RF、XGB、LGB、CAT)
  • 外包干了8个月,技术退步明显...
  • opencv#41 轮廓检测
  • Websocket基本用法
  • node.js与express.js创建项目以及连接数据库
  • 【Tomcat与网络8】从源码看Tomcat的层次结构
  • Java Agent Premain Agentmain
  • Python实现设计模式-策略模式
  • 详解SpringCloud微服务技术栈:深入ElasticSearch(4)——ES集群
  • AlmaLinux上安装Docker
  • 熟悉MATLAB 环境
  • 【数据库数据恢复】Oracle数据库ASM磁盘组数据恢复案例
  • STM32CubeMX教程31 USB_DEVICE - HID外设_模拟键盘或鼠标
  • 知道Wi-Fi名称和密码之后自动连接