// TextView.cpp : CTextView 类的实现
//
#include "stdafx.h"
#include "MainFrm.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "Text.h"
#endif
#include "TextDoc.h"
#include "TextView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTextView
IMPLEMENT_DYNCREATE(CTextView, CView)
BEGIN_MESSAGE_MAP(CTextView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CTextView::OnFilePrintPreview)
ON_WM_CONTEXTMENU()
ON_WM_RBUTTONUP()
ON_WM_CHAR()
ON_WM_CREATE()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_MOUSEWHEEL()
ON_WM_TIMER()
ON_COMMAND(ID_FILE_NEW, &CTextView::OnFileNew)
ON_COMMAND(IDM_CLEAR, &CTextView::OnClear)
ON_COMMAND(IDM_HUAWENCAIYUN, &CTextView::OnHuawencaiyun)
ON_COMMAND(IDM_FANGSONG, &CTextView::OnFangsong)
ON_COMMAND(IDM_FANGZHENGSHUTI, &CTextView::OnFangzhengshuti)
ON_COMMAND(IDM_FANGZHENGYAOTI, &CTextView::OnFangzhengyaoti)
ON_COMMAND(IDM_HUAWENXINGKAI, &CTextView::OnHuawenxingkai)
ON_COMMAND(IDM_KAITI, &CTextView::OnKaiti)
ON_COMMAND(IDM_LISHU, &CTextView::OnLishu)
ON_COMMAND(IDM_SONGTI, &CTextView::OnSongti)
ON_COMMAND(IDM_WEIRUANYAHEI, &CTextView::OnWeiruanyahei)
ON_UPDATE_COMMAND_UI(IDM_FANGSONG, &CTextView::OnUpdateFangsong)
ON_UPDATE_COMMAND_UI(IDM_FANGZHENGSHUTI, &CTextView::OnUpdateFangzhengshuti)
ON_UPDATE_COMMAND_UI(IDM_FANGZHENGYAOTI, &CTextView::OnUpdateFangzhengyaoti)
ON_UPDATE_COMMAND_UI(IDM_HUAWENCAIYUN, &CTextView::OnUpdateHuawencaiyun)
ON_UPDATE_COMMAND_UI(IDM_HUAWENXINGKAI, &CTextView::OnUpdateHuawenxingkai)
ON_UPDATE_COMMAND_UI(IDM_KAITI, &CTextView::OnUpdateKaiti)
ON_UPDATE_COMMAND_UI(IDM_LISHU, &CTextView::OnUpdateLishu)
ON_UPDATE_COMMAND_UI(IDM_SONGTI, &CTextView::OnUpdateSongti)
ON_UPDATE_COMMAND_UI(IDM_WEIRUANYAHEI, &CTextView::OnUpdateWeiruanyahei)
END_MESSAGE_MAP()
// CTextView 构造/析构
CTextView::CTextView()
{
// TODO: 在此处添加构造代码
int i=0;
for(i = 0;i<1000;i++){
point_Start[i] = 0;
string[i] = "";
}
count = 0;
temp = 0;
CharSize = 100;
LZiTi = L"微软雅黑";
width = 0;
red = 0;
green = 0;
blue = 0;
//设置菜单项标记
check_fangsong = false;
check_fangzhengshuti = false;
check_fangzhengyaoti = false;
check_huawencaiyun = false;
check_huawenxingkai = false;
check_kaiti = false;
check_lishu = false;
check_songti = false;
check_weiruanyahei = true;
}
CTextView::~CTextView()
{
}
BOOL CTextView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// CTextView 绘制
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
temp = 0;
CClientDC dc(this);
CFont font;
font.CreatePointFont(CharSize, LZiTi, NULL);
pDC->SelectObject(&font);
for(temp = 0;temp<=count;temp++){
pDC->TextOut(point_Start[temp].x, point_Start[temp].y, string[temp]);
}
SetCaretPos(point_Caret);
}
// CTextView 打印
void CTextView::OnFilePrintPreview()
{
#ifndef SHARED_HANDLERS
AFXPrintPreview(this);
#endif
}
BOOL CTextView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CTextView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CTextView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}
void CTextView::OnRButtonUp(UINT /* nFlags */, CPoint point)
{
ClientToScreen(&point);
OnContextMenu(this, point);
}
void CTextView::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
#ifndef SHARED_HANDLERS
theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
#endif
}
// CTextView 诊断
#ifdef _DEBUG
void CTextView::AssertValid() const
{
CView::AssertValid();
}
void CTextView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTextDoc* CTextView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTextDoc)));
return (CTextDoc*)m_pDocument;
}
#endif //_DEBUG
// CTextView 消息处理程序
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CFont font;
font.CreatePointFont(CharSize, LZiTi, NULL);
dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d == nChar){ //回车符
count++;
point_Start[count].y = point_Start[count-1].y + tm.tmHeight;
point_Start[count].x = point_Start[count-1].x;
}
else if(0x08 == nChar){ //退格符
string[count] = string[count].Left(string[count].GetLength()-1);
}else{ //普通字符
string[count] = string[count] + WCHAR(nChar);
}
//确定插入符点
CSize sz = dc.GetTextExtent(string[count]);
point_Caret.x = point_Start[count].x + sz.cx;
point_Caret.y = point_Start[count].y;
Invalidate();
CView::OnChar(nChar, nRepCnt, nFlags);
}
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
//设置定时器
SetTimer(1, 100, NULL);
//bitmap与图片关联
bmp_weiruanyahei.LoadBitmapW(IDB_WEIRUANYAHEI);
bmp_fangsong.LoadBitmapW(IDB_FANGSONG);
bmp_fangzhengshuti.LoadBitmapW(IDB_FANGZHENGSHUTI);
bmp_fangzhengyaoti.LoadBitmapW(IDB_FANGZHENGYAOTI);
bmp_huawencaiyun.LoadBitmapW(IDB_HUAWENCAIYUN);
bmp_huawenxingkai.LoadBitmapW(IDB_HUAWENXINGKAI);
bmp_kaiti.LoadBitmapW(IDB_KAITI);
bmp_lishu.LoadBitmapW(IDB_LISHU);
bmp_songti.LoadBitmapW(IDB_SONGTI);
CreateCaret(&bmp_weiruanyahei);
ShowCaret();
return 0;
}
void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
count++;
point_Start[count] = point;
point_Caret = point;
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
void CTextView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString str;
str.Format(_T("缩放:%d 字体:%s"),CharSize,LZiTi);
((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);
CView::OnMouseMove(nFlags, point);
}
BOOL CTextView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CharSize = CharSize + int(zDelta);
CClientDC dc(this);
CFont font;
font.CreatePointFont(CharSize, LZiTi, NULL);
dc.SelectObject(&font);
CSize sz = dc.GetTextExtent(string[count]);
point_Caret.x = point_Start[count].x + sz.cx;
point_Caret.y = point_Start[count].y;
Invalidate();
CString str;
str.Format(_T("缩放:%d 字体:%s"),CharSize,LZiTi);
((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
void CTextView::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
width = width + 5;
CString str;
str.LoadString(IDS_ZONGXIANGRUI);
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CSize sz = dc.GetTextExtent(str);
if(width > sz.cx){
width = 0;
}
if(blue<240) blue = blue + 20;
else if(green<240) green = green + 20;
else if(red<240) red = red + 20;
else{blue=0; green=0; red=0;}
dc.SetTextColor(RGB(red,green,blue));
CRect rect;
rect.left = 0;
rect.top = 200;
rect.right = rect.left + width;
rect.bottom = rect.top + tm.tmHeight;
dc.DrawText(str, rect, DT_LEFT);
CRect rect2;
rect2.left = 0;
rect2.top = 150;
rect2.right = rect2.left + width;
rect2.bottom = rect2.top + tm.tmHeight;
dc.DrawText(str, rect2, DT_RIGHT);
CRect rect3