VC视频教程笔记(第五课)

来源:互联网 发布:淘宝买家被骗案例 编辑:程序博客网 时间:2024/04/30 09:12

1.CWnd::CreateSolidCaret创建插入符,ShowCaret()显示插入符。GetTextMetrics(),获得当前字体的一些信息。CWnd::CreateCaret()创建图象插入符
bitmap.LoadBitmap(IDB_BITMAP1);//
此处的bitmap为成员变量!
CreateCaret(&bitmap);
ShowCaret();
TEXTMETRIC tm;//
字体结构体
dc.GetTextMetrics(&tm);//
m_ptOrigin.y+=tm.tmHeight;//
获得字体高度。
2.VC
CString::LoadString(ID),比较方便。
3.
路径层的概念:有两种方法创建路径层:
 
1
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
  
2
        CSize sz=pDC->GetTextExtent(str);
        CRgn rn;
        rn.CreateRectRgn(0,50,sz.cx,sz.cy);
        pDC->SelectClipRgn(&rn,RGN_DIFF);
路径层有什么作用?可以保护我们先前的文本或者图像不被后来画的覆盖。
4.
View上输入文字的步骤。
CFont font;//
创建字体对象
font.CreatePointFont(300,"
华文行楷",NULL);//设置
CFont *pOldFont=dc.SelectObject(&font);//
将字体选择到DC
TEXTMETRIC tm;//
创建字体信息对象
dc.GetTextMetrics(&tm);//
获得当前字体信息
if(0x0d==nChar)//
处理回车键
{
  m_strLine.Empty();
  m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar)//
处理退格键
{
  COLORREF clr=dc.SetTextColor(dc.GetBkColor());
  dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
  m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
  dc.SetTextColor(clr);
}
else
{
  m_strLine+=nChar;
}
CSize sz=dc.GetTextExtent(m_strLine);

CPoint pt;//处理光标的位置
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;

SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);//
输出字体

dc.SelectObject(pOldFont);//将原先的字体选择回去。
5.
模拟卡啦OK变色的步骤。
  
1)设置定时器
  
2)在定时器中加入如下代码
//DEL  m_nWidth+=5;//
此为view的成员变量,初始值为0
//DEL
//DEL
//DEL  CClientDC dc(this);
//DEL  TEXTMETRIC tm;
//DEL  dc.GetTextMetrics(&tm);
//DEL  CRect rect;
//DEL  rect.left=0;
//DEL  rect.top=200;
//DEL  rect.right=m_nWidth;
//DEL  rect.bottom=rect.top+tm.tmHeight;//
此长方形的长度随着定时器的触发,逐渐增大
//DEL
//DEL  dc.SetTextColor(RGB(255,0,0));
//DEL  CString str;
//DEL  str.LoadString(IDS_WEIXIN);
//DEL  dc.DrawText(str,rect,DT_LEFT);
此函数的作用是将字符串输出到长方形中,但如果字符串的长度超过长方形的长度,多余的字符将被截断
//DEL
//DEL  rect.top=150;
//DEL  rect.bottom=rect.top+tm.tmHeight;
//DEL  dc.DrawText(str,rect,DT_RIGHT);
//DEL
//DEL  CSize sz=dc.GetTextExtent(str);
获得字符串的长度
//DEL  if(m_nWidth>sz.cx)
当长方形的长度大于字符串的长度后,将其重新归0
//DEL  {
//DEL   m_nWidth=0;
//DEL   dc.SetTextColor(RGB(0,255,0));
//DEL   dc.TextOut(0,200,str);
//DEL  }
//DEL
//DEL  CView::OnTimer(nIDEvent);
6.SetTimer
也可以用回调函数来操作,但并不方便。以下是步骤
 
1) 在ViewOnCreate消息响应函数中:SetTimer(1,1000,Timer2Proc);
 
2) 回调函数的实现:
void CALLBACK EXPORT Timer2Proc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT nIDEvent,   // timer identification
   DWORD dwTime    // system time
)
{
//  MessageBox((((CMainFrame *)AfxGetMainWnd())->m_hWnd),"ddfaf","weixin",0);
;
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;//
获得MainFrame的指针
CTextView *pView=(CTextView *)pMain->GetActiveView();//
获得view的指针
CClientDC dc(pView);//
构造DC
  dc.TextOut(333,222,"hello world");

}//我们可以看出,使用回调函数时要获得窗口或者APP的指针,给我们的操作带来麻烦。并不方便。

原创粉丝点击