2025-11-27 16:46:48 +09:00

344 lines
8.8 KiB
C++

// OXCustomizeCoolControlsPage.cpp : implementation file
//
// Version: 9.3
#include "stdafx.h"
#include "OXCustomizeCoolControlsPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const int IDC_CHECK_CONTROLTYPE_BASE=1;
BOOL COXCustomizeCoolControlOrganizer::IsQualified(HWND hWnd, LPCTSTR lpszWndClass)
{
ASSERT(m_pCustomizeCoolControlsPage!=NULL);
if(!COXCoolControlOrganizer::IsQualified(hWnd,lpszWndClass))
return FALSE;
return m_pCustomizeCoolControlsPage->
IsQualifiedForCoolControl(hWnd,lpszWndClass);
}
IMPLEMENT_DYNCREATE(COXCustomizeCoolControlsPage, COXCustomizePage)
/////////////////////////////////////////////////////////////////////////////
// COXCustomizeCoolControlsPage dialog
COXCustomizeCoolControlsPage::COXCustomizeCoolControlsPage()
{
//{{AFX_DATA_INIT(COXCustomizeCoolControlsPage)
m_bConvertToCool = FALSE;
//}}AFX_DATA_INIT
m_nDialogID=IDD;
m_sProfileName.Empty();
m_mapControls.SetAt(0,_T("Edit box"));
m_mapControls.SetAt(1,_T("Button"));
m_mapControls.SetAt(2,_T("Combo box"));
m_mapControls.SetAt(3,_T("Tree control"));
m_mapControls.SetAt(4,_T("List control"));
m_mapControls.SetAt(5,_T("List box"));
m_mapControls.SetAt(6,_T("Spin button"));
m_mapControls.SetAt(7,_T("Scroll bar"));
m_mapControls.SetAt(8,_T("Progress bar"));
m_mapControls.SetAt(9,_T("Slider control"));
m_mapControls.SetAt(10,_T("Hot key control"));
m_mapControls.SetAt(11,_T("Rich edit control"));
#if _MFC_VER > 0x0421
m_mapControls.SetAt(12,_T("Date-time picker"));
m_mapControls.SetAt(13,_T("Month calendar"));
m_mapControls.SetAt(14,_T("IP address edit box"));
#endif // _MFC_VER > 0x0421
m_mapControlWndClass.SetAt(EDIT_CLASSNAME,0);
m_mapControlWndClass.SetAt(BUTTON_CLASSNAME,1);
m_mapControlWndClass.SetAt(SPIN_CLASSNAME,6);
m_mapControlWndClass.SetAt(HOTKEY_CLASSNAME,10);
m_mapControlWndClass.SetAt(COMBOBOX_CLASSNAME,2);
m_mapControlWndClass.SetAt(SCROLLBAR_CLASSNAME,7);
m_mapControlWndClass.SetAt(PROGRESS_CLASSNAME,8);
m_mapControlWndClass.SetAt(SLIDER_CLASSNAME,9);
m_mapControlWndClass.SetAt(LISTVIEW_CLASSNAME,4);
m_mapControlWndClass.SetAt(TREEVIEW_CLASSNAME,3);
m_mapControlWndClass.SetAt(LISTBOX_CLASSNAME,5);
m_mapControlWndClass.SetAt(RICHEDIT_CLASSNAME,11);
#if _MFC_VER > 0x0421
m_mapControlWndClass.SetAt(DATETIME_CLASSNAME,12);
m_mapControlWndClass.SetAt(MONTHCAL_CLASSNAME,13);
m_mapControlWndClass.SetAt(IPADDRESS_CLASSNAME,14);
#endif // _MFC_VER > 0x0421
for(int nIndex=0; nIndex<m_mapControls.GetCount(); nIndex++)
{
m_mapControlState.SetAt(nIndex,OTITEM_CHECKED);
}
m_coolControlOrganizer.m_pCustomizeCoolControlsPage=this;
}
COXCustomizeCoolControlsPage::~COXCustomizeCoolControlsPage()
{
}
BOOL COXCustomizeCoolControlsPage::
InitializeCoolControls(BOOL bConvertToCool/*=TRUE*/,
LPCTSTR lpszProfileName/*=_T("CustomizeCoolControls")*/)
{
m_bConvertToCool=bConvertToCool;
CWinApp* pApp=AfxGetApp();
ASSERT(pApp!=NULL);
if(lpszProfileName!=NULL)
{
m_sProfileName=lpszProfileName;
m_bConvertToCool=(BOOL)pApp->GetProfileInt(m_sProfileName,
_T("ConvertCommonToCool"),m_bConvertToCool);
}
if(m_bConvertToCool)
{
CWnd* pWnd=AfxGetMainWnd();
ASSERT(pWnd!=NULL && ::IsWindow(pWnd->GetSafeHwnd()));
if(!m_coolControlOrganizer.AttachAllInThread())
return FALSE;
if(!m_sProfileName.IsEmpty())
{
for(int nIndex=0; nIndex<m_mapControls.GetCount(); nIndex++)
{
CString sItem;
sItem.Format(_T("ControlTypeState_%d"),nIndex);
int nState=-1;
VERIFY(m_mapControlState.Lookup(nIndex,nState));
ASSERT(nState!=-1);
m_mapControlState.SetAt(nIndex,
pApp->GetProfileInt(m_sProfileName,sItem,nState));
}
}
}
return TRUE;
}
BOOL COXCustomizeCoolControlsPage::OnCloseManager(BOOL bIsOk)
{
CWinApp* pApp=AfxGetApp();
ASSERT(pApp!=NULL);
if(bIsOk)
{
if(!ApplyChanges())
return FALSE;
if(!m_sProfileName.IsEmpty())
{
pApp->WriteProfileInt(m_sProfileName,
_T("ConvertCommonToCool"),m_bConvertToCool);
for(int nIndex=0; nIndex<m_mapControls.GetCount(); nIndex++)
{
CString sItem;
sItem.Format(_T("ControlTypeState_%d"),nIndex);
pApp->WriteProfileInt(m_sProfileName,sItem,
m_treeControlTypes.GetCheck(IDC_CHECK_CONTROLTYPE_BASE+nIndex));
}
m_treeControlTypes.SaveState(m_sProfileName,_T("TreeControlTypes"));
}
}
else
{
if(!m_sProfileName.IsEmpty())
{
m_bConvertToCool=(BOOL)pApp->GetProfileInt(m_sProfileName,
_T("ConvertCommonToCool"),m_bConvertToCool);
UpdateData(FALSE);
m_treeControlTypes.LoadState(m_sProfileName,_T("TreeControlTypes"));
VERIFY(ApplyChanges());
}
}
return TRUE;
}
void COXCustomizeCoolControlsPage::DoDataExchange(CDataExchange* pDX)
{
COXCustomizePage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COXCustomizeCoolControlsPage)
DDX_Control(pDX, IDC_OX_TREE_CONTROL_TYPES, m_treeControlTypes);
DDX_Check(pDX, IDC_OX_CHECK_CONVERT, m_bConvertToCool);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COXCustomizeCoolControlsPage, COXCustomizePage)
//{{AFX_MSG_MAP(COXCustomizeCoolControlsPage)
ON_BN_CLICKED(IDC_OX_BUTTON_CONVERT_ALL, OnButtonConvertAll)
ON_BN_CLICKED(IDC_OX_CHECK_CONVERT, OnCheckConvert)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COXCustomizeCoolControlsPage message handlers
BOOL COXCustomizeCoolControlsPage::Load(const COXCustomizeManager* pCustomizeManager)
{
// Call default implementation. It will load this demo dialog as the first
// page and will create About and CodeSample pages if specified.
if(!COXCustomizePage::Load(pCustomizeManager))
return FALSE;
return TRUE;
}
void COXCustomizeCoolControlsPage::Unload()
{
// add here code for cleaning up all objects created by demo
//
//
//////////////////////////////////////////////////////////////////////////
COXCustomizePage::Unload();
}
void COXCustomizeCoolControlsPage::OnInitDialog()
{
// must call default implementation
COXCustomizePage::OnInitDialog();
// add here initialization code for your demo dialog. Treat it as a
// normal CDialog::OnInitDialog function
// populate tree control
m_treeControlTypes.DeleteAllItems();
// root item
int nImageIndex=m_treeControlTypes.AddImage(IDB_OX_CUSTOMIZECOOLCONTROLS_CONTROLS,
RGB(192,192,192));
ASSERT(nImageIndex!=-1);
CString sItem;
VERIFY(sItem.LoadString(IDS_OX_CSTMZECOOLCONTROLCONVERT));//"Convert the following common controls"
HTREEITEM hRootItem=m_treeControlTypes.
AddControlGroup(sItem,
NULL,TRUE,nImageIndex,nImageIndex);
ASSERT(hRootItem!=NULL);
m_treeControlTypes.SetItemState(hRootItem,TVIS_BOLD,TVIS_BOLD);
for(int nIndex=0; nIndex<m_mapControls.GetCount(); nIndex++)
{
CString sControlType;
VERIFY(m_mapControls.Lookup(nIndex,sControlType));
int nState=-1;
VERIFY(m_mapControlState.Lookup(nIndex,nState));
ASSERT(nState!=-1);
HTREEITEM hItem=m_treeControlTypes.
AddCheckBox(IDC_CHECK_CONTROLTYPE_BASE+nIndex,
sControlType,hRootItem,nState,TVI_SORT);
ASSERT(hItem!=NULL);
}
if(!m_sProfileName.IsEmpty())
{
m_treeControlTypes.LoadState(m_sProfileName,_T("TreeControlTypes"));
}
// layout
//
m_LayoutManager.TieChild(IDC_OX_BUTTON_CONVERT_ALL,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(&m_treeControlTypes,OX_LMS_ANY,OX_LMT_SAME);
//
///////////////////////////////////////
m_bInitialized=TRUE;
UpdateData(FALSE);
OnCheckConvert();
}
void COXCustomizeCoolControlsPage::OnButtonConvertAll()
{
// TODO: Add your control notification handler code here
ASSERT(m_bConvertToCool);
for(int nIndex=0; nIndex<m_mapControls.GetCount(); nIndex++)
{
m_treeControlTypes.SetCheck(IDC_CHECK_CONTROLTYPE_BASE+nIndex,TRUE);
}
}
BOOL COXCustomizeCoolControlsPage::ApplyChanges()
{
if(!UpdateData(TRUE))
return FALSE;
for(int nIndex=0; nIndex<m_mapControls.GetCount(); nIndex++)
{
m_mapControlState.SetAt(nIndex,
m_treeControlTypes.GetCheck(IDC_CHECK_CONTROLTYPE_BASE+nIndex));
}
if(m_coolControlOrganizer.IsAttachedAllInThread())
{
if(!m_coolControlOrganizer.DetachAllInThread())
return FALSE;
}
if(m_bConvertToCool)
{
if(!m_coolControlOrganizer.AttachAllInThread())
return FALSE;
}
return TRUE;
}
void COXCustomizeCoolControlsPage::OnCheckConvert()
{
// TODO: Add your control notification handler code here
if(!UpdateData(TRUE))
return;
m_treeControlTypes.EnableWindow(m_bConvertToCool);
GetDlgItem(IDC_OX_BUTTON_CONVERT_ALL)->EnableWindow(m_bConvertToCool);
}
BOOL COXCustomizeCoolControlsPage::IsQualifiedForCoolControl(HWND hWnd,
LPCTSTR lpszWndClass)
{
UNREFERENCED_PARAMETER(hWnd);
int nType=-1;
VERIFY(m_mapControlWndClass.Lookup(_T("ComboBox"),nType));
int nControlType=-1;
if(m_mapControlWndClass.Lookup(lpszWndClass,nControlType))
{
ASSERT(nControlType!=-1);
int nState=-1;
VERIFY(m_mapControlState.Lookup(nControlType,nState));
ASSERT(nState!=-1);
if(nState==OTITEM_UNCHECKED)
return FALSE;
}
return TRUE;
}