?? resultview.cpp
字號:
// ResultView.cpp : implementation file
//
#include "stdafx.h"
#include "QryTool.h"
#include "ResultView.h"
#include "ChildFrm.h"
#include "ExportDlg.h"
#include "font.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
LPCTSTR g_szResult = _T("Result");
LPCTSTR g_szResultWordWrap = _T("WrapWord");
extern LPCTSTR szQueryFont;
extern LPCTSTR g_szResultFont;
extern LPCTSTR g_szGridFont;
extern LPCTSTR g_szMessages;
/////////////////////////////////////////////////////////////////////////////
// CResultView
IMPLEMENT_DYNCREATE(CResultView, CRichEditView)
CResultView::CResultView()
{
m_nWordWrap = AfxGetApp()->GetProfileInt(g_szResult, g_szResultWordWrap, WrapNone);
m_pGridCtrl = NULL;
}
CResultView::~CResultView()
{
if(m_font.m_hObject != NULL)
{
m_font.Detach();
m_font.m_hObject = NULL;
}
}
BEGIN_MESSAGE_MAP(CResultView, CRichEditView)
//{{AFX_MSG_MAP(CResultView)
ON_WM_SIZE()
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
ON_WM_CREATE()
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
ON_WM_MOUSEACTIVATE()
ON_UPDATE_COMMAND_UI(ID_FILE_PRINT, OnUpdateFilePrint)
ON_COMMAND(ID_VIEW_WRAP_WORD, OnViewWrapWord)
ON_UPDATE_COMMAND_UI(ID_VIEW_WRAP_WORD, OnUpdateViewWrapWord)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_WM_SETFOCUS()
ON_COMMAND(ID_GRID_SAVE_SELECTION, OnGridSaveSelection)
ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_SELECT_ALL, OnUpdateEditSelectAll)
ON_COMMAND(ID_VIEW_FONT, OnViewFont)
ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
ON_UPDATE_COMMAND_UI(ID_EDIT_REPLACE, OnUpdateEditReplace)
//}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_PRINT, CRichEditView::OnFilePrint)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CResultView diagnostics
#ifdef _DEBUG
void CResultView::AssertValid() const
{
CRichEditView::AssertValid();
}
void CResultView::Dump(CDumpContext& dc) const
{
CRichEditView::Dump(dc);
}
CQryToolDoc* CResultView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQryToolDoc)));
return (CQryToolDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CResultView message handlers
void CResultView::OnSize(UINT nType, int cx, int cy)
{
CRichEditView::OnSize(nType, cx, cy);
if(m_pGridCtrl != NULL && m_pGridCtrl->m_hWnd != NULL)
{
m_pGridCtrl->MoveWindow(0, 0, cx, cy);
m_pGridCtrl->Invalidate();
m_pGridCtrl->UpdateWindow();
Invalidate();
UpdateWindow();
}
}
void CResultView::OnEditCopy()
{
CWaitCursor wait;
bool bCopyGrid = m_pGridCtrl && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible();
if(!bCopyGrid)
GetRichEditCtrl().Copy();
else
{
if(m_pChildFrame->m_bExecuting)
{
m_pGridCtrl->Invalidate();
m_pGridCtrl->UpdateWindow();
}
#ifdef _UNICODE
AfxMessageBox(_T("Not implemented yet."));
#else
CopyGridData();
#endif
if(m_pChildFrame->m_bExecuting)
{
m_pGridCtrl->Invalidate();
m_pGridCtrl->UpdateWindow();
}
}
}
void CResultView::CopyGridData()
{
m_pChildFrame->m_wndStatusBar.SetPaneText(0, _T("Copying..."));
long lCol = m_pGridCtrl->GetCol();
long lRow = m_pGridCtrl->GetRow();
long lColSel = m_pGridCtrl->GetColSel();
long lRowSel = m_pGridCtrl->GetRowSel();
if(lColSel < lCol)
{
lCol = lColSel;
lColSel = m_pGridCtrl->GetCol();
}
if(lRowSel < lRow)
{
lRow = lRowSel;
lRowSel = m_pGridCtrl->GetRow();
}
CSharedFile memFile(GMEM_MOVEABLE | GMEM_DDESHARE | GMEM_ZEROINIT);
CString sBuff;
USES_CONVERSION;
for(long lR = lRow; lR <= lRowSel; lR++)
{
for(long lC = lCol; lC <= lColSel; lC++)
{
sBuff = m_pGridCtrl->GetTextMatrix(lR, lC);
memFile.Write(T2A(const_cast<LPTSTR>((LPCTSTR)sBuff)), sBuff.GetLength());
if(lC < lColSel)
memFile.Write(_T("\t"), lstrlen(_T("\t")));
}
if(lR < lRowSel)
memFile.Write(_T("\n"), lstrlen(_T("\n")));
}
COleDataSource* pDataSource = new COleDataSource;
ASSERT(pDataSource);
pDataSource->CacheGlobalData(CF_TEXT, memFile.Detach());
pDataSource->SetClipboard();
}
void CResultView::OnUpdateEditCopy(CCmdUI* pCmdUI)
{
long lStart = -1;
long lEnd = -1;
GetRichEditCtrl().GetSel(lStart, lEnd);
bool bEnable = (m_pGridCtrl && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible()) || (lEnd-lStart);
pCmdUI->Enable(bEnable);
}
int CResultView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CRichEditView::OnCreate(lpCreateStruct) == -1)
return -1;
m_pChildFrame = (CChildFrame*)GetParentFrame();
GetRichEditCtrl().SetReadOnly();
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
m_pChildFrame->GetProfileFont(
g_szResultFont,
&lf,
false,
NULL,
NULL
);
if(lf.lfHeight == 0)
{
lf.lfHeight = -15;
lf.lfWeight = 400;
_tcscpy(lf.lfFaceName, _T("Courier"));
}
if(!m_font.CreateFontIndirect(&lf))
TRACE(_T("Could Not create font.\n"));
if(m_font.m_hObject != NULL)
GetRichEditCtrl().SetFont(&m_font);
return 0;
}
void CResultView::OnUpdateFileSave(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE);
}
void CResultView::OnFilePrint()
{
CWaitCursor wait;
CDocument* pDoc = m_pChildFrame->GetActiveDocument();
ASSERT(pDoc != NULL);
CString sTitle = pDoc->GetTitle();
if(sTitle.IsEmpty())
sTitle = "Untitled.";
if(m_strObjName.IsEmpty())
m_strObjName = "Untitled";
m_pChildFrame->LockWindowUpdate();
pDoc->SetTitle(m_strObjName);
CRichEditView::OnFilePrint();
pDoc->SetTitle(sTitle);
m_pChildFrame->UnlockWindowUpdate();
}
void CResultView::OnGridSaveSelection()
{
if(m_pChildFrame->m_bExecuting)
{
m_pGridCtrl->Invalidate();
m_pGridCtrl->UpdateWindow();
}
if(!ExportResults(true))
TRACE(_T("Error exporting results.\n"));
if(m_pChildFrame->m_bExecuting)
{
m_pGridCtrl->Invalidate();
m_pGridCtrl->UpdateWindow();
}
}
void CResultView::OnFileSaveAs()
{
CWaitCursor wait;
bool bExport = m_pGridCtrl && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible();
if(bExport)
{
if(!ExportResults())
TRACE(_T("Error exporting results.\n"));
}
else
{
CStringEx sBuff;
GetRichEditCtrl().GetWindowText(sBuff);
CString strFilter, sDefaultExt;
if(!m_strObjName.IsEmpty() && sBuff.FindNoCase(m_strObjName) != -1)
{
sDefaultExt = _T("qry");
strFilter = _T("Query Files (*.qry)|*.qry|All Files (*.*)|*.*|");
}
else
{
sDefaultExt = _T("txt");
strFilter = _T("Text Files (*.txt)|*.txt|All Files(*.*)|*.*|");
m_strObjName = _T("Untitled");
}
CFileDialog dlg(false, sDefaultExt, m_strObjName, OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT, strFilter, this);
if(dlg.DoModal() == IDOK)
{
CWaitCursor wait;
CString sBuff;
CString sPathName = dlg.GetPathName();
CStdioFile file;
CFileException fileException;
if(!file.Open(sPathName, CFile::typeText | CFile::modeCreate |
CFile::modeWrite, &fileException))
{
sBuff.Format(_T("File Path Name: <%s> "), sPathName);
sBuff += CHelpers::GetFileExceptionError(fileException.m_cause);
AfxMessageBox(sBuff);
}
else
{
GetRichEditCtrl().GetWindowText(sBuff);
file.WriteString(sBuff);
}
}
}
}
int CResultView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
const MSG* pMsg = GetCurrentMessage();
GetParent()->SendMessage(WM_MOUSEACTIVATE, pMsg->wParam, pMsg->lParam);
return CRichEditView::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
HMENU CResultView::GetContextMenu(WORD /*wSelType*/, LPOLEOBJECT /*lpOleObj*/,
CHARRANGE* /*lpChrg*/)
{
bool bOkToInvokeGridMenu = m_pGridCtrl && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible();
if(bOkToInvokeGridMenu)
InvokeGridMenu();
else
{
CMenu menu;
if(menu.LoadMenu(IDR_RCLICK))
{
CMenu* pMenu = menu.GetSubMenu(2);
ASSERT(pMenu);
int nTextLength = GetRichEditCtrl().GetTextLength();
if(!nTextLength)
{
pMenu->EnableMenuItem(ID_EDIT_SELECT_ALL, MF_BYCOMMAND | MF_GRAYED);
pMenu->EnableMenuItem(ID_EDIT_CLEAR, MF_BYCOMMAND | MF_GRAYED);
}
long lStart = -1;
long lEnd = -1;
GetRichEditCtrl().GetSel(lStart, lEnd);
if(lEnd-lStart == 0)
pMenu->EnableMenuItem(ID_EDIT_COPY, MF_BYCOMMAND | MF_GRAYED);
CPoint point;
::GetCursorPos(&point);
pMenu->TrackPopupMenu(0, point.x, point.y, this);
}
}
return NULL;
}
void CResultView::OnUpdateFilePrint(CCmdUI* pCmdUI)
{
bool bEnable = (m_pGridCtrl != NULL && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible());
pCmdUI->Enable(!bEnable);
}
void CResultView::OnViewWrapWord()
{
m_nWordWrap = (m_nWordWrap == WrapNone) ? WrapToWindow : WrapNone;
WrapChanged();
AfxGetApp()->WriteProfileInt(g_szResult, g_szResultWordWrap, m_nWordWrap);
}
void CResultView::OnUpdateViewWrapWord(CCmdUI* pCmdUI)
{
bool bEnable = (m_pGridCtrl != NULL && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible());
pCmdUI->Enable(!bEnable);
pCmdUI->SetCheck(m_nWordWrap == WrapToWindow);
}
void CResultView::SetWrapNone()
{
if(m_nWordWrap == WrapToWindow)
{
m_nWordWrap = WrapNone;
WrapChanged();
}
}
void CResultView::SetWrapToWindow()
{
if(m_nWordWrap == WrapNone)
{
m_nWordWrap = WrapToWindow;
WrapChanged();
}
}
void CResultView::OnUpdateEditReplace(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE);
}
void CResultView::OnUpdateEditCut(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE);
}
void CResultView::OnUpdateEditPaste(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE);
}
void CResultView::OnSetFocus(CWnd* pOldWnd)
{
bool bFocus = m_pGridCtrl && ::IsWindow(m_pGridCtrl->m_hWnd) &&
m_pGridCtrl->IsWindowVisible();
if(!bFocus)
CRichEditView::OnSetFocus(pOldWnd);
else
m_pGridCtrl->SetFocus();
}
BOOL CResultView::ExportResults(const bool& bSaveSelection)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -