📄 ch11demo5view.cpp
字号:
// Ch11Demo5View.cpp : implementation of the CCh11Demo5View class
//
#include "stdafx.h"
#include "Ch11Demo5.h"
#include "Ch11Demo5Doc.h"
#include "Ch11Demo5View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCh11Demo5View
static const UINT MsgFindReplace=::RegisterWindowMessage(FINDMSGSTRING);
IMPLEMENT_DYNCREATE(CCh11Demo5View, CView)
BEGIN_MESSAGE_MAP(CCh11Demo5View, CView)
//{{AFX_MSG_MAP(CCh11Demo5View)
ON_COMMAND(ID_FONT, OnFont)
ON_COMMAND(ID_BACKCOLOR, OnBackcolor)
ON_COMMAND(ID_TEXTCOLOR, OnTextcolor)
ON_COMMAND(ID_FIND, OnFind)
ON_COMMAND(ID_REPLACE, OnReplace)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_REGISTERED_MESSAGE(MsgFindReplace, OnFindReplace)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCh11Demo5View construction/destruction
CCh11Demo5View::CCh11Demo5View()
{
// TODO: add construction code here
//缺省前景色为黑色,背景色为白色,字体为系统字体
frontColor=0;
backColor=0xFFFFFF;
fnt.CreateStockObject(SYSTEM_FONT);
str="在使用Windows的过程中,用户经常会遇到一些常用的有特定用途的对话框。\n例如,当执行“File”→“Open”菜单命令,会弹出一个文件选择的对话框,用户可以在其中选择想要打开的文件。\n由于其使用频率很高,因此Windows系统本身提供了对该对话框的支持,用户不必自己设计文件选择对话框。";
pFindReplaceDlg=NULL;
pos=0;
}
CCh11Demo5View::~CCh11Demo5View()
{
}
BOOL CCh11Demo5View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CCh11Demo5View drawing
void CCh11Demo5View::OnDraw(CDC* pDC)
{
CCh11Demo5Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CFont *pOldFont;
pOldFont=pDC->SelectObject(&fnt);//设置字体
pDC->SetTextColor(frontColor);//设置文本颜色
pDC->SetBkColor(backColor);//设置背景色
CRect textrect(40,50,540,500); //文本输出矩形区域
pDC->DrawText(str,&textrect,DT_LEFT|DT_WORDBREAK);//文本输出
pDC->SelectObject(pOldFont);//恢复默认字体
}
/////////////////////////////////////////////////////////////////////////////
// CCh11Demo5View printing
BOOL CCh11Demo5View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CCh11Demo5View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CCh11Demo5View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CCh11Demo5View diagnostics
#ifdef _DEBUG
void CCh11Demo5View::AssertValid() const
{
CView::AssertValid();
}
void CCh11Demo5View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CCh11Demo5Doc* CCh11Demo5View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCh11Demo5Doc)));
return (CCh11Demo5Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCh11Demo5View message handlers
void CCh11Demo5View::OnFont() //字体
{
// TODO: Add your command handler code here
LOGFONT ft;
fnt.GetLogFont(&ft);//获取当前使用字体结构
CFontDialog dlg(&ft, CF_EFFECTS | CF_SCREENFONTS,0,this);
if(dlg.DoModal()==IDOK)//弹出字体对话框
{
LOGFONT LF;
//获取所选字体的信息
dlg.GetCurrentFont(&LF);
frontColor=dlg.GetColor();
//建立新的字体
fnt.DeleteObject();
fnt.CreateFontIndirect(&LF);
Invalidate();//重绘视图
}
}
void CCh11Demo5View::OnBackcolor() //背景颜色
{
// TODO: Add your command handler code here
CColorDialog dlg(backColor,CC_FULLOPEN);//构造颜色对话框
if(dlg.DoModal()==IDOK)
{
backColor=dlg.GetColor();//获取对话框中设定的颜色
}
Invalidate();//重绘视图
}
void CCh11Demo5View::OnTextcolor() //文本颜色
{
// TODO: Add your command handler code here
CColorDialog dlg(frontColor,CC_FULLOPEN);//构造颜色对话框
if(dlg.DoModal()==IDOK)
{
frontColor=dlg.GetColor();//获取对话框中设定的颜色
}
Invalidate(); //重绘视图
}
void CCh11Demo5View::OnFind() //查找
{
// TODO: Add your command handler code here
pos=0;
if(pFindReplaceDlg)//判断是否已存在一个对话框
{
if(bFindOnly)//若Find对话框已打开,则使之成为活动窗口
{
pFindReplaceDlg->SetActiveWindow();
return;
}
else
//关闭替换对话框
pFindReplaceDlg->SendMessage(WM_CLOSE);
}
bFindOnly=TRUE;
//创建查找对话框
pFindReplaceDlg=new CFindReplaceDialog;
pFindReplaceDlg->Create(TRUE,NULL,NULL,FR_DOWN,this);
}
void CCh11Demo5View::OnReplace() //替换
{
// TODO: Add your command handler code here
pos=0;
if(pFindReplaceDlg)//判断是否已存在一个对话框
{
if(!bFindOnly)
{
pFindReplaceDlg->SetActiveWindow();//若替换对话框已打开,则使之成为活动窗口
return;
}
else
pFindReplaceDlg->SendMessage(WM_CLOSE);//关闭查找对话框
}
bFindOnly=FALSE;
//创建替换对话框
pFindReplaceDlg=new CFindReplaceDialog;
pFindReplaceDlg->Create(FALSE,NULL,NULL,FR_DOWN,this);
}
LRESULT CCh11Demo5View::OnFindReplace(WPARAM, LPARAM lParam)
{
//判断对话框是否被关闭
if(pFindReplaceDlg->IsTerminating())
pFindReplaceDlg=NULL;
//获取当前查找/替换对话框的指针
CFindReplaceDialog* pDlg = CFindReplaceDialog::GetNotifier(lParam);
CString m_FindString = pDlg->GetFindString(); //要查找的字符串
CString m_ReplaceString = pDlg->GetReplaceString(); //要替换的字符串
CString strpos;
if( pDlg->FindNext() ) //按下了"查找"按钮,查找下一个
{
pos=str.Find(m_FindString,pos);
if(pos==-1)//未找到查找的字符
{
AfxMessageBox("搜索完毕,没有找到指定字符串");
pos=0;
}
else
{
strpos.Format("查找的字符串的位置为%d",pos);
pos++;
AfxMessageBox(strpos);//找到字符在原串的位置
}
}
if( pDlg->ReplaceAll() ) //按下了"全部替换"按钮
{
str.Replace(m_FindString,m_ReplaceString);//替换字符串
Invalidate();//更新视图
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -