DragonNest/Third/XTToolkitPro/Samples/Controls/TabbedView/TabEdit.cpp

237 lines
4.4 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// TabEdit.cpp : implementation file
//
#include "StdAfx.h"
#include "Resource.h"
#include "TabEdit.h"
#include <io.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTabEdit
CTabEdit::CTabEdit()
{
}
CTabEdit::~CTabEdit()
{
}
BEGIN_MESSAGE_MAP(CTabEdit, CEdit)
//{{AFX_MSG_MAP(CTabEdit)
ON_WM_CREATE()
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR, OnUpdateEditClear)
ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_SELECT_ALL, OnUpdateEditSelectAll)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_DROPFILES()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTabEdit message handlers
BOOL CTabEdit::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CEdit::PreCreateWindow(cs))
return FALSE;
cs.style |= ES_MULTILINE|WS_HSCROLL|WS_VSCROLL;
return TRUE;
}
int CTabEdit::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CEdit::OnCreate(lpCreateStruct) == -1)
return -1;
// Register as a drop target
m_dropTarget.Register(this);
DragAcceptFiles();
CreateFont();
return 0;
}
void CTabEdit::CreateFont()
{
LOGFONT lf;
XTAuxData().font.GetLogFont(&lf);
STRCPY_S(lf.lfFaceName, LF_FACESIZE, _T("Courier New"));
m_font.CreateFontIndirect(&lf);
SetFont(&m_font);
}
void CTabEdit::OnContextMenu(CWnd*, CPoint point)
{
if (point.x == -1 && point.y == -1)
{
//keystroke invocation
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
point = rect.TopLeft();
point.Offset(5, 5);
}
CMenu menu;
VERIFY(menu.LoadMenu(IDR_POPUP_EDIT));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
pWndPopupOwner);
}
void CTabEdit::OnEditUndo()
{
Undo();
}
void CTabEdit::OnUpdateEditUndo(CCmdUI* pCmdUI)
{
pCmdUI->Enable(CanUndo());
}
void CTabEdit::OnEditCut()
{
Cut();
}
void CTabEdit::OnUpdateEditCut(CCmdUI* pCmdUI)
{
pCmdUI->Enable(SelectionMade());
}
void CTabEdit::OnEditCopy()
{
Copy();
}
void CTabEdit::OnUpdateEditCopy(CCmdUI* pCmdUI)
{
pCmdUI->Enable(SelectionMade());
}
void CTabEdit::OnEditPaste()
{
Paste();
}
void CTabEdit::OnUpdateEditPaste(CCmdUI* pCmdUI)
{
pCmdUI->Enable(CanPaste());
}
void CTabEdit::OnEditClear()
{
Clear();
}
void CTabEdit::OnUpdateEditClear(CCmdUI* pCmdUI)
{
pCmdUI->Enable(SelectionMade());
}
void CTabEdit::OnEditSelectAll()
{
SetSel(0, -1);
}
void CTabEdit::OnUpdateEditSelectAll(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetWindowTextLength() > 0);
}
BOOL CTabEdit::CanPaste()
{
return ::IsClipboardFormatAvailable(CF_TEXT);
}
BOOL CTabEdit::SelectionMade()
{
int nStartChar, nEndChar;
GetSel( nStartChar, nEndChar );
return (nStartChar < nEndChar);
}
BOOL CTabEdit::OnEraseBkgnd(CDC* pDC)
{
UNREFERENCED_PARAMETER(pDC);
return TRUE;
}
void CTabEdit::OnPaint()
{
CPaintDC dc(this); // device context for painting
// Get the client rect.
CRect r;
GetClientRect(&r);
// Paint to a memory device context to help
// eliminate screen flicker.
CXTMemDC memDC(&dc, r, GetXtremeColor(COLOR_WINDOW));
// Now let the window do its default painting...
CEdit::DefWindowProc( WM_PAINT, (WPARAM)memDC.m_hDC, 0 );
}
void CTabEdit::OnDropFiles(HDROP hDropInfo)
{
SetWindowText(_T(""));
TCHAR szFileName[MAX_PATH];
::DragQueryFile(hDropInfo,0,szFileName,MAX_PATH);
if (_taccess(szFileName, 0) != -1)
{
CStdioFile file(szFileName, CFile::modeRead | CFile::typeText);
CString strBuffer1;
file.ReadString( strBuffer1 );
CString strBuffer2;
while (file.ReadString(strBuffer1))
{
strBuffer2 += (strBuffer1 + _T("\r\n"));
}
file.Close();
if ( strBuffer2.GetLength( ) )
{
SetWindowText(strBuffer2);
}
}
CEdit::OnDropFiles(hDropInfo);
}