📄 proppagemimetypes.cpp
字号:
// PropPageMimeTypes.cpp : implementation file//#include "stdafx.h"#include "warmmcsnapin.h"#include "PropPageMimeTypes.h"#include "DlgMimeType.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CPropPageMimeTypes property pageIMPLEMENT_DYNCREATE(CPropPageMimeTypes, CPropertyPage)CPropPageMimeTypes::CPropPageMimeTypes(war_if_mime_types_ptr_t& rMimePtr) : CPropertyPage(CPropPageMimeTypes::IDD),mMimePtr(rMimePtr){ //{{AFX_DATA_INIT(CPropPageMimeTypes) m_Path = mMimePtr->GetFilePath().c_str(); m_UseLocalOs = mMimePtr->GetOsOption(); //}}AFX_DATA_INIT}CPropPageMimeTypes::~CPropPageMimeTypes(){}void CPropPageMimeTypes::DoDataExchange(CDataExchange* pDX){ CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropPageMimeTypes) DDX_Control(pDX, IDC_LIST, m_ctlList); DDX_Text(pDX, IDC_PATH, m_Path); DDX_Check(pDX, IDC_USE_LOCAL_OS, m_UseLocalOs); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CPropPageMimeTypes, CPropertyPage) //{{AFX_MSG_MAP(CPropPageMimeTypes) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_NOTIFY(NM_RCLICK, IDC_LIST, OnRclickList) ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList) ON_COMMAND(ID_POPUP_NEW, OnPopupNew) ON_COMMAND(ID_POPUP_DELETE, OnPopupDelete) ON_COMMAND(ID_POPUP_PROPERTIES, OnPopupProperties) ON_EN_CHANGE(IDC_PATH, OnChange) ON_BN_CLICKED(IDC_USE_LOCAL_OS, OnChange) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPropPageMimeTypes message handlersvoid CPropPageMimeTypes::OnBrowse() { UpdateData(); CFileDialog dlg(TRUE, NULL, m_Path, 0, _T("All Files (*.*)|*.*||"), NULL); if (dlg.DoModal() == IDOK) { m_Path = dlg.GetPathName(); UpdateData(FALSE); SetModified(); }}BOOL CPropPageMimeTypes::OnInitDialog() { CPropertyPage::OnInitDialog(); CString hdr_name; hdr_name.LoadString(IDS_MIME_EXT); m_ctlList.InsertColumn(0, hdr_name, LVCFMT_LEFT, 170, 0); hdr_name.LoadString(IDS_MIME_TYPE); m_ctlList.InsertColumn(1, hdr_name, LVCFMT_LEFT, 1000, 1); ReloadList(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void CPropPageMimeTypes::ReloadList(){ m_ctlList.DeleteAllItems(); WarIfMimeTypes::mime_map_t types; mMimePtr->GetMimeTypes(types); for(WarIfMimeTypes::mime_map_t::const_iterator P = types.begin() ; P != types.end() ; ++P) { WarCollector<TCHAR> name = P->first, mime_type = P->second; LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_TEXT; i.pszText = (LPTSTR)name.GetValue().c_str(); int index = m_ctlList.InsertItem(&i); m_ctlList.SetItemText(index, 1, mime_type.GetValue().c_str()); }}BOOL CPropPageMimeTypes::OnApply() { UpdateData(); mMimePtr->SetFilePath(m_Path); mMimePtr->SetOsOption(m_UseLocalOs); WarIfMimeTypes::mime_map_t mime_types; for(int index = 0; index < m_ctlList.GetItemCount(); index++) { WarCollector<war_sysch_t> ext = m_ctlList.GetItemText(index, 0); WarCollector<char> value = m_ctlList.GetItemText(index, 1); mime_types.insert(WarIfMimeTypes::mime_map_t::value_type( ext.GetValue(), value.GetValue())); } mMimePtr->SetMimeTypes(mime_types); return CPropertyPage::OnApply();}void CPropPageMimeTypes::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) { CPoint pos, client_pos; GetCursorPos(&pos); client_pos = pos; UINT flags = 0; m_ctlList.ScreenToClient(&client_pos); int targeted_item = m_ctlList.HitTest(client_pos, &flags); CMenu MenuT, *Menu; MenuT.LoadMenu(IDR_POPUP_MIME_TYPES); Menu = MenuT.GetSubMenu(0); Menu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN, pos.x, pos.y, this); Menu->DestroyMenu(); *pResult = 0;}void CPropPageMimeTypes::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) { OnPopupProperties(); *pResult = 0;}void CPropPageMimeTypes::OnPopupNew() { CDlgMimeType dlg; if (dlg.DoModal() == IDOK) { LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_TEXT; i.pszText = (LPTSTR)(LPCTSTR)dlg.m_Extension; int index = m_ctlList.InsertItem(&i); m_ctlList.SetItemText(index, 1, dlg.m_Value); SetModified(); }}void CPropPageMimeTypes::OnPopupDelete() { for(int index = 0; index < m_ctlList.GetItemCount(); index++) { LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_PARAM | LVIF_STATE; i.stateMask = LVIS_SELECTED; i.iItem = index; m_ctlList.GetItem(&i); if (i.state & LVIS_SELECTED) { m_ctlList.DeleteItem(index); index--; SetModified(); } }}void CPropPageMimeTypes::OnPopupProperties() { POSITION pos = m_ctlList.GetFirstSelectedItemPosition(); while(pos) { int item = m_ctlList.GetNextSelectedItem(pos); CDlgMimeType dlg; dlg.m_Extension = m_ctlList.GetItemText(item, 0); dlg.m_Value = m_ctlList.GetItemText(item, 1); if (dlg.DoModal() == IDOK) { m_ctlList.SetItemText(item, 0, dlg.m_Extension); m_ctlList.SetItemText(item, 1, dlg.m_Value); SetModified(); } }}void CPropPageMimeTypes::OnChange() { SetModified();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -