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 + -
显示快捷键?