Kaynağa Gözat

更新:但是VS2019调用Python27好像不成功,在VS2008没问题。

sat23 4 yıl önce
ebeveyn
işleme
0f3c2c8e01

+ 113 - 108
SATHelper/SATHelper/CallPython.cpp

@@ -1,159 +1,164 @@
 #include "StdAfx.h"
 #include "CallPython.h"
 
-void InitPython()
-{
-	if ( !Py_IsInitialized() )
-		Py_Initialize();
-}
-
-void FreePython()
-{
-	Py_Finalize();
-}
+namespace CallPython {
+	void InitPython()
+	{
+		if (!Py_IsInitialized())
+			Py_Initialize();
+	}
 
-void PySetItem(PyObject* args, _variant_t var, int nIndex)
-{
-	if ( args == NULL || nIndex < 0 )
-		return;
+	void FreePython()
+	{
+		Py_Finalize();
+	}
 
-	switch(var.vt)  
+	void PySetItem(PyObject* args, _variant_t var, int nIndex)
 	{
-	case VT_BSTR:
+		if (args == NULL || nIndex < 0)
+			return;
+
+		switch (var.vt)
+		{
+		case VT_BSTR:
 		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("s", var.bstrVal));
 			break;
 		}
-	case VT_LPSTR:
+		case VT_LPSTR:
 		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("s", var.bstrVal));
 			break;
 		}
-	case VT_I1:
+		case VT_I1:
 		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("b", var.cVal));
 			break;
 		}
-	case VT_I2: 
-		{  
+		case VT_I2:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("h", var.iVal));
-			break;  
-		} 
-	case VT_I4:
-		{  
+			break;
+		}
+		case VT_I4:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("i", var.lVal));
-			break;  
-		}  
-	case VT_I8:
-		{  
+			break;
+		}
+		case VT_I8:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("k", var.lVal));
-			break;  
+			break;
 		}
-	case VT_INT:
+		case VT_INT:
 		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("i", var.intVal));
-			break;  
+			break;
 		}
-	case VT_UI1:
+		case VT_UI1:
 		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("B", var.cVal));
 			break;
 		}
-	case VT_UI2:
-		{  
+		case VT_UI2:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("H", var.iVal));
-			break;  
-		} 
-	case VT_UI4: 
-		{  
+			break;
+		}
+		case VT_UI4:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("I", var.lVal));
-			break;  
-		}  
-	case VT_UI8:
-		{  
+			break;
+		}
+		case VT_UI8:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("K", var.lVal));
-			break;  
+			break;
 		}
-	case VT_UINT:
+		case VT_UINT:
 		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("I", var.intVal));
-			break;  
+			break;
 		}
-	case VT_R4:
-		{  
+		case VT_R4:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("f", var.fltVal));
-			break;  
-		}  
-	case VT_R8:
-		{  
+			break;
+		}
+		case VT_R8:
+		{
 			PyTuple_SetItem(args, nIndex, Py_BuildValue("f", var.dblVal));
-			break;  
-		}   
-	case VT_BOOL:
-		{  
-			PyTuple_SetItem(args, nIndex, Py_BuildValue("b", (var.boolVal == false) ? 0: 1));
-			break;  
-		}
-	default:  
-		{  
-			TRACE("UnSupport type for Python: %d\n",var.vt);  
-			break;  
-		}  
+			break;
+		}
+		case VT_BOOL:
+		{
+			PyTuple_SetItem(args, nIndex, Py_BuildValue("b", (var.boolVal == false) ? 0 : 1));
+			break;
+		}
+		default:
+		{
+			TRACE("UnSupport type for Python: %d\n", var.vt);
+			break;
+		}
+		}
 	}
-}
 
-PyObject *CallPython(std::string strPyPath, std::string strPyFuncName, int argc, ...)
-{
-	if ( !PathFileExists(strPyPath.c_str()) || !strPyFuncName.size() )
-		return NULL;
+	PyObject* CallPython(std::string strPyPath, std::string strPyFuncName, int argc, ...)
+	{
+		if (!Py_IsInitialized())
+			Py_Initialize();
 
-	TCHAR szDrive[_MAX_DRIVE] = { 0 };
-	TCHAR szDir[_MAX_DIR] = { 0 };
-	TCHAR szExt[_MAX_EXT] = { 0 };
-	TCHAR szFilename[_MAX_FNAME] = { 0 };
-	TCHAR szScriptDir[MAX_PATH] = { 0 };
-	_tsplitpath_s(strPyPath.c_str(), szDrive, szDir, szFilename, szExt);
-	_stprintf_s(szScriptDir, _T("%s%s"), szDrive, szDir);
-	int len = _tcslen(szScriptDir);
-	for (int i = 0; i < len; i++) {
-		if (szScriptDir[i] == '\\')
-			szScriptDir[i] = '/';
-	}
+		if (!PathFileExists(strPyPath.c_str()) || !strPyFuncName.size())
+			return NULL;
+
+		TCHAR szDrive[_MAX_DRIVE] = { 0 };
+		TCHAR szDir[_MAX_DIR] = { 0 };
+		TCHAR szExt[_MAX_EXT] = { 0 };
+		TCHAR szFilename[_MAX_FNAME] = { 0 };
+		TCHAR szScriptDir[MAX_PATH] = { 0 };
+		_tsplitpath_s(strPyPath.c_str(), szDrive, szDir, szFilename, szExt);
+		_stprintf_s(szScriptDir, _T("%s%s"), szDrive, szDir);
+		int len = _tcslen(szScriptDir);
+		for (int i = 0; i < len; i++) {
+			if (szScriptDir[i] == '\\')
+				szScriptDir[i] = '/';
+		}
 
-	if ( szScriptDir[0] == '\0' )
-		_tcscpy_s(szScriptDir, _T("./"));
+		if (szScriptDir[0] == '\0')
+			_tcscpy_s(szScriptDir, _T("./"));
 
-	TCHAR szExecuteDir[MAX_PATH] = { 0 };
-	_stprintf_s(szExecuteDir, _T("sys.path.append('%s')"), szScriptDir);
-	PyRun_SimpleString("import sys");
-	PyRun_SimpleString(szExecuteDir);
+		TCHAR szExecuteDir[MAX_PATH] = { 0 };
+		_stprintf_s(szExecuteDir, _T("sys.path.append('%s')"), szScriptDir);
+		PyRun_SimpleString("import sys");
+		PyRun_SimpleString(szExecuteDir);
 
-	PyObject *pModule = PyImport_ImportModule(szFilename);
-	if ( !pModule )
-		return NULL;
+		PyObject* pModule = PyImport_ImportModule(szFilename);
+		if (!pModule)
+			return NULL;
+
+		PyObject* pFunc = PyObject_GetAttrString(pModule, strPyFuncName.c_str());
+		if (!pFunc || !PyCallable_Check(pFunc))
+			return NULL;
 
-	PyObject *pFunc = PyObject_GetAttrString(pModule, strPyFuncName.c_str());
-	if (!pFunc || !PyCallable_Check(pFunc))
-		return NULL;
+		PyObject* pRet = NULL;
+		if (argc != 0) {
+			va_list ap;
+			va_start(ap, argc);
+			PyObject* args = PyTuple_New(argc);
+			if (!args) {
+				va_end(ap);
+				return NULL;
+			}
 
-	PyObject *pRet = NULL;
-	if ( argc != 0 ) {		
-		va_list ap;
-		va_start(ap, argc); 
-		PyObject *args = PyTuple_New(argc);
-		if ( !args ) {
+			for (int i = 0; i < argc; i++) {
+				PySetItem(args, va_arg(ap, _variant_t), i);
+			}
 			va_end(ap);
-			return NULL;
+			pRet = PyObject_CallObject(pFunc, args);
 		}
+		else
+			pRet = PyEval_CallObject(pFunc, NULL);
 
-		for ( int i = 0; i < argc; i++ ) {
-			PySetItem(args, va_arg(ap, _variant_t), i);
-		}
-		va_end(ap);
-		pRet = PyObject_CallObject(pFunc, args);
+		return pRet;
 	}
-	else
-		pRet = PyEval_CallObject(pFunc, NULL);
-
-	return pRet;
 }

+ 8 - 6
SATHelper/SATHelper/CallPython.h

@@ -4,11 +4,13 @@
 #include "Python.h"
 #include <comdef.h>
 
-// 初始化Python调用环境;
-extern "C" void InitPython();
-// 调用Python脚本指定函数;
-extern "C" PyObject* CallPython(std::string strPyPath, std::string strPyFuncName, int argc, ...);
-// 释放Python调用环境;
-extern "C" void FreePython();
+namespace CallPython {
+	// 初始化Python调用环境;
+	extern "C" void InitPython();
+	// 调用Python脚本指定函数;
+	extern "C" PyObject * CallPython(std::string strPyPath, std::string strPyFuncName, int argc, ...);
+	// 释放Python调用环境;
+	extern "C" void FreePython();
 
+}
 #endif

+ 4 - 0
SATHelper/SATHelper/Global.cpp

@@ -353,6 +353,10 @@ namespace Global
 		g_Config.enableTVPort = GetPrivateProfileInt(_T("SATHelper"), _T("enableTVPort"), 0, szConfigpath);
 
 		g_Config.bRememberFTPInfo = GetPrivateProfileInt(_T("SATHelper"), _T("rememberFTPInfo"), 0, szConfigpath);
+		GetPrivateProfileString(_T("SATHelper"), _T("ftp_user"), NULL, szValue, MAX_PATH, szConfigpath);
+		g_Config.strFtpUser = szValue;
+		GetPrivateProfileString(_T("SATHelper"), _T("ftp_password"), NULL, szValue, MAX_PATH, szConfigpath);
+		g_Config.strFtpPassword = szValue;
 	}
 
 	BOOL GetOrientation(IN Image* pImg)

+ 2 - 0
SATHelper/SATHelper/Global.h

@@ -71,6 +71,8 @@ namespace Global
 
 		// 是否记住ftp信息;
 		bool bRememberFTPInfo;
+		std::string strFtpUser;
+		std::string strFtpPassword;
 	}STConfig, * pSTConfig;
 
 	// 读取baidu.cfg配置文件内容;

+ 2 - 2
SATHelper/SATHelper/MainFrm.cpp

@@ -331,10 +331,10 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	// 执行器Pane;
 	m_wndDevices.EnableDocking(CBRS_ALIGN_ANY);
 	CDockablePane* pTabbedBar = nullptr;
-	m_wndDevices.AttachToTabWnd(&m_wndIRControl, DM_SHOW, TRUE, &pTabbedBar);
+	m_wndDevices.AttachToTabWnd(&m_wndIRControl, DM_SHOW, FALSE, &pTabbedBar);
 	// 升级Pane;
 	m_wndUpgrade.EnableDocking(CBRS_ALIGN_ANY);
-	m_wndUpgrade.AttachToTabWnd(&m_wndIRControl, DM_SHOW, TRUE, &pTabbedBar);
+	m_wndUpgrade.AttachToTabWnd(&m_wndIRControl, DM_SHOW, FALSE, &pTabbedBar);
 #endif
 
 	// 基于持久值设置视觉管理器和样式

+ 2 - 2
SATHelper/SATHelper/SATHelper.cpp

@@ -122,7 +122,7 @@ BOOL CSATHelperApp::InitInstance()
 	}
 #endif
 
-	InitPython();
+	CallPython::InitPython();
 
 	// 示例;
 	//PyObject * pRet = CallPython("F:\\SAT\\SAT_API\\ssat_sdk\\device_manage\\testWizardClient.py", "API_UsbSwitch", 1, _variant_t(1));
@@ -249,7 +249,7 @@ int CSATHelperApp::ExitInstance()
 	AfxOleTerm(FALSE);
 	Gdiplus::GdiplusShutdown(m_gdiplusToken);
 	g_iocp.Stop();
-	FreePython();
+	CallPython::FreePython();
 	return CWinAppEx::ExitInstance();
 }
 

+ 102 - 64
SATHelper/SATHelper/UpgradeWnd.cpp

@@ -26,12 +26,12 @@ static char THIS_FILE[] = __FILE__;
 
 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
+#define ID_BTN_UPGRADE			7
+#define ID_EDIT_IMAGE_PATH		8
+#define ID_EIDT_FTP_USER		9
+#define ID_EDIT_FTP_PASSWORD	10
+#define ID_CHECK_REMEMBER_FTP	11
+
 /////////////////////////////////////////////////////////////////////////////
 // CResourceViewBar
 
@@ -49,18 +49,16 @@ CUpgradeWnd::~CUpgradeWnd()
 BEGIN_MESSAGE_MAP(CUpgradeWnd, 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()
-	
+	ON_COMMAND(ID_BTN_UPGRADE, OnUpgradeBtnClick)
+	ON_UPDATE_COMMAND_UI(ID_BTN_UPGRADE, OnUpdateBtnUpgrade)
+	ON_COMMAND(ID_CHECK_REMEMBER_FTP, OnCheckRememberFtpClick)
+	ON_UPDATE_COMMAND_UI(ID_CHECK_REMEMBER_FTP, OnUpdateCheckRememberFtp)
+	ON_EN_CHANGE(ID_EDIT_IMAGE_PATH, OnEnChangeEdit)
+	ON_UPDATE_COMMAND_UI(ID_EIDT_FTP_USER, OnUpdateFtpUser)
+	ON_UPDATE_COMMAND_UI(ID_EDIT_FTP_PASSWORD, OnUpdateFtpPassword)
 	ON_WM_CONTEXTMENU()
 	ON_WM_CTLCOLOR()
 END_MESSAGE_MAP()
@@ -111,7 +109,7 @@ void CUpgradeWnd::AdjustLayout()
 	// 4、是否记住ftp信息;
 	m_check_remember.GetWindowRect(rcCtrl);
 	ScreenToClient(rcCtrl);
-	m_check_remember.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, rcCtrl.Width(), rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
+	m_check_remember.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, rectClient.Width() - margin * 2, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
 	nHeight += rcCtrl.Height() + dr;
 
 	// 5、升级;
@@ -132,52 +130,43 @@ int CUpgradeWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | CBS_SORT | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
 
 	// 编辑框;
-	m_text_path.Create(_T("路径:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
-	if (!m_edit_path.Create( WS_CHILD | WS_VISIBLE, rectDummy, this, 8))
+	m_text_path.Create(_T("路径:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE , rectDummy, this, IDC_STATIC);
+	if (!m_edit_path.Create( WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, rectDummy, this, ID_EDIT_IMAGE_PATH))
 	{
 		return -1;
 	}
 
-	if (!m_btnUpgrade.Create(_T("升级"), WS_CHILD | WS_VISIBLE, rectDummy, this, 9))
+	m_text_user.Create(_T("FTP账号:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
+	if (!m_ftp_user.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, rectDummy, this, ID_EIDT_FTP_USER))
 	{
 		return -1;
 	}
 
-	m_text_user.Create(_T("FTP账号:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
-	if (!m_ftp_user.Create(WS_CHILD | WS_VISIBLE, rectDummy, this, 10))
+	m_text_password.Create(_T("FTP密码:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
+	if (!m_ftp_password.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_PASSWORD | WS_TABSTOP, rectDummy, this, ID_EDIT_FTP_PASSWORD))
 	{
+		//m_ftp_password.SetPasswordChar(‘*');
 		return -1;
 	}
 
-	m_text_password.Create(_T("FTP密码:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
-	if (!m_ftp_password.Create(WS_CHILD | WS_VISIBLE, rectDummy, this, 11))
+	if (!m_check_remember.Create(_T("记住信息"), WS_CHILD | BS_CHECKBOX| WS_VISIBLE | WS_TABSTOP, rectDummy, this, ID_CHECK_REMEMBER_FTP))
 	{
 		return -1;
 	}
 
-	if (!m_check_remember.Create(_T("记住信息"), WS_CHILD | WS_VISIBLE, rectDummy, this, 12))
+	if (!m_btnUpgrade.Create(_T("升级"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, ID_BTN_UPGRADE))
 	{
 		return -1;
 	}
 
-	m_check_remember.SetCheck(Global::g_Config.bRememberFTPInfo ? BST_CHECKED : BST_UNCHECKED);
-	m_check_remember.m_bHighlightChecked = TRUE;
-	// CMFCButton只能用图标来显示check;
-	m_check_remember.SetImage(IDB_UNCHECKED);
-	m_check_remember.SetCheckedImage(IDB_CHECKED);
-	m_check_remember.m_bTransparent = FALSE;
-	m_check_remember.m_bDrawFocus = FALSE;
-	m_check_remember.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
-	m_check_remember.SizeToContent();
-
-
 	// 以编辑框高度为所有控件高度标准;
 	CRect rcCtrl;
 	m_edit_path.GetClientRect(&rcCtrl);
 	m_nCtrlHeight = rcCtrl.Height();
 
 	// 设置控件样式;
-	SetPropListFont();
+	SetCtrlStyle();
+	SetStaticFont();
 
 	// 设置最小窗体;
 	SetMinSize((530, 260));
@@ -185,6 +174,9 @@ int CUpgradeWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	// 校正布局;
 	AdjustLayout();
 
+	m_ftp_user.SetWindowText(Global::g_Config.strFtpUser.c_str());
+	m_ftp_password.SetWindowText(Global::g_Config.strFtpPassword.c_str());
+
 	return 0;
 }
 
@@ -197,56 +189,77 @@ void CUpgradeWnd::OnSize(UINT nType, int cx, int cy)
 	AdjustLayout();
 }
 
-void CUpgradeWnd::OnExpandAllProperties()
+void CUpgradeWnd::OnUpgradeBtnClick()
 {
-	//m_wndPropList.ExpandAll();
-}
-
-void CUpgradeWnd::OnUpdateExpandAllProperties(CCmdUI* /* pCmdUI */)
-{
-}
+	CString strPath = _T(""), strFtpUser = _T(""), strFtpPassword = _T("");
+	m_edit_path.GetWindowText(strPath);
+	m_ftp_user.GetWindowText(strFtpUser);
+	m_ftp_password.GetWindowText(strFtpPassword);
+	if ( _bIsFtpPath ) {
+		Global::g_Config.strFtpUser = strFtpUser.GetString();
+		Global::g_Config.strFtpPassword = strFtpPassword.GetString();
+		WritePrivateProfileString("SATHelper", "ftp_user", strFtpUser.GetString(), Global::g_szConfig);
+		WritePrivateProfileString("SATHelper", "ftp_password", strFtpPassword.GetString(), Global::g_szConfig);
+	}
 
-void CUpgradeWnd::OnSortProperties()
-{
-	//m_wndPropList.SetAlphabeticMode(!m_wndPropList.IsAlphabeticMode());
-}
+	TCHAR szPath[MAX_PATH] = {0};
+	_stprintf_s(szPath, _T("%sscripts\\TVUpgrade.py"), Global::g_szCurModuleDir);
+	PyObject *pRet = CallPython::CallPython(szPath, _T("API_TVUpgrade"), 3, _variant_t(strPath.GetString()), _variant_t(strFtpUser.GetString()), _variant_t(strFtpPassword.GetString()));
+	if (pRet == NULL)
+	{
+		AfxMessageBox(_T("运行失败"));
+	}
+	else
+	{
+		TCHAR szValue[MAX_PATH] = {0};
+		PyArg_Parse(pRet, "s", &szValue);
+		AfxMessageBox(szValue);
+	}
 
-void CUpgradeWnd::OnUpdateSortProperties(CCmdUI* pCmdUI)
-{
-	//pCmdUI->SetCheck(m_wndPropList.IsAlphabeticMode());
 }
 
-void CUpgradeWnd::OnProperties1()
+void CUpgradeWnd::OnUpdateBtnUpgrade(CCmdUI* pCmdUI)
 {
-	// TODO: 在此处添加命令处理程序代码
 }
 
-void CUpgradeWnd::OnUpdateProperties1(CCmdUI* /*pCmdUI*/)
+void CUpgradeWnd::OnCheckRememberFtpClick()
 {
-	// TODO: 在此处添加命令更新 UI 处理程序代码
+	BOOL bCheck = m_check_remember.GetCheck();
+	m_check_remember.SetCheck(!bCheck);
+	Global::g_Config.bRememberFTPInfo = !bCheck;
+	WritePrivateProfileString("SATHelper", "rememberFTPInfo", Global::g_Config.bRememberFTPInfo ? "1" : "0", Global::g_szConfig);
 }
 
-void CUpgradeWnd::OnProperties2()
+void CUpgradeWnd::OnUpdateCheckRememberFtp(CCmdUI* pCmdUI)
 {
-	// TODO: 在此处添加命令处理程序代码
+	pCmdUI->SetCheck(Global::g_Config.bRememberFTPInfo);
 }
 
-void CUpgradeWnd::OnUpdateProperties2(CCmdUI* /*pCmdUI*/)
+void CUpgradeWnd::OnEnChangeEdit()
 {
-	// TODO: 在此处添加命令更新 UI 处理程序代码
+	UpdateData(TRUE);
+	CString strText = _T("");
+	m_edit_path.GetWindowText(strText);
+
+	strText.TrimLeft(_T(" "));
+	strText.MakeLower();
+	if (strText.Find(_T("ftp://")) == 0 ) 
+		_bIsFtpPath = TRUE;
+	else 
+		_bIsFtpPath = FALSE;
 }
 
-void CUpgradeWnd::OnSetFocus(CWnd* pOldWnd)
+void CUpgradeWnd::OnUpdateFtpUser(CCmdUI* pCmdUI)
 {
-	CDockablePane::OnSetFocus(pOldWnd);
+	pCmdUI->Enable(_bIsFtpPath);
 }
 
-void CUpgradeWnd::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
+void CUpgradeWnd::OnUpdateFtpPassword(CCmdUI* pCmdUI)
 {
-	CDockablePane::OnSettingChange(uFlags, lpszSection);
+	pCmdUI->Enable(_bIsFtpPath);
 }
 
-void CUpgradeWnd::SetPropListFont()
+void CUpgradeWnd::SetStaticFont()
 {
 	::DeleteObject(m_fntPropList.Detach());
 
@@ -267,7 +280,32 @@ void CUpgradeWnd::SetPropListFont()
 	m_text_path.SetFont(&m_fntPropList);
 	m_text_user.SetFont(&m_fntPropList);
 	m_text_password.SetFont(&m_fntPropList);
+	m_check_remember.SetFont(&m_fntPropList);
+
+	m_edit_path.SetFont(&m_fntPropList);
+	m_ftp_user.SetFont(&m_fntPropList);
+	m_ftp_password.SetFont(&m_fntPropList);
+}
 
+void CUpgradeWnd::SetCtrlStyle()
+{
+	// 将button设置成checkbox;
+	m_check_remember.SetCheck(Global::g_Config.bRememberFTPInfo ? BST_CHECKED : BST_UNCHECKED);
+	/*m_check_remember.m_bHighlightChecked = TRUE;
+	// CMFCButton只能用图标来显示check;
+	m_check_remember.SetImage(IDB_UNCHECKED);
+	m_check_remember.SetCheckedImage(IDB_CHECKED);
+	m_check_remember.m_bTransparent = FALSE;
+	m_check_remember.m_bDrawFocus = FALSE;
+	m_check_remember.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
+	m_check_remember.SizeToContent();*/
+
+	m_edit_path.EnableFileBrowseButton();
+	m_edit_path.EnableFileBrowseButton(_T(""), _T("Image Files(*.img)|*.img"
+		"|Zip Files(*.zip)|*.zip"
+		"|Rar Files(*.rar)|*.rar"
+		"|Binary Files(*.bin)|*.bin"
+		"|All Files (*.*)|*.*||"));
 }
 
 // 如果CDockablePane无控件,改变大小时背景会刷新失败;
@@ -296,7 +334,7 @@ HBRUSH CUpgradeWnd::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 	HBRUSH hbr = CDockablePane::OnCtlColor(pDC, pWnd, nCtlColor);
 
 	// TODO:  在此更改 DC 的任何特性
-	if (nCtlColor == CTLCOLOR_STATIC && pWnd->GetDlgCtrlID() == IDC_STATIC ) //静态文本颜色,并且指定控件ID号       
+	if (nCtlColor == CTLCOLOR_STATIC ) //静态文本颜色,并且指定控件ID号    && pWnd->GetDlgCtrlID() == IDC_STATIC   
 	{
 		pDC->SetTextColor(RGB(255, 0, 0));
 		//pDC->SetBkColor(RGB(191,219,255));     //静态控件的背景颜色设置,红字蓝底。          

+ 15 - 13
SATHelper/SATHelper/UpgradeWnd.h

@@ -38,6 +38,7 @@ protected:
 	CFont m_fntPropList;
 	// 路径编辑框;
 	CStatic m_text_path;
+	//CMFCEditBrowseCtrl m_edit_path;
 	CMFCEditBrowseCtrl m_edit_path;
 	// 升级按钮;
 	CMFCButton m_btnUpgrade;
@@ -48,7 +49,7 @@ protected:
 	CStatic m_text_password;
 	CEdit m_ftp_password;
 	// 是否记住ftp账号密码;
-	CMFCButton m_check_remember;
+	CButton m_check_remember;
 // 实现
 public:
 	virtual ~CUpgradeWnd();
@@ -63,21 +64,22 @@ public:
 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);
+	// 控件事件;
+	afx_msg void OnUpgradeBtnClick();
+	afx_msg void OnUpdateBtnUpgrade(CCmdUI* pCmdUI);
 
-	DECLARE_MESSAGE_MAP()
+	afx_msg void OnCheckRememberFtpClick();
+	afx_msg void OnUpdateCheckRememberFtp(CCmdUI* pCmdUI);
+
+	afx_msg void OnEnChangeEdit();
 
-	void SetPropListFont();
+	BOOL _bIsFtpPath = FALSE;
+	afx_msg void OnUpdateFtpUser(CCmdUI* pCmdUI);
+	afx_msg void OnUpdateFtpPassword(CCmdUI* pCmdUI);
 
+	DECLARE_MESSAGE_MAP()
+	void SetStaticFont();
+	void SetCtrlStyle();
 	int m_nCtrlHeight;
 
 public: