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