editarticle.cpp
来自「深入浅出Visual C++入门进阶与应用实例 随书光盘 作者 何志丹」· C++ 代码 · 共 310 行
CPP
310 行
// EditContent.cpp : implementation file
//
#include "stdafx.h"
#include "EditArticle.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditArticleView
IMPLEMENT_DYNCREATE(CEditArticleView, CFormView)
CEditArticleView::CEditArticleView()
: CFormView(CEditArticleView::IDD)
{
//{{AFX_DATA_INIT(CEditArticleView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CEditArticleView::~CEditArticleView()
{
}
void CEditArticleView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditArticleView)
DDX_Control(pDX, IDC_TOPIC, m_editTopic);
DDX_Control(pDX, IDC_CONTENT, m_editContent);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditArticleView, CFormView)
//{{AFX_MSG_MAP(CEditArticleView)
ON_WM_SIZE()
ON_COMMAND(ID_TO_FIRST_PAGE, OnToFirstPage)
ON_COMMAND(ID_TO_FRONT_PAGE, OnToFrontPage)
ON_COMMAND(ID_TO_LAST_PAGE, OnToLastPage)
ON_COMMAND(ID_TO_NEXT_PAGE, OnToNextPage)
ON_COMMAND(ID_DELETE_CONTENT, OnDeleteContent)
ON_WM_CREATE()
ON_COMMAND(ID_SAVE, OnSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditArticleView diagnostics
#ifdef _DEBUG
void CEditArticleView::AssertValid() const
{
CFormView::AssertValid();
}
void CEditArticleView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CEditArticleView message handlers
void CEditArticleView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
ChangeControlSize();
}
void CEditArticleView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
::SendMessage(m_editContent.GetSafeHwnd(), EM_EXLIMITTEXT , 0, 10000000);
ChangeControlSize();
// ResizeParentToFit(false);//否则会影响最大化
}
bool CEditArticleView::UpdateDataByMainData()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return false ;
}
CMainData * pData = &pDoc->m_mainData ;
if(NULL == m_editTopic.GetSafeHwnd() && NULL == m_editContent.GetSafeHwnd())
return false;
if(NULL == pData)
{
ASSERT(false);
return false;
}
CArticleData * pContentData = pData->GetCurArticleData();
if(NULL == pContentData)
{
m_editTopic.SetWindowText("");
m_editContent.SetWindowText("");
}
else
{
m_editTopic.SetWindowText(pContentData->m_topic);
m_editContent.SetWindowText(pContentData->m_content);
}
return true;
}
bool CEditArticleView::SaveToMainData()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return false ;
}
CMainData * pData = &pDoc->m_mainData ;
if(NULL == pData)
{
ASSERT(false);
return false;
}
CString strTopic,strContent ;
m_editTopic.GetWindowText(strTopic);
m_editContent.GetWindowText(strContent);
CArticleData * pCurArticle = pData->GetCurArticleData();
if(NULL != pCurArticle)
{
if(pCurArticle->m_topic == strTopic && pCurArticle->m_content == strContent)
return true ;//标题和内容都没有变,无需修改
}
pData->EditCurArticle(strTopic,strContent);//修改内存及数据库中的数据
return true ;
}
//允许用户复制粘贴全选取消
BOOL CEditArticleView::PreTranslateMessage(MSG* pMsg)
{
UINT nKeyCode = pMsg->wParam; // virtual key code of the key pressed
if (pMsg->message == WM_KEYDOWN)
{
if ( (nKeyCode == _T('C') || nKeyCode == _T('X')
|| nKeyCode == _T('V') || nKeyCode == _T('A')
|| nKeyCode == _T('Z')) &&
(::GetKeyState(VK_CONTROL) & 0x8000) )
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return(TRUE);
}
}
return CFormView::PreTranslateMessage(pMsg);
}
CArticleDoc* CEditArticleView::GetDocument( ) const
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CArticleDoc))) ;
return (CArticleDoc*)m_pDocument ;
}
void CEditArticleView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return ;
}
if(NULL == GetSafeHwnd())
return ;
UpdateDataByMainData();
}
void CEditArticleView::OnToFirstPage()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return ;
}
SaveToMainData();
pDoc->m_mainData.MoveFirst();
pDoc->UpdateAllViews(NULL);
}
void CEditArticleView::OnToFrontPage()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return ;
}
SaveToMainData();
pDoc->m_mainData.MovePre();
pDoc->UpdateAllViews(NULL);
}
void CEditArticleView::OnToLastPage()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return ;
}
SaveToMainData();
pDoc->m_mainData.MoveLast();
pDoc->UpdateAllViews(NULL);
}
void CEditArticleView::OnToNextPage()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return ;
}
SaveToMainData();
pDoc->m_mainData.MoveNext();
pDoc->UpdateAllViews(NULL);
}
void CEditArticleView::OnDeleteContent()
{
CArticleDoc * pDoc = GetDocument() ;
if(NULL == pDoc)
{
ASSERT(false);
return ;
}
pDoc->m_mainData.DeleteCurArticle();
pDoc->UpdateAllViews(NULL);
}
void CEditArticleView::ChangeControlSize()
{
if(NULL == GetSafeHwnd())
{
return ;
}
else
{
CRect rParent;
GetClientRect(&rParent);
if(NULL != m_editTopic.GetSafeHwnd())
{//左上角不变,高度不变,宽度变化,但与右边的距离不变
int nEY = rParent.right - 10 ;
CRect r(45,6,nEY,25);
m_editTopic.MoveWindow(&r);
}
if(NULL != m_editContent.GetSafeHwnd())
{//左上角不变,高度,宽度变化,但与右边及下边的距离不变
int nEX,nEY ;
nEX = rParent.right - 10 ;
nEY = rParent.bottom - 10 ;
CRect r(8,35,nEX,nEY);
m_editContent.MoveWindow(&r);
}
}
}
void CEditArticleView::OnSave()
{
SaveToMainData();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?