📄 proppagefileshareurl.cpp
字号:
#include "StdAfx.h"#include "WarServerSnapin.h"#include "WarSvrSnapin.h"#include "WarMmcNodeFileShare.h"#include "PropPageFileSharePermissions.h"#include "PropPageFileShareUrl.h"PropPageFileShareUrl::PropPageFileShareUrl(warmmc_file_share_data_ptr_t& dataPtr, long lNotifyHandle, bool bDeleteHandle, TCHAR* pTitle) : CSnapInPropertyPageImpl<PropPageFileShareUrl> (pTitle),m_lNotifyHandle(lNotifyHandle),m_bDeleteHandle(bDeleteHandle), // Should be true for only page.mDataPtr(dataPtr){}PropPageFileShareUrl::~PropPageFileShareUrl(){ if (m_bDeleteHandle) MMCFreeNotifyHandle(m_lNotifyHandle);}BOOL PropPageFileShareUrl::OnSetActive(){ UpdateUrl(mDataPtr->GetUrl().GetUrl().c_str()); return TRUE;}LRESULT PropPageFileShareUrl::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){ // Get file types from registry // Get existing URL UpdateUrl(mDataPtr->GetUrl().GetUrl().c_str()); return TRUE;}BOOL PropPageFileShareUrl::OnApply(){ // Write the changes back to the registry RebuildUrl(); mDataPtr->Apply(m_lNotifyHandle, (1 << 2)); return TRUE;}#define ITEM(a) (WarCollector<TCHAR>(my_url.a()).GetValue().c_str())void PropPageFileShareUrl::UpdateUrl(LPCSTR str) throw(WarException){ // Use a tmp buffer to prevent making url from self std::string str_buffer = str; WarUrl my_url; try { my_url = str_buffer.c_str(); SetDlgItemText(IDC_TYPE,ITEM(GetDriverName)); SetDlgItemText(IDC_PATH,ITEM(GetUrlPath)); SetDlgItemText(IDC_HOST,ITEM(GetHostName)); SetDlgItemText(IDC_USER,ITEM(GetUserName)); SetDlgItemText(IDC_PASSWORD,ITEM(GetPassword)); SetDlgItemText(IDC_URL,ITEM(GetUrl)); } catch(WarException) { SetDlgItemText(IDC_TYPE,_T("file")); SetDlgItemText(IDC_PATH,_T("")); SetDlgItemText(IDC_HOST,_T("")); SetDlgItemText(IDC_USER,_T("")); SetDlgItemText(IDC_PASSWORD,_T("")); SetDlgItemText(IDC_URL,_T("")); } mDataPtr->SetUrl(my_url); DWORD flags = PSWIZB_BACK; if (!mDataPtr->GetUrl().GetUrlPath().empty()) flags |= PSWIZB_NEXT; ::PostMessage(GetParent(), PSM_SETWIZBUTTONS, 0, flags);}#undef ITEM#define FETCH(id, str) GetDlgItemText(id, buffer, sizeof(buffer) / sizeof(TCHAR));\ str = buffer;\*buffer = 0;void PropPageFileShareUrl::RebuildUrl() throw(WarException){ WarCollector<char> type_name, path_name, host_name, user_name, password; TCHAR buffer[1024]; // Server name FETCH(IDC_TYPE, type_name); FETCH(IDC_PATH, path_name); FETCH(IDC_HOST, host_name); FETCH(IDC_USER, user_name); FETCH(IDC_PASSWORD, password); WarUrl my_url; my_url.Create(WarUrlType(type_name.GetValue().c_str()), user_name.GetValue().c_str(), password.GetValue().c_str(), 0, // port host_name.GetValue().c_str(), path_name.GetValue().c_str()); mDataPtr->SetUrl(my_url);}#undef FETCHvoid PropPageFileShareUrl::UpdateUrlItem(){ try { RebuildUrl(); UpdateUrl(mDataPtr->GetUrl().GetUrl().c_str()); } catch(WarException& e) { WarCollector<TCHAR> err_msg = e.Explain(); CString msg; msg.Format(_T("Failed to build a valid URL from input data.\n%s"), err_msg.GetValue().c_str()); AfxMessageBox(msg); } mDataPtr->AddMask((1 << 2));}LRESULT PropPageFileShareUrl::OnClickedBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ BROWSEINFO bi; memset(&bi, 0, sizeof(bi)); TCHAR pszDisplayName[MAX_PATH]; *pszDisplayName = 0; bi.hwndOwner = m_hWnd; bi.pszDisplayName = pszDisplayName; bi.lpszTitle = _T("Select a folder"); bi.ulFlags = BIF_NEWDIALOGSTYLE; LPITEMIDLIST pbi = SHBrowseForFolder(&bi); if (NULL != pbi) { TCHAR my_path[MAX_PATH]; if (SHGetPathFromIDList(pbi, my_path)) { std::basic_string<TCHAR> host_name, path_name; if ((my_path[0] == '\\') && (my_path[1] == '\\') && _istalpha(my_path[2])) { // Deparse hostname LPCTSTR p = my_path; p += 2; while(*p && (*p != '\\')) host_name += *p++; if (*p == '\\') ++p; path_name = p; } else path_name = my_path; SetDlgItemText(IDC_PATH,path_name.c_str()); SetDlgItemText(IDC_HOST, host_name.empty() ? _T("") : host_name.c_str()); } LPMALLOC mp; if (SUCCEEDED(SHGetMalloc(&mp))) mp->Free(pbi); UpdateUrlItem(); } return 0;}LRESULT PropPageFileShareUrl::OnKillfocusHost(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateUrlItem(); return 0;}LRESULT PropPageFileShareUrl::OnKillfocusPassword(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateUrlItem(); return 0;}LRESULT PropPageFileShareUrl::OnKillfocusPath(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateUrlItem(); return 0;}LRESULT PropPageFileShareUrl::OnKillfocusType(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateUrlItem(); return 0;}LRESULT PropPageFileShareUrl::OnKillfocusUser(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateUrlItem(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -