\t\t孙鑫 第五课 文本编程笔记
来源:互联网 发布:汽车油漆调色软件下载 编辑:程序博客网 时间:2024/06/01 10:45
1 定时器
CWnd::SetTimer
UINT SetTimer(UINTnIDEvent,UINTnElapse,void (CALLBACKEXPORT*lpfnTimer)(HWND,UINT,UINT,DWORD));
参数(1 该定时器ID号,自己定义。 2 超时时间,每个多少ms触发一次。 3 回调函数,定时时间到后调用该函数去做相应的动作, 如果为NULL,则在该类的WM_TIMER消息里写处理代码, 该消息函数如下
void CMy34View::OnTimer(UINT nIDEvent)
参数 UINT nIDEvent 为定时器ID号,根据自己在SetTimer里写的ID号来判断处理。
2 MFC的OnDraw函数 ,界面重绘时会被框架类调用测函数来重绘窗口,所以如果有文字显示的地方要在此重绘,否则改变窗口大小从而重绘时会导致文字丢失。
3 CDC::DrawText
virtual int DrawText(LPCTSTRlpszString,intnCount,LPRECTlpRect,UINTnFormat);
int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );
视频里用的第二个,以一个矩形为窗口输出字符串,视频里的例子是歌词颜色改变的demo , 结合定时器完成的。
CFont font;
font.CreatePointFont(100 /* 大小*/, "楷体" /*字体*/, NULL);
CClientDC dc(this);
CFont *oldFont = dc.SelectObject(&font); //选择该字体
CRect rect(10, 20, 100, 200); //设定该矩形
dc.DrawText(str, rect, DT_LEFT); //左对齐 输出str 在rect范围内
dc.SelectObject(oldFont); //该字体用完把老字体重新还回设备
4 CFont 字体类
eg.
CFont font;
font.CreatePointFont(100 /* 大小*/, "楷体" /*字体*/, NULL);
CClientDC dc(this);
CFont *oldFont = dc.SelectObject(&font); //选择该字体
dc.TextOut(x, y, str); //在(x, y)坐标处输出该str
dc.SelectObject(oldFont); //该字体用完把老字体重新还回设备
5 关于这节课自己跟着写的代码(部分 My34View类的cpp部分)
CMy34View::CMy34View()
{
// TODO: add construction code here
m_strInput = "";
m_pt.x = 0;
m_pt.y = 0;
m_nWidth = 0;
}
CMy34View::~CMy34View()
{
}
BOOL CMy34View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMy34View drawing
void CMy34View::OnDraw(CDC* pDC)
{
CMy34Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str;
//str = "Ocean University of China";
str = "中华人民共和国";
COLORREF oldColor = pDC->SetTextColor(RGB(0, 255, 0));
CFont font;
font.CreatePointFont(200, "幼圆", NULL);
CFont *oldFont = pDC->SelectObject(&font);
pDC->TextOut(0, 200, str);
str.LoadString(IDS_SDIBT); //SDIBT
pDC->TextOut(50, 50, str);
CSize size;
size = pDC->GetTextExtent(str);
pDC->SelectObject(oldFont);
// pDC->BeginPath();
// pDC->Rectangle(50, 50, 50 + size.cx, 50 + size.cy);
// pDC->EndPath();
// pDC->SelectClipPath(RGN_DIFF);
//
// for (int i = 0; i < 300; i += 10)
// {
// pDC->MoveTo(0, i);
// pDC->LineTo(300, i);
// pDC->MoveTo(i, 0);
// pDC->LineTo(i, 300);
// }
}
/////////////////////////////////////////////////////////////////////////////
// CMy34View printing
BOOL CMy34View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
/////////////////////////////////////////////////////////////////////////////
// CMy34View message handlers
int CMy34View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
//1
//CreateSolidCaret(10, 20);//创建插入符
//ShowCaret(); //显示插入符
//2
// CClientDC dc(this);
// TEXTMETRIC tm; //字体结构体
// dc.GetTextMetrics(&tm);
// CreateSolidCaret(tm.tmAveCharWidth / 4, tm.tmHeight);
// ShowCaret();
//3
CClientDC dc(this);
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();
SetTimer(1, 100, NULL);//设置定时器 ID == 1, timeout == 100ms, 无回调函数,在View类的WM_TIMER消息中处理
return 0;
}
void CMy34View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CClientDC dc(this);
CFont font;
font.CreatePointFont(100, "幼圆", NULL);
CFont *oldFont = dc.SelectObject(&font);
//Enter key
if (0x0d == nChar)
{
m_strInput.Empty();
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
POINT point;
point.x = m_pt.x;
m_pt.y += tm.tmHeight;
point.y = m_pt.y;
SetCaretPos(point);
}
//backspace key
else if(0x08 == nChar)
{
COLORREF oldBackColor = dc.SetTextColor(dc.GetBkColor()); //取得背景色并且设置当前文字为背景色 保存改变之前的颜色
dc.TextOut(m_pt.x, m_pt.y, m_strInput); //设置当前字符串颜色为背景色
m_strInput = m_strInput.Left(m_strInput.GetLength() - 1); //截取字符创长度-1 的左边部分
dc.SetTextColor(oldBackColor); //重新设置字体颜色为之前的颜色
dc.TextOut(m_pt.x, m_pt.y, m_strInput); //输入
CSize size;
size = dc.GetTextExtent(m_strInput); //获得当前字符串在屏幕上的长度
POINT point;
point.x = m_pt.x + size.cx; //左删除 光标的X轴变 Y轴不变
point.y = m_pt.y;
SetCaretPos(point);
}
else
{
m_strInput += nChar; //把字符串组合 重新输出
CSize size;
size = dc.GetTextExtent(m_strInput);
dc.TextOut(m_pt.x, m_pt.y, m_strInput);
POINT point;
point.x = m_pt.x + size.cx;
point.y = m_pt.y;
SetCaretPos(point);
}
dc.SelectObject(oldFont);
CView::OnChar(nChar, nRepCnt, nFlags);
}
void CMy34View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_strInput.Empty();
SetCaretPos(point);
m_pt = point;
CView::OnLButtonDown(nFlags, point);
}
void CMy34View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case 1:
m_nWidth += 5;
CString str("中华人民共和国");
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rect;
rect.left = 0;
rect.top = 200;
rect.right = rect.left + m_nWidth;
rect.bottom = rect.top + tm.tmHeight;
dc.SetTextColor(RGB(255, 0, 255));
CFont font;
font.CreatePointFont(200, "幼圆", NULL);
CFont *oldFont = dc.SelectObject(&font);
dc.DrawText(str, rect, DT_LEFT);
CSize size;
size = dc.GetTextExtent(str);
if (m_nWidth > size.cx)
{
dc.SetTextColor(RGB(0, 0, 255));
m_nWidth = 0;
dc.TextOut(0, 200, str);
}
dc.SelectObject(oldFont);
}
CView::OnTimer(nIDEvent);
}
- \t\t孙鑫 第五课 文本编程笔记
- \t\t孙鑫 第六课 菜单编程笔记
- \t\t孙鑫 第七课 对话框编程笔记
- \t\t孙鑫 第九课之二 工具栏编程笔记
- \t\t孙鑫 第九课之三 状态栏编程笔记
- \t\t孙鑫 第九课之四 进度栏编程笔记
- \t\t孙鑫 第十课之一 颜色选择对话框编程(笔记+转载)
- \t\t孙鑫 第十课之二 字体选择对话框编程(笔记+转载)
- \t\t孙鑫 第九课之一 窗口外观改变笔记
- 孙鑫VC学习笔记:第五讲 文本编程
- 孙鑫VC学习笔记:第五讲 文本编程
- MFC(文本编程,孙鑫C++第五讲笔记整理)
- MFC(文本编程,孙鑫C++第五讲笔记整理)
- 孙鑫:第五讲 文本编程
- \t\t孙鑫 第八课 继续对话框编程(属性页 向导页)
- t
- t
- t
- \t\t动态数组的C++实现(转)
- C++中复制构造函数有关的一点问题
- \t\tC++中复制构造函数有关的一点问题
- \t\tVC中几种画线的方法
- \t\tMSDN for VC6.0 下载地址
- \t\t孙鑫 第五课 文本编程笔记
- \t\t孙鑫 第六课 菜单编程笔记
- \t\t孙鑫VC视频笔记(全本)---转载 感谢作者(原文地址以及作者联系方式见文章顶部)
- \t\t孙鑫 第七课 对话框编程笔记
- \t\t谭浩强 C++ 学习笔记
- \t\t孙鑫 第八课 继续对话框编程(属性页 向导页)
- Lua string库
- \t\tVC 在View上显示时间 (读取系统时间)
- VC中对话框不能响应WM_CHAR WM_KEYUP WM_KEYDOWN消息的解决办法