📄 proppageoptions.cpp
字号:
// PropPageOptions.cpp : implementation file//#include "stdafx.h"#include "warmmcsnapin.h"#include "PropPageOptions.h"#include "DlgOption.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CPropPageOptions property pageCImageList *CPropPageOptions::mpImageList;IMPLEMENT_DYNCREATE(CPropPageOptions, CPropertyPage)CPropPageOptions::CPropPageOptions(war_if_options_ptr_t optPtr, const WarOption::OptLevelE optLevel) : CPropertyPage(CPropPageOptions::IDD),mOptPtr(optPtr),mOptLevel(optLevel),mIsModified(false){ //{{AFX_DATA_INIT(CPropPageOptions) m_bShowAll = FALSE; //}}AFX_DATA_INIT if (!mpImageList) { mpImageList = new CImageList; mpImageList->Create(IDB_OPTIONS, 16, 0, RGB(0,128,128)); }}CPropPageOptions::~CPropPageOptions(){}void CPropPageOptions::DoDataExchange(CDataExchange* pDX){ CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropPageOptions) DDX_Control(pDX, IDC_VALUE, m_ctlValue); DDX_Control(pDX, IDC_EXPLAIN, m_ctlExplain); DDX_Control(pDX, IDC_LIST, m_ctlList); DDX_Check(pDX, IDC_SHOW_ALL, m_bShowAll); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CPropPageOptions, CPropertyPage) //{{AFX_MSG_MAP(CPropPageOptions) ON_BN_CLICKED(IDC_RESET, OnReset) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, OnItemchangedList) ON_BN_CLICKED(IDC_SHOW_ALL, OnShowAll) ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPropPageOptions message handlersBOOL CPropPageOptions::OnInitDialog() { CPropertyPage::OnInitDialog(); CString hdr_name; hdr_name.LoadString(IDS_HDRNAME); m_ctlList.InsertColumn(0, hdr_name, LVCFMT_LEFT, 170, 0); hdr_name.LoadString(IDS_HDR_VALUE); m_ctlList.InsertColumn(1, hdr_name, LVCFMT_LEFT, 100, 1); hdr_name.LoadString(IDS_HDR_DESCRIPTION); m_ctlList.InsertColumn(2, hdr_name, LVCFMT_LEFT, 1000, 2); m_ctlList.SetImageList(mpImageList, LVSIL_SMALL); ReloadList(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void CPropPageOptions::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; POSITION pos = m_ctlList.GetFirstSelectedItemPosition(); if (pos) { int index = m_ctlList.GetNextSelectedItem(pos); WmsOption *p = (WmsOption *)m_ctlList.GetItemData(index); WarCollector<TCHAR> descr; descr << p->mDescription << "\r\n\r\n=================================\r\n" << "Type: " << p->mType << "\r\n" << "Default value: " << p->mDefaultValue; m_ctlExplain.SetWindowText(descr.GetValue().c_str()); m_ctlValue.SetWindowText(p->mCurrentValue); } *pResult = 0;}void CPropPageOptions::OnShowAll() { UpdateData(); ReloadList();}void CPropPageOptions::ReloadList(){ m_ctlList.DeleteAllItems(); WarIfOptions::option_def_list_t opts_list; mOptPtr->EnumOptions(opts_list); for(WarIfOptions::option_def_list_t::const_iterator P = opts_list.begin() ; P != opts_list.end() ; ++P) { if (!m_bShowAll) { if (mOptLevel != P->mLevel) continue; } WmsOption *p = new WmsOption; if (p->mHaveValue = mOptPtr->HasOwnOption(P->mName)) { p->mCurrentValue = WarCollector<TCHAR>( mOptPtr->GetOption(P->mName)).GetValue().c_str(); } else { p->mCurrentValue = WarCollector<TCHAR>(P->mDefaultValue).GetValue().c_str(); } p->mName = P->mName; p->mDefaultValue = P->mDefaultValue; p->mDescription = P->mDescription; p->mType = P->mType; p->mLevel = P->mLevel; CString name_buf = WarCollector<TCHAR>(p->mName).GetValue().c_str(); LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT; i.pszText = (LPTSTR)(LPCTSTR)name_buf; i.lParam = (LPARAM)p; i.iImage = p->mLevel * 2; if (!p->mHaveValue) ++i.iImage; int index = m_ctlList.InsertItem(&i); m_ctlList.SetItemText(index, 1, p->mCurrentValue); m_ctlList.SetItemText(index, 2, WarCollector<TCHAR>(p->mDescription).GetValue().c_str()); }}void CPropPageOptions::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) { POSITION pos = m_ctlList.GetFirstSelectedItemPosition(); if (pos) { int index = m_ctlList.GetNextSelectedItem(pos); WmsOption *p = (WmsOption *)m_ctlList.GetItemData(index); CDlgOption my_dlg(p); if (my_dlg.DoModal() == IDOK) { SetModified(); mIsModified = true; m_ctlList.SetItemText(index, 1, p->mCurrentValue); m_ctlValue.SetWindowText(p->mCurrentValue); m_ctlList.SetItem(index, 0, LVIF_IMAGE, NULL, (p->mLevel * 2) + (p->mHaveValue ? 0 : 1), 0, 0, NULL); } } EnableDisableControls(); *pResult = 0;}void CPropPageOptions::OnReset() { int num_items = m_ctlList.GetItemCount(); int sel_item = -1; POSITION pos = m_ctlList.GetFirstSelectedItemPosition(); if (pos) sel_item = m_ctlList.GetNextSelectedItem(pos); for(int index = 0; index < num_items; index++) { WmsOption *p = (WmsOption *)m_ctlList.GetItemData(index); p->mHaveValue = false; p->mCurrentValue = WarCollector<TCHAR>(p->mDefaultValue).GetValue().c_str(); m_ctlList.SetItemText(index, 1, p->mCurrentValue); m_ctlList.SetItem(index, 0, LVIF_IMAGE, NULL, (p->mLevel * 2) + (p->mHaveValue ? 0 : 1), 0, 0, NULL); if (sel_item == index) m_ctlValue.SetWindowText(p->mCurrentValue); } SetModified(); mIsModified = true; EnableDisableControls();}BOOL CPropPageOptions::OnApply() { int num_items = m_ctlList.GetItemCount(); for(int index = 0; index < num_items; index++) { WmsOption *p = (WmsOption *)m_ctlList.GetItemData(index); if (p->mHaveValue) mOptPtr->SetOption(p->mName, WarCollector<char>(p->mCurrentValue).GetValue()); else mOptPtr->ClearOption(p->mName); } BOOL rval = CPropertyPage::OnApply(); if (rval) mIsModified = false; EnableDisableControls(); return rval;}void CPropPageOptions::EnableDisableControls(){ GetDlgItem(IDC_SHOW_ALL)->EnableWindow(mIsModified == false);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -