DragonNest/Third/XTToolkitPro/Samples/CommandBars/CustomThemes/CustomThemesView.cpp
2024-12-19 09:48:26 +08:00

561 lines
14 KiB
C++

// CustomThemesView.cpp : implementation of the CCustomThemesView class
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CustomThemes.h"
#include "CustomThemesDoc.h"
#include "CustomThemesView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCustomThemesView
IMPLEMENT_DYNCREATE(CCustomThemesView, CRichEditView)
BEGIN_MESSAGE_MAP(CCustomThemesView, CRichEditView)
//{{AFX_MSG_MAP(CCustomThemesView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
ON_WM_CONTEXTMENU()
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
ON_COMMAND(ID_TOOLS_HEX, OnToolsHex)
ON_UPDATE_COMMAND_UI(ID_TOOLS_HEX, OnUpdateToolsHex)
ON_UPDATE_COMMAND_UI(ID_SELECTOR_TEXT, OnUpdateSelectorText)
ON_XTP_EXECUTE(ID_SELECTOR_TEXT, OnSelectorText)
ON_UPDATE_COMMAND_UI(ID_BUTTON_TEXT, OnUpdateText)
ON_COMMAND(ID_BUTTON_TEXT, OnButtonText)
ON_UPDATE_COMMAND_UI(ID_SELECTOR_BACK, OnUpdateSelectorBack)
ON_XTP_EXECUTE(ID_SELECTOR_BACK, OnSelectorBack)
ON_UPDATE_COMMAND_UI(ID_BUTTON_BACK, OnUpdateBack)
ON_COMMAND(ID_BUTTON_BACK, OnButtonBack)
ON_UPDATE_COMMAND_UI(ID_TEXT_AUTO, OnUpdateTextAuto)
ON_COMMAND(ID_TEXT_AUTO, OnTextAuto)
ON_UPDATE_COMMAND_UI(ID_BACK_NONE, OnUpdateBackNone)
ON_COMMAND(ID_BACK_NONE, OnBackNone)
ON_COMMAND(ID_TEXT_MORE, OnTextMore)
ON_COMMAND(ID_BACK_MORE, OnBackMore)
ON_UPDATE_COMMAND_UI(ID_EDIT_FIND, OnUpdateEditFind)
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_EX, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRichEditView::OnFilePrintPreview)
ON_NOTIFY(XTP_FN_SETFORMAT, ID_COMBO_OWNERDRAW, OnSetCharFormat)
ON_UPDATE_COMMAND_UI(ID_COMBO_OWNERDRAW, OnUpdateComboFont)
ON_NOTIFY(XTP_FN_SETFORMAT, ID_COMBO_OWNERDRAW, OnSetCharFormat)
ON_NOTIFY(XTP_FN_SETFORMAT, ID_COMBO_OWNERDRAW, OnSetCharFormat)
ON_XTP_EXECUTE(ID_EDIT_FIND, OnEditFind)
ON_NOTIFY(CBN_DROPDOWN, ID_EDIT_FIND, OnDropdownFindCombo)
ON_NOTIFY(CBN_CLOSEUP, ID_EDIT_FIND, OnCloseupFindCombo)
ON_NOTIFY(CBN_SELCHANGE, ID_EDIT_FIND, OnSelchangeFindCombo)
ON_NOTIFY(CBN_SELENDOK, ID_EDIT_FIND, OnSelendokFindCombo)
ON_NOTIFY(CBN_SETFOCUS, ID_EDIT_FIND, OnSetfocusFindCombo)
ON_NOTIFY(CBN_SELENDCANCEL, ID_EDIT_FIND, OnSelendcancelFindCombo)
ON_NOTIFY(CBN_KILLFOCUS, ID_EDIT_FIND, OnKillfocusFindCombo)
ON_NOTIFY(CBN_EDITCHANGE, ID_EDIT_FIND, OnEditchangeFindCombo)
ON_UPDATE_COMMAND_UI(ID_PARA_INDENT, OnUpdateIndentLeft)
ON_XTP_EXECUTE(ID_PARA_INDENT, OnIndentLeft)
ON_NOTIFY(XTP_FN_SPINUP, ID_PARA_INDENT, OnIndentLeftSpin)
ON_NOTIFY(XTP_FN_SPINDOWN, ID_PARA_INDENT, OnIndentLeftSpin)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCustomThemesView construction/destruction
CCustomThemesView::CCustomThemesView()
{
m_bCheck = TRUE;
m_clr = RGB(255, 0, 0);
m_clrBack = RGB(255, 255, 100);
}
CCustomThemesView::~CCustomThemesView()
{
}
BOOL CCustomThemesView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRichEditView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CCustomThemesView drawing
void CCustomThemesView::OnDraw(CDC* /*pDC*/)
{
CCustomThemesDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CCustomThemesView printing
BOOL CCustomThemesView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
/////////////////////////////////////////////////////////////////////////////
// CCustomThemesView diagnostics
#ifdef _DEBUG
void CCustomThemesView::AssertValid() const
{
CRichEditView::AssertValid();
}
void CCustomThemesView::Dump(CDumpContext& dc) const
{
CRichEditView::Dump(dc);
}
CCustomThemesDoc* CCustomThemesView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCustomThemesDoc)));
return (CCustomThemesDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCustomThemesView message handlers
void CCustomThemesView::OnToolsHex()
{
m_bCheck = !m_bCheck;
}
void CCustomThemesView::OnUpdateToolsHex(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_bCheck);
}
void CCustomThemesView::ShowContextMenu(CPoint point)
{
ClientToScreen(&point);
((CXTPMDIFrameWnd*)AfxGetMainWnd())->GetCommandBars()->
TrackPopupMenu(IDR_CONTEXT_MENU, TPM_RIGHTBUTTON, point.x, point.y);
}
void CCustomThemesView::OnRButtonDown(UINT /*nFlags*/, CPoint point)
{
ShowContextMenu(point);
}
void CCustomThemesView::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
ShowContextMenu(point);
}
void CCustomThemesView::OnUpdateSelectorText(CCmdUI* pCmdUI)
{
CXTPControlColorSelector* pSelector = DYNAMIC_DOWNCAST(CXTPControlColorSelector, CXTPControl::FromUI(pCmdUI));
if (pSelector)
{
CHARFORMAT& cfm = GetCharFormatSelection( );
pSelector->SetColor(cfm.dwEffects & CFE_AUTOCOLOR? -1: cfm.crTextColor);
}
pCmdUI->Enable(TRUE);
}
void CCustomThemesView::OnButtonText()
{
CHARFORMAT& cfm = GetCharFormatSelection( );
cfm.dwMask |= CFM_COLOR;
cfm.dwEffects &= ~CFE_AUTOCOLOR ;
cfm.crTextColor = m_clr;
GetRichEditCtrl().SetSelectionCharFormat(cfm);
}
void CCustomThemesView::OnSelectorText(NMHDR* pNMHDR, LRESULT* pResult)
{
NMXTPCONTROL* tagNMCONTROL = (NMXTPCONTROL*)pNMHDR;
CXTPControlColorSelector* pControl = (CXTPControlColorSelector*)tagNMCONTROL->pControl;
m_clr = pControl->GetColor();
OnButtonText();
*pResult = 1;
}
void CCustomThemesView::OnUpdateText(CCmdUI* pCmdUI)
{
CXTPControlPopupColor* pPopup = DYNAMIC_DOWNCAST(CXTPControlPopupColor, CXTPControl::FromUI(pCmdUI));
if (pPopup)
{
pPopup->SetColor(m_clr);
}
pCmdUI->Enable(TRUE);
}
///////////////////
void CCustomThemesView::OnUpdateSelectorBack(CCmdUI* pCmdUI)
{
CXTPControlColorSelector* pSelector = DYNAMIC_DOWNCAST(CXTPControlColorSelector, CXTPControl::FromUI(pCmdUI));
if (pSelector)
{
CHARFORMAT2 cfm;
cfm.cbSize = sizeof(CHARFORMAT2);
::SendMessage(GetRichEditCtrl().GetSafeHwnd(), EM_GETCHARFORMAT, 1, (LPARAM)&cfm);
pSelector->SetColor(cfm.dwEffects & CFE_AUTOBACKCOLOR? -1: cfm.crBackColor);
}
pCmdUI->Enable(TRUE);
}
void CCustomThemesView::OnButtonBack()
{
CHARFORMAT2 cfm;
cfm.cbSize = sizeof(CHARFORMAT2);
::SendMessage(GetRichEditCtrl().GetSafeHwnd(), EM_GETCHARFORMAT, 1, (LPARAM)&cfm);
cfm.dwMask |= CFM_BACKCOLOR;
cfm.dwEffects &= ~CFE_AUTOBACKCOLOR ;
cfm.crBackColor = m_clrBack;
::SendMessage(GetRichEditCtrl().GetSafeHwnd(), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfm);
}
void CCustomThemesView::OnSelectorBack(NMHDR* pNMHDR, LRESULT* pResult)
{
NMXTPCONTROL* tagNMCONTROL = (NMXTPCONTROL*)pNMHDR;
CXTPControlColorSelector* pControl = (CXTPControlColorSelector*)tagNMCONTROL->pControl;
m_clrBack = pControl->GetColor();
OnButtonBack();
*pResult = 1;
}
void CCustomThemesView::OnUpdateBack(CCmdUI* pCmdUI)
{
CXTPControlPopupColor* pPopup = DYNAMIC_DOWNCAST(CXTPControlPopupColor, CXTPControl::FromUI(pCmdUI));
if (pPopup)
{
pPopup->SetColor(m_clrBack);
}
pCmdUI->Enable(TRUE);
}
void CCustomThemesView::OnTextAuto()
{
CHARFORMAT& cfm = GetCharFormatSelection( );
cfm.dwMask |= CFM_COLOR;
cfm.dwEffects |= CFE_AUTOCOLOR ;
GetRichEditCtrl().SetSelectionCharFormat(cfm);
}
void CCustomThemesView::OnUpdateTextAuto(CCmdUI* pCmd)
{
CHARFORMAT& cfm = GetCharFormatSelection( );
pCmd->SetCheck(cfm.dwEffects & CFE_AUTOCOLOR? TRUE: FALSE);
}
void CCustomThemesView::OnBackNone()
{
CHARFORMAT2 cfm;
cfm.cbSize = sizeof(CHARFORMAT2);
::SendMessage(GetRichEditCtrl().GetSafeHwnd(), EM_GETCHARFORMAT, 1, (LPARAM)&cfm);
cfm.dwMask |= CFM_BACKCOLOR;
cfm.dwEffects |= CFE_AUTOBACKCOLOR ;
::SendMessage(GetRichEditCtrl().GetSafeHwnd(), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfm);
}
void CCustomThemesView::OnUpdateBackNone(CCmdUI* pCmd)
{
CHARFORMAT2 cfm;
cfm.cbSize = sizeof(CHARFORMAT2);
::SendMessage(GetRichEditCtrl().GetSafeHwnd(), EM_GETCHARFORMAT, 1, (LPARAM)&cfm);
pCmd->SetCheck(cfm.dwEffects & CFE_AUTOBACKCOLOR? TRUE: FALSE);
}
void CCustomThemesView::OnTextMore()
{
CColorDialog cd(m_clr);
if (cd.DoModal())
{
m_clr = cd.GetColor();
OnButtonText();
}
}
void CCustomThemesView::OnBackMore()
{
CColorDialog cd(m_clrBack);
if (cd.DoModal())
{
m_clrBack = cd.GetColor();
OnButtonBack();
}
}
void SendTrace(CString str)
{
TRACE(_T("Find combo notification: ") + str + "\n");
}
void CCustomThemesView::OnEditFind(NMHDR* pNMHDR, LRESULT* pResult)
{
SendTrace(_T("CBN_XTP_EXECUTE"));
NMXTPCONTROL* tagNMCONTROL = (NMXTPCONTROL*)pNMHDR;
CXTPControlComboBox* pControl = (CXTPControlComboBox*)tagNMCONTROL->pControl;
if (pControl->GetType() == xtpControlComboBox)
{
CString strFind = pControl->GetEditText();
if (!strFind.IsEmpty() && (pControl->GetEditHint() != strFind) && !FindText(strFind, TRUE,FALSE))
{
AfxMessageBox(_T("String not Found"));
}
*pResult = 1; // Handled;
}
}
void CCustomThemesView::OnUpdateEditFind(CCmdUI* pCmd)
{
pCmd->Enable(TRUE);
}
void CCustomThemesView::OnSetCharFormat(NMHDR* pNMHDR, LRESULT* pRes)
{
ASSERT(pNMHDR != NULL);
ASSERT(pRes != NULL);
#if (_MSC_VER < 1300)
CHARFORMAT& cf = ((NMXTPCHARHDR*)pNMHDR)->cf;
#else
CHARFORMAT2 cf;
MEMCPY_S(&cf, &((NMXTPCHARHDR*)pNMHDR)->cf, sizeof(((NMXTPCHARHDR*)pNMHDR)->cf));
#endif
SetCharFormat(cf);
*pRes = 1;
}
void CCustomThemesView::OnUpdateComboFont(CCmdUI* pCmd)
{
CXTPControlFontComboBox* pFontCombo = (CXTPControlFontComboBox*)CXTPControl::FromUI(pCmd);
if (pFontCombo && pFontCombo->GetType() == xtpControlComboBox)
{
pFontCombo->SetCharFormat((CHARFORMAT&)GetCharFormatSelection());
}
pCmd->Enable(TRUE);
}
void CCustomThemesView::OnDropdownFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_DROPDOWN"));
}
void CCustomThemesView::OnCloseupFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_CLOSEUP"));
}
void CCustomThemesView::OnSelchangeFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_SELCHANGE"));
}
void CCustomThemesView::OnSelendokFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_SELENDOK"));
}
void CCustomThemesView::OnSetfocusFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_SETFOCUS"));
}
void CCustomThemesView::OnSelendcancelFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_SELENDCANCEL"));
}
void CCustomThemesView::OnKillfocusFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_KILLFOCUS"));
}
void CCustomThemesView::OnEditchangeFindCombo(NMHDR* /*pNMHDR*/, LRESULT* /*pRes*/)
{
SendTrace(_T("CBN_EDITCHANGE"));
}
//////////////////////////////////////////////////////////////////////////
CString FormatIndent(int nIndent)
{
CString strIndent;
if (nIndent % 1000 == 0)
strIndent.Format(_T("%0.0f\""), (double)nIndent / 1000);
else if (nIndent % 100 == 0)
strIndent.Format(_T("%0.1f\""), (double)nIndent / 1000);
else
strIndent.Format(_T("%0.2f\""), (double)nIndent / 1000);
return strIndent;
}
void CCustomThemesView::SetIndentLeft(long nIndentLeft)
{
if (nIndentLeft < -11000)
nIndentLeft = -11000;
if (nIndentLeft > 22000)
nIndentLeft = 22000;
PARAFORMAT pf;
pf.cbSize = sizeof(PARAFORMAT);
pf.dwMask = PFM_STARTINDENT;
pf.dxStartIndent = nIndentLeft;
::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
}
long CCustomThemesView::GetIndentLeft()
{
PARAFORMAT pf;
pf.cbSize = sizeof(PARAFORMAT);
pf.dwMask = PFM_STARTINDENT;
::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
return pf.dxStartIndent;
}
void CCustomThemesView::OnUpdateIndentLeft(CCmdUI* pCmdUI)
{
CXTPControlEdit* pControl = DYNAMIC_DOWNCAST(CXTPControlEdit, CXTPControl::FromUI(pCmdUI));
if (pControl && !pControl->HasFocus())
{
pControl->SetEditText(FormatIndent(GetIndentLeft()));
}
pCmdUI->Enable(TRUE);
}
double _ttof(LPCTSTR lpszStr)
{
USES_CONVERSION;
return atof(T2A((LPTSTR)lpszStr));
}
void CCustomThemesView::OnIndentLeft(NMHDR* pNMHDR, LRESULT* pResult)
{
NMXTPCONTROL* tagNMCONTROL = (NMXTPCONTROL*)pNMHDR;
CXTPControlEdit* pControl = DYNAMIC_DOWNCAST(CXTPControlEdit, tagNMCONTROL->pControl);
if (pControl)
{
SetIndentLeft(int(_ttof(pControl->GetEditText()) * 1000));
}
*pResult = 1;
}
void CCustomThemesView::OnIndentLeftSpin(NMHDR* pNMHDR, LRESULT* pResult)
{
NMXTPUPDOWN* tagNMCONTROL = (NMXTPUPDOWN*)pNMHDR;
CXTPControlEdit* pControl = DYNAMIC_DOWNCAST(CXTPControlEdit, tagNMCONTROL->pControl);
if (pControl)
{
SetIndentLeft(int(_ttof(pControl->GetEditText()) * 1000) + tagNMCONTROL->iDelta * 100);
pControl->SetEditText(FormatIndent(GetIndentLeft()));
}
*pResult = 1;
}