Browse Source

1、加宽右侧遥控面板;
2、将遥控面板和执行器面板停靠在一起;
3、TCP客户端读取配置文件内容;

scbc.sat2 5 years ago
parent
commit
0da1614a28

+ 201 - 0
SATHelper/SATHelper/DevicesWnd.cpp

@@ -0,0 +1,201 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
+// (“Fluent UI”)。该示例仅供参考,
+// 用以补充《Microsoft 基础类参考》和
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问
+// https://go.microsoft.com/fwlink/?LinkId=238214.
+//
+// 版权所有(C) Microsoft Corporation
+// 保留所有权利。
+
+#include "stdafx.h"
+#include "framework.h"
+
+#include "DevicesWnd.h"
+#include "Resource.h"
+#include "MainFrm.h"
+#include "SATHelper.h"
+#include <filehelper.h>
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#define new DEBUG_NEW
+#endif
+
+extern CMainFrame* g_pMainFrame;
+
+// 重启进程按钮id;
+#define ID_BUTTON_RESTART_PROC 4
+// 复制框控件id;
+#define ID_CHECKBOX_SIGNAL_TYPE 5
+// 下拉框控件id;
+#define ID_COMBOBOX_SIGNAL_FILE 6
+/////////////////////////////////////////////////////////////////////////////
+// CResourceViewBar
+
+CDevicesWnd::CDevicesWnd() noexcept
+{
+	m_nComboHeight = 0;
+}
+
+CDevicesWnd::~CDevicesWnd()
+{
+	FreeLogLibarary();	
+}
+
+
+BEGIN_MESSAGE_MAP(CDevicesWnd, CDockablePane)
+	ON_WM_CREATE()
+	ON_WM_SIZE()
+	ON_COMMAND(ID_EXPAND_ALL, OnExpandAllProperties)
+	ON_UPDATE_COMMAND_UI(ID_EXPAND_ALL, OnUpdateExpandAllProperties)
+	ON_COMMAND(ID_SORTPROPERTIES, OnSortProperties)
+	ON_UPDATE_COMMAND_UI(ID_SORTPROPERTIES, OnUpdateSortProperties)
+	ON_COMMAND(ID_PROPERTIES1, OnProperties1)
+	ON_UPDATE_COMMAND_UI(ID_PROPERTIES1, OnUpdateProperties1)
+	ON_COMMAND(ID_PROPERTIES2, OnProperties2)
+	ON_UPDATE_COMMAND_UI(ID_PROPERTIES2, OnUpdateProperties2)
+	ON_WM_SETFOCUS()
+	ON_WM_SETTINGCHANGE()
+	ON_WM_PAINT()
+	
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CResourceViewBar 消息处理程序
+
+void CDevicesWnd::AdjustLayout()
+{
+	if (GetSafeHwnd() == nullptr || (AfxGetMainWnd() != nullptr && AfxGetMainWnd()->IsIconic()))
+	{
+		return;
+	}
+
+	CRect rectClient;
+	GetClientRect(rectClient);
+	m_dlgService.SetWindowPos(nullptr, rectClient.left, rectClient.top + m_nComboHeight, rectClient.Width(), rectClient.Height(), SWP_NOACTIVATE);
+
+}
+
+int CDevicesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	CRect rectDummy;
+	rectDummy.SetRectEmpty();
+
+	// 创建组合: 
+	const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | CBS_SORT | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
+
+	if (!m_dlgService.Create(IDD_DLG_SERVICE, this))
+	{
+		TRACE0("未能创建遥控器主窗口 \n");
+		return -1;      // 未能创建
+	}
+	m_dlgService.ShowWindow(SW_SHOW);
+
+	// 设置最小窗体;
+	SetMinSize((530, 300));
+
+	// 校正布局;
+	AdjustLayout();
+
+	return 0;
+}
+
+void CDevicesWnd::OnSize(UINT nType, int cx, int cy)
+{
+	CDockablePane::OnSize(nType, cx, cy);
+
+	TRACE2("坐标:%d,%d\n", cx, cy);
+
+	AdjustLayout();
+}
+
+void CDevicesWnd::OnExpandAllProperties()
+{
+	//m_wndPropList.ExpandAll();
+}
+
+void CDevicesWnd::OnUpdateExpandAllProperties(CCmdUI* /* pCmdUI */)
+{
+}
+
+void CDevicesWnd::OnSortProperties()
+{
+	//m_wndPropList.SetAlphabeticMode(!m_wndPropList.IsAlphabeticMode());
+}
+
+void CDevicesWnd::OnUpdateSortProperties(CCmdUI* pCmdUI)
+{
+	//pCmdUI->SetCheck(m_wndPropList.IsAlphabeticMode());
+}
+
+void CDevicesWnd::OnProperties1()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CDevicesWnd::OnUpdateProperties1(CCmdUI* /*pCmdUI*/)
+{
+	// TODO: 在此处添加命令更新 UI 处理程序代码
+}
+
+void CDevicesWnd::OnProperties2()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CDevicesWnd::OnUpdateProperties2(CCmdUI* /*pCmdUI*/)
+{
+	// TODO: 在此处添加命令更新 UI 处理程序代码
+}
+
+void CDevicesWnd::OnSetFocus(CWnd* pOldWnd)
+{
+	CDockablePane::OnSetFocus(pOldWnd);
+}
+
+void CDevicesWnd::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
+{
+	CDockablePane::OnSettingChange(uFlags, lpszSection);
+	//SetPropListFont();
+}
+
+void CDevicesWnd::SetPropListFont()
+{
+	::DeleteObject(m_fntPropList.Detach());
+
+	LOGFONT lf;
+	afxGlobalData.fontRegular.GetLogFont(&lf);
+
+	NONCLIENTMETRICS info;
+	info.cbSize = sizeof(info);
+
+	afxGlobalData.GetNonClientMetrics(info);
+
+	lf.lfHeight = info.lfMenuFont.lfHeight;
+	lf.lfWeight = info.lfMenuFont.lfWeight;
+	lf.lfItalic = info.lfMenuFont.lfItalic;
+
+	m_fntPropList.CreateFontIndirect(&lf);
+
+	//m_wndObjectCombo.SetFont(&m_fntPropList);
+}
+
+// 如果CDockablePane无控件,改变大小时背景会刷新失败;
+// 所以要重载onpaint;
+void CDevicesWnd::OnPaint()
+{
+	CPaintDC dc(this); // device context for painting
+					   // TODO: 在此处添加消息处理程序代码
+					   // 不为绘图消息调用 	CDockablePane::OnPaint();
+	CRect rc;
+	GetClientRect(rc);
+	CBrush   brush;
+	brush.CreateSolidBrush(0xFFEFD5);
+	dc.FillRect(&rc, &brush);
+}

+ 77 - 0
SATHelper/SATHelper/DevicesWnd.h

@@ -0,0 +1,77 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
+// (“Fluent UI”)。该示例仅供参考,
+// 用以补充《Microsoft 基础类参考》和
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问
+// https://go.microsoft.com/fwlink/?LinkId=238214.
+//
+// 版权所有(C) Microsoft Corporation
+// 保留所有权利。
+
+#include "DlgService.h"
+#include <map>
+#pragma once
+
+class CDevicesBar : public CMFCToolBar
+{
+public:
+	virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler)
+	{
+		CMFCToolBar::OnUpdateCmdUI((CFrameWnd*) GetOwner(), bDisableIfNoHndler);
+	}
+
+	virtual BOOL AllowShowOnList() const { return FALSE; }
+};
+
+class CDevicesWnd : public CDockablePane
+{
+// 构造
+public:
+	CDevicesWnd() noexcept;
+
+	void AdjustLayout();
+
+// 特性
+public:
+
+protected:
+	CFont m_fntPropList;
+	// 对话框;
+	CDlgService m_dlgService;
+	
+// 实现
+public:
+	virtual ~CDevicesWnd();
+	// 去掉关闭按钮;但组合多个pane时无效;
+	virtual BOOL CanBeClosed() const { return FALSE; };
+	// 禁止拖动Pane;
+	virtual BOOL FloatPane(CRect rectFloat, AFX_DOCK_METHOD dockMethod = DM_UNKNOWN, bool bShow = true) { return FALSE; }
+	// 禁用停靠,双击底部无效(不会停靠)
+	//virtual BOOL CanFloat() const { return FALSE; };
+	// 禁用大小;//崩溃;
+	//virtual BOOL IsResizable() const {return FALSE;}
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	afx_msg void OnExpandAllProperties();
+	afx_msg void OnUpdateExpandAllProperties(CCmdUI* pCmdUI);
+	afx_msg void OnSortProperties();
+	afx_msg void OnUpdateSortProperties(CCmdUI* pCmdUI);
+	afx_msg void OnProperties1();
+	afx_msg void OnUpdateProperties1(CCmdUI* pCmdUI);
+	afx_msg void OnProperties2();
+	afx_msg void OnUpdateProperties2(CCmdUI* pCmdUI);
+	afx_msg void OnSetFocus(CWnd* pOldWnd);
+	afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
+
+	DECLARE_MESSAGE_MAP()
+
+	void SetPropListFont();
+
+	int m_nComboHeight;
+
+public:
+	afx_msg void OnPaint();
+};
+

+ 103 - 0
SATHelper/SATHelper/DlgService.cpp

@@ -0,0 +1,103 @@
+// DlgService.cpp: 实现文件
+//
+
+#include "stdafx.h"
+#include "SATHelper.h"
+#include "DlgService.h"
+#include "afxdialogex.h"
+
+
+// CDlgService 对话框
+
+IMPLEMENT_DYNAMIC(CDlgService, CDialogEx)
+
+CDlgService::CDlgService(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_DLG_SERVICE, pParent)
+{
+
+}
+
+CDlgService::~CDlgService()
+{
+}
+
+void CDlgService::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_LIST_DEVICES, m_listDevices);
+	DDX_Control(pDX, IDC_LIST_TASK, m_listTask);
+}
+
+
+BEGIN_MESSAGE_MAP(CDlgService, CDialogEx)
+	ON_WM_PAINT()
+	ON_WM_CTLCOLOR()
+END_MESSAGE_MAP()
+
+
+// CDlgService 消息处理程序
+
+
+BOOL CDlgService::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	// TODO:  在此添加额外的初始化
+	// 做为子窗口,这里设置透明度没有任何效果;
+	// SetLayeredWindowAttributes(RGB(1, 2, 3), 0, LWA_COLORKEY/*|LWA_ALPHA*/);
+	InitCtrl();
+	return TRUE;  // return TRUE unless you set the focus to a control
+				  // 异常: OCX 属性页应返回 FALSE
+}
+
+
+void CDlgService::OnPaint()
+{
+	CPaintDC dc(this); // device context for painting
+					   // TODO: 在此处添加消息处理程序代码
+					   // 不为绘图消息调用 CDialogEx::OnPaint()
+	CRect rc;
+	GetClientRect(rc);
+	CBrush   brush;
+	brush.CreateSolidBrush(0xFFEFD5);
+	dc.FillRect(&rc, &brush);
+}
+
+
+HBRUSH CDlgService::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	// TODO:  在此更改 DC 的任何特性
+	if (nCtlColor == CTLCOLOR_STATIC)
+	{
+		pDC->SetBkMode(TRANSPARENT);//设置背景透明
+		//pDC->SetTextColor(RGB(255, 255, 0));//设置字体为黄色
+		return (HBRUSH)::GetStockObject(NULL_BRUSH);
+	}
+	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
+	return hbr;
+}
+
+void CDlgService::InitCtrl()
+{
+	// 初始化设备列表;
+	m_listDevices.InsertColumn(0, "No");
+	m_listDevices.SetColumnWidth(0, 25);
+	m_listDevices.InsertColumn(1, "类型");
+	m_listDevices.SetColumnWidth(1, 55);
+	m_listDevices.InsertColumn(2, "名称");
+	m_listDevices.SetColumnWidth(2, 140);
+	m_listDevices.InsertColumn(3, "状态");
+	m_listDevices.SetColumnWidth(3, 55);
+
+	// 初始化任务列表;
+	m_listTask.InsertColumn(0, "No");
+	m_listTask.SetColumnWidth(0, 25);
+	m_listTask.InsertColumn(1, "任务ID");
+	m_listTask.SetColumnWidth(1, 130);
+	m_listTask.InsertColumn(2, "状态");
+	m_listTask.SetColumnWidth(2, 55);
+	m_listTask.InsertColumn(3, "结果");
+	m_listTask.SetColumnWidth(3, 55);
+}

+ 32 - 0
SATHelper/SATHelper/DlgService.h

@@ -0,0 +1,32 @@
+#pragma once
+
+
+// CDlgService 对话框
+
+class CDlgService : public CDialogEx
+{
+	DECLARE_DYNAMIC(CDlgService)
+
+public:
+	CDlgService(CWnd* pParent = nullptr);   // 标准构造函数
+	virtual ~CDlgService();
+
+// 对话框数据
+#ifdef AFX_DESIGN_TIME
+	enum { IDD = IDD_DLG_SERVICE };
+#endif
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
+
+	DECLARE_MESSAGE_MAP()
+public:
+	virtual BOOL OnInitDialog();
+	CListCtrl m_listDevices;
+	CListCtrl m_listTask;
+	afx_msg void OnPaint();
+	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+
+	// 初始化控件;
+	void InitCtrl();
+};

+ 1 - 1
SATHelper/SATHelper/IRControlWnd.cpp

@@ -186,7 +186,7 @@ int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	Loadlayout(m_vtBtnInfo);
 #endif
 	// 设置最小窗体;
-	SetMinSize((530, 260));
+	SetMinSize((530, 300));
 
 	// 校正布局;
 	AdjustLayout();

+ 15 - 1
SATHelper/SATHelper/MainFrm.cpp

@@ -305,6 +305,9 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 #endif
 	m_wndIRControl.EnableDocking(CBRS_ALIGN_ANY);
 	DockPane(&m_wndIRControl);
+	m_wndDevices.EnableDocking(CBRS_ALIGN_ANY);
+	CDockablePane* pTabbedBar = nullptr;
+	m_wndDevices.AttachToTabWnd(&m_wndIRControl, DM_SHOW, TRUE, &pTabbedBar);
 #endif
 
 	// 基于持久值设置视觉管理器和样式
@@ -427,12 +430,20 @@ BOOL CMainFrame::CreateDockingWindows()
 
 	// 创建遥控器窗口
 	CString strPropertiesWnd = _T("遥控器");
-	if (!m_wndIRControl.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
+	if (!m_wndIRControl.Create(strPropertiesWnd, this, CRect(0, 0, 230, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
 	{
 		TRACE0("未能创建“遥控器”窗口\n");
 		return FALSE; // 未能创建
 	}
 
+	// 创建设备管理窗口
+	CString strDevicesWnd = _T("执行器");
+	if (!m_wndDevices.Create(strDevicesWnd, this, CRect(0, 0, 230, 200), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
+	{
+		TRACE0("未能创建“执行器”窗口\n");
+		return FALSE; // 未能创建
+	}
+
 	SetDockingWindowIcons(theApp.m_bHiColorIcons);
 	return TRUE;
 }
@@ -455,6 +466,9 @@ void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
 	HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
 	m_wndIRControl.SetIcon(hPropertiesBarIcon, FALSE);
 
+	HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
+	m_wndDevices.SetIcon(hOutputBarIcon, FALSE);
+
 #if __TAB_BAR__
 	UpdateMDITabbedBarsIcons();
 #endif

+ 2 - 0
SATHelper/SATHelper/MainFrm.h

@@ -25,6 +25,7 @@
 #include "DeviceView.h"
 #include "UB530View.h"
 #include "filehelper.h"
+#include "DevicesWnd.h"
 //////////////////////////////////////////////////////////////////////////
 #include "TrayIcon.h"
 #define USE_TRAYICON 1
@@ -80,6 +81,7 @@ protected:  // 控件条嵌入成员
 	COutputWnd        m_wndOutput;
 #endif
 	CIRControlWnd     m_wndIRControl;
+	CDevicesWnd		  m_wndDevices;
 #endif
 
 #if __OUTLOOKBAR__

+ 10 - 2
SATHelper/SATHelper/Resource.h

@@ -117,6 +117,7 @@
 #define IDD_DLG_LOGIN                   317
 #define IDD_DLG_PROBAR                  319
 #define GIF_PROBAR                      322
+#define IDD_DLG_SERVICE                 323
 #define IDC_COMBO1                      1000
 #define IDC_COMBO2                      1001
 #define IDC_CHECK1                      1002
@@ -126,6 +127,13 @@
 #define IDC_EDIT1                       1006
 #define IDC_EDIT_PASSWORD               1007
 #define IDC_EDIT_USERNAME               1008
+#define BTN_MODIFY_RUNNER_NAME          1009
+#define IDC_IP_ANDROID                  1010
+#define IDC_MFCBUTTON2                  1011
+#define BTN_ADD_ANDROID                 1011
+#define IDC_LIST_DEVICES                1012
+#define IDC_LIST_TASK                   1013
+#define IDC_EDIT_RUNNER_NAME            1014
 #define ID_WRITE_PASTEASHYPERLINK       32770
 #define ID_TRAYMENU_RECONNECT           32771
 #define ID_TRAYMENU_EXIT                32772
@@ -176,9 +184,9 @@
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        323
+#define _APS_NEXT_RESOURCE_VALUE        326
 #define _APS_NEXT_COMMAND_VALUE         32826
-#define _APS_NEXT_CONTROL_VALUE         1009
+#define _APS_NEXT_CONTROL_VALUE         1015
 #define _APS_NEXT_SYMED_VALUE           310
 #endif
 #endif

+ 1 - 3
SATHelper/SATHelper/SATClient.cpp

@@ -280,10 +280,8 @@ void CSATClient::TaskProcess(SATProtocol::Package* pak)
 
 BOOL CSATClient::Start()
 {
-	std::string strAddr = "";
-	std::string strPort = "5588";
 	int nFamily = (m_nMode == AF_IPV4) ? AF_INET : AF_INET6;
-	if (!m_SocketClient.StartClient(NULL, strAddr.c_str(), strPort.c_str(), nFamily, (m_nSockType + 1)))
+	if (!m_SocketClient.StartClient(NULL, Global::g_Config.strServiceIP.c_str(), Global::g_Config.strSATPassword.c_str(), nFamily, (m_nSockType + 1)))
 	{
 #ifdef _DEBUG
 		OutputDebugString("Á¬½Ó·þÎñÆ÷ʧ°Ü\n");

+ 5 - 1
SATHelper/SATHelper/SATHelper.cpp

@@ -145,7 +145,11 @@ BOOL CSATHelperApp::InitInstance()
 	Global::WriteTextLog("程序启动");
 
 	// 启动TCP客户端;
-	CSATClient::GetInstance()->Start();
+	if (CSATClient::GetInstance()->Start())
+	{
+		if (Global::g_Config.bAutoLogin)
+			CSATClient::GetInstance()->TCPLogin(Global::g_Config.strSATUserName, Global::g_Config.strSATPassword);
+	}
 
 	// 启动TCP服务端;
 	g_iocp.LoadSocketLib();

+ 23 - 0
SATHelper/SATHelper/SATHelper.ini

@@ -0,0 +1,23 @@
+[ir-device]
+;4.0路径
+redratpath=C:\Python27\Tools\RedRatHub-V4.28\RedRatHubCmd.exe
+;是否使用通用遥控信号
+generics=1
+;信号集路径
+signal=D:\SAT\resource\RCU
+;使用的信号集;
+use-signal=RC311
+
+[SATService]
+;用户名
+UserName=superAdmin
+;密码
+Password=123456
+;是否自动登录
+AutoLogin=1
+;执行器名称;
+Actuator=SAT-Admin
+;如果是本机,ip可不填;
+ServiceIP=
+;端口号;
+ServicePort=5588

+ 87 - 0
SATHelper/SATHelper/SATHelper.rc

@@ -484,6 +484,25 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
 END
 
+IDD_DLG_SERVICE DIALOGEX 0, 0, 199, 311
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_TRANSPARENT
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+    LTEXT           "执行器:",IDC_STATIC,4,17,33,8
+    EDITTEXT        IDC_EDIT_RUNNER_NAME,36,14,100,14,ES_AUTOHSCROLL
+    CONTROL         "修改",BTN_MODIFY_RUNNER_NAME,"MfcButton",WS_TABSTOP,139,14,50,14
+    CONTROL         "",IDC_IP_ANDROID,"SysIPAddress32",WS_TABSTOP,36,32,100,15
+    CONTROL         "添加",BTN_ADD_ANDROID,"MfcButton",WS_TABSTOP,139,32,50,14
+    LTEXT           "设备IP:",IDC_STATIC,4,35,31,8
+    CONTROL         "",IDC_LIST_DEVICES,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,3,53,186,86
+    CONTROL         "",IDC_LIST_TASK,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,3,160,186,112
+    GROUPBOX        "",IDC_STATIC,0,6,193,137
+    GROUPBOX        "",IDC_STATIC,0,153,193,131
+    LTEXT           "执行器:",IDC_STATIC,2,0,33,8
+    LTEXT           "任务列表:",IDC_STATIC,2,147,41,8
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -571,6 +590,14 @@ BEGIN
         TOPMARGIN, 7
         BOTTOMMARGIN, 78
     END
+
+    IDD_DLG_SERVICE, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 192
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 304
+    END
 END
 #endif    // APSTUDIO_INVOKED
 
@@ -613,6 +640,11 @@ BEGIN
     0
 END
 
+IDD_DLG_SERVICE AFX_DIALOG_LAYOUT
+BEGIN
+    0
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -622,6 +654,61 @@ END
 GIF_PROBAR              GIF                     "res\\probar.gif"
 
 
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog Info
+//
+
+IDD_DLG_SERVICE DLGINIT
+BEGIN
+    BTN_MODIFY_RUNNER_NAME, 0x37c, 369, 0
+0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x535f, 0x7974, 0x656c, 0x343e, 
+0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7453, 0x6c79, 0x3e65, 
+0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x415f, 0x7475, 0x736f, 0x7a69, 
+0x3e65, 0x4146, 0x534c, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, 
+0x415f, 0x7475, 0x736f, 0x7a69, 0x3e65, 0x4d3c, 0x4346, 0x7542, 0x7474, 
+0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x4d2f, 0x4346, 0x7542, 
+0x7474, 0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x464d, 0x4243, 
+0x7475, 0x6f74, 0x5f6e, 0x7546, 0x6c6c, 0x6554, 0x7478, 0x6f54, 0x6c6f, 
+0x543e, 0x5552, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x465f, 
+0x6c75, 0x546c, 0x7865, 0x5474, 0x6f6f, 0x3e6c, 0x4d3c, 0x4346, 0x7542, 
+0x7474, 0x6e6f, 0x435f, 0x7275, 0x6f73, 0x5472, 0x7079, 0x3e65, 0x3131, 
+0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7543, 0x7372, 0x726f, 
+0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 
+0x6761, 0x5465, 0x7079, 0x3e65, 0x3c38, 0x4d2f, 0x4346, 0x7542, 0x7474, 
+0x6e6f, 0x495f, 0x616d, 0x6567, 0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, 
+0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x546e, 0x706f, 0x463e, 
+0x4c41, 0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 
+0x6761, 0x4f65, 0x546e, 0x706f, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, 
+0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x526e, 0x6769, 0x7468, 0x463e, 0x4c41, 
+0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, 
+0x4f65, 0x526e, 0x6769, 0x7468, "\076" 
+    BTN_ADD_ANDROID, 0x37c, 369, 0
+0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x535f, 0x7974, 0x656c, 0x343e, 
+0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7453, 0x6c79, 0x3e65, 
+0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x415f, 0x7475, 0x736f, 0x7a69, 
+0x3e65, 0x4146, 0x534c, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, 
+0x415f, 0x7475, 0x736f, 0x7a69, 0x3e65, 0x4d3c, 0x4346, 0x7542, 0x7474, 
+0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x4d2f, 0x4346, 0x7542, 
+0x7474, 0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x464d, 0x4243, 
+0x7475, 0x6f74, 0x5f6e, 0x7546, 0x6c6c, 0x6554, 0x7478, 0x6f54, 0x6c6f, 
+0x543e, 0x5552, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x465f, 
+0x6c75, 0x546c, 0x7865, 0x5474, 0x6f6f, 0x3e6c, 0x4d3c, 0x4346, 0x7542, 
+0x7474, 0x6e6f, 0x435f, 0x7275, 0x6f73, 0x5472, 0x7079, 0x3e65, 0x3131, 
+0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7543, 0x7372, 0x726f, 
+0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 
+0x6761, 0x5465, 0x7079, 0x3e65, 0x3c38, 0x4d2f, 0x4346, 0x7542, 0x7474, 
+0x6e6f, 0x495f, 0x616d, 0x6567, 0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, 
+0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x546e, 0x706f, 0x463e, 
+0x4c41, 0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 
+0x6761, 0x4f65, 0x546e, 0x706f, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, 
+0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x526e, 0x6769, 0x7468, 0x463e, 0x4c41, 
+0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, 
+0x4f65, 0x526e, 0x6769, 0x7468, "\076" 
+    0
+END
+
+
 /////////////////////////////////////////////////////////////////////////////
 //
 // String Table

+ 5 - 1
SATHelper/SATHelper/SATHelper.vcxproj

@@ -78,7 +78,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\..\..\bin\$(ProjectName)\</OutDir>
     <IntDir>$(OutDir)$(Configuration)\</IntDir>
-    <TargetName>$(ProjectName)D</TargetName>
+    <TargetName>$(ProjectName)</TargetName>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
@@ -211,6 +211,7 @@
     <ClInclude Include="calendarbar.h" />
     <ClInclude Include="CaptureDef.h" />
     <ClInclude Include="CharEncoding.h" />
+    <ClInclude Include="DevicesWnd.h" />
     <ClInclude Include="DeviceView.h" />
     <ClInclude Include="ChildFrm.h" />
     <ClInclude Include="ClassView.h" />
@@ -218,6 +219,7 @@
     <ClInclude Include="Device.h" />
     <ClInclude Include="DlgLogin.h" />
     <ClInclude Include="DlgProBar.h" />
+    <ClInclude Include="DlgService.h" />
     <ClInclude Include="FileView.h" />
     <ClInclude Include="framework.h" />
     <ClInclude Include="Global.h" />
@@ -267,12 +269,14 @@
     <ClCompile Include="Base64.cpp" />
     <ClCompile Include="calendarbar.cpp" />
     <ClCompile Include="CharEncoding.cpp" />
+    <ClCompile Include="DevicesWnd.cpp" />
     <ClCompile Include="DeviceView.cpp" />
     <ClCompile Include="ChildFrm.cpp" />
     <ClCompile Include="ClassView.cpp" />
     <ClCompile Include="Device.cpp" />
     <ClCompile Include="DlgLogin.cpp" />
     <ClCompile Include="DlgProBar.cpp" />
+    <ClCompile Include="DlgService.cpp" />
     <ClCompile Include="FileView.cpp" />
     <ClCompile Include="Global.cpp" />
     <ClCompile Include="IMGCommon.cpp" />

+ 12 - 0
SATHelper/SATHelper/SATHelper.vcxproj.filters

@@ -204,6 +204,12 @@
     <ClInclude Include="SATData.h">
       <Filter>SATClient</Filter>
     </ClInclude>
+    <ClInclude Include="DevicesWnd.h">
+      <Filter>DockPane</Filter>
+    </ClInclude>
+    <ClInclude Include="DlgService.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="SATHelper.cpp">
@@ -332,6 +338,12 @@
     <ClCompile Include="SATData.cpp">
       <Filter>SATClient</Filter>
     </ClCompile>
+    <ClCompile Include="DevicesWnd.cpp">
+      <Filter>DockPane</Filter>
+    </ClCompile>
+    <ClCompile Include="DlgService.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="SATHelper.rc">

+ 10 - 2
SATHelper/SATHelper/resource.h

@@ -117,6 +117,7 @@
 #define IDD_DLG_LOGIN                   317
 #define IDD_DLG_PROBAR                  319
 #define GIF_PROBAR                      322
+#define IDD_DLG_SERVICE                 323
 #define IDC_COMBO1                      1000
 #define IDC_COMBO2                      1001
 #define IDC_CHECK1                      1002
@@ -126,6 +127,13 @@
 #define IDC_EDIT1                       1006
 #define IDC_EDIT_PASSWORD               1007
 #define IDC_EDIT_USERNAME               1008
+#define BTN_MODIFY_RUNNER_NAME          1009
+#define IDC_IP_ANDROID                  1010
+#define IDC_MFCBUTTON2                  1011
+#define BTN_ADD_ANDROID                 1011
+#define IDC_LIST_DEVICES                1012
+#define IDC_LIST_TASK                   1013
+#define IDC_EDIT_RUNNER_NAME            1014
 #define ID_WRITE_PASTEASHYPERLINK       32770
 #define ID_TRAYMENU_RECONNECT           32771
 #define ID_TRAYMENU_EXIT                32772
@@ -176,9 +184,9 @@
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        323
+#define _APS_NEXT_RESOURCE_VALUE        326
 #define _APS_NEXT_COMMAND_VALUE         32826
-#define _APS_NEXT_CONTROL_VALUE         1009
+#define _APS_NEXT_CONTROL_VALUE         1015
 #define _APS_NEXT_SYMED_VALUE           310
 #endif
 #endif