第5课文本编程

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,剪切区域与路径层概念,窗口在重绘时只会重绘剪切区域中的内容

BOOL BeginPath( );//CDC中函数

 

//在这作图定义路径层剪切区域

 

BOOL EndPath( );

 

BOOL SelectClipPath( int nMode );//调用这个函数来使当前路径层剪切区域与新剪切区域进行互操作。  

 

//在这覆盖作图(包含前定义的路径层区域)定义新的剪切区域

 

说明:

 

1)SelectClipPath Selects the current path as a clipping region for thedevice context, combining the new region with any existing clipping region byusing the specified mode. The device context identified must contain a closedpath.

 

2)应用:当作图的时候,如果想要在整幅图形其中的某个部分和其它部分有所区别,我们可以把这部分图形放到路径层当中,然后指定调用指定互操作模式调用SelectClipPath( int nMode )函数来使路径层和覆盖在其上新绘图剪切区域进行互操作,达到特殊效果。

 

 

 

4.路径层的概念:有两种方法创建路径层:

  (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);

路径层有什么作用?可以保护我们先前的文本或者图像不被后来画的覆盖。

5,CPoint对象可以赋值为0

 

6,VC6.0可以 m_str+=nChar;

 VS2008中要用 

       CString   a;

       a.Format(_T("%c "),   nChar);

       m_str+=a;

 

7.在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;

 }

 elseif(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); CPointpt;//处理光标的位置

 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);//将原先的字体选择回去。

 

8.模拟卡啦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);

 

9.SetTimer也可以用回调函数来操作,但并不方便。以下是步骤

  (1)在View的OnCreate消息响应函数中:SetTimer(1,1000,Timer2Proc);

  (2)回调函数的实现:

void CALLBACK EXPORT Timer2Proc(

  HWND hWnd,      // handle of CWndthat called SetTimer

  UINT nMsg,      // WM_TIMER

  UINT nIDEvent,   // timeridentification

  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的指针,给我们的操作带来麻烦。并不方便。


你可能感兴趣的:(第5课文本编程)