文本编程

如何在客户区显示文本以及如何添加字符串资源。理解路径层的作用。

 

void CTextView::OnDraw(CDC* pDC)     //响应WM_PAINT消息的函数

{

       CTextDoc*pDoc = GetDocument();

       ASSERT_VALID(pDoc);

       //TODO: add draw code for native data here

       CStringstr_one("努力学习C++");

       //CStringstr_two;

       //str_two= "努力学习C++";

       pDC->TextOut(50,50,str_one);

       //pDC->TextOut(50,100,str_two);

 

       CSizesz = pDC->GetTextExtent(str_one);

 

   //1.添加字符串资源

       CStringstr;

       str.LoadString(IDS_STRINGVC);

       pDC->TextOut(0,200,str);

 

       pDC->BeginPath();  //把路径层注释起来就会只显示一个矩形,设置路径层后程序显示与原来的没有什么不同

       pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);

       pDC->EndPath();

 

       pDC->SelectClipPath(RGN_DIFF/*RGN_AND*/);//把当前设置的路径层和设备描述表中已有的裁剪区域按一种指定的模式进行一个互操作

 

       //在路径层中绘制一些网格状线条

       for(inti=0; i<300; i+=10)

       {

              pDC->MoveTo(0,i);

              pDC->LineTo(300,i);

              pDC->MoveTo(i,0);

              pDC->LineTo(i,300);

       }

}

 

 

如何创建一个普通插入符,位图插入符,符合字体大小的插入符,理解窗口边界。

学会怎样设定一个定时器

 

int CTextView::OnCreate(LPCREATESTRUCTlpCreateStruct)

{

       if(CView::OnCreate(lpCreateStruct) == -1)

              return-1;

      

       //intbx = GetSystemMetrics(SM_CXBORDER);

       //intby = GetSystemMetrics(SM_CYBORDER);

       /*CClientDCdc(this);

       TEXTMETRICtm;

       dc.GetTextMetrics(&tm);

       CreateSolidCaret(tm.tmAveCharWidth/5,tm.tmHeight);

       ShowCaret();*/

 

       //1.创建图形插入符

       //CBitmapbitmap;   //发现程序并未如愿显示图形插入符,原因在于这是个局部变量,原因在于OnCreate函数执行

       //完成之后,这个bitmap对象要发生析构。通常,与资源相关联的对象,在其析构时都会把与之相关联的资源销毁。

       //解决办法是把bitmap定义成CTestView类的私有成员变量。

       bitmap.LoadBitmap(IDB_BITMAP1);

       CreateCaret(&bitmap);

       ShowCaret();

       SetTimer(1,100,NULL);  // 设定一个定时器

       return0;

}

 

怎样实现字符的输入,如何选入一种字体。

 

void CTextView::OnChar(UINT nChar, UINTnRepCnt, UINT nFlags)

{

       CClientDCdc(this);

       //选择一种字体

       CFontfont;

       font.CreatePointFont(300,"华文彩云",NULL);

       CFont*pOldFont = dc.SelectObject(&font);

       //选择字体颜色

       //CPenpen(PS_DOT,1,RGB(152,0,0));

       //CPen*pOldPen = dc.SelectObject(&pen);

 

       TEXTMETRICtm;

       dc.GetTextMetrics(&tm);

       if(0x0d== nChar)

       {

              m_strLine.Empty();

              m_ptOrigin.y+= tm.tmHeight;

       }

       elseif(0x08 == nChar)

       {

              COLORREFclr = 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;

       }

       dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

       CSizesz = dc.GetTextExtent(m_strLine);

       CPointpt;

       pt.x= m_ptOrigin.x + sz.cx;

       pt.y= m_ptOrigin.y;

       SetCaretPos(pt);

       dc.SelectObject(pOldFont);  //把字体选回原来设备描述表的默认字体,恢复设备描述表

       //dc.SelectObject(pOldPen);

       CView::OnChar(nChar,nRepCnt, nFlags);

}

 

void CTextView::OnLButtonDown(UINT nFlags,CPoint point)

{

       //TODO: Add your message handler code here and/or call default

       SetCaretPos(point);

       m_strLine.Empty();//变换插入符位置时,清空m_strLine中的字符串,显示新的

       m_ptOrigin= point;

       CView::OnLButtonDown(nFlags,point);

}

 

//字幕变色功能的实现,通过相应定时器的WM_TIMER消息来实现

 

void CTextView::OnTimer(UINT nIDEvent)

{

       //TODO: Add your message handler code here and/or call default

       m_nWidth+= 5;

 

       CClientDCdc(this);

       TEXTMETRICtm;

       dc.GetTextMetrics(&tm);

       CRectrect;

       rect.left= 0;

       rect.top= 200;

       rect.right= m_nWidth;

       rect.bottom= rect.top + tm.tmHeight;

 

       dc.SetTextColor(RGB(255,0,0));

       CStringstr;

   str.LoadString(IDS_STRINGVC);

       dc.DrawText(str,rect,DT_LEFT);  //换成DT_RIGHT,DT_CENTER,DT_BOTTOM试试看

 

   rect.top = 150;

       rect.bottom= rect.top + tm.tmHeight;

       dc.DrawText(str,rect,DT_RIGHT);

 

       CSizesz = dc.GetTextExtent(str);

       if(m_nWidth> sz.cx)

       {

              m_nWidth= 0;

              dc.SetTextColor(RGB(0,255,0));

              dc.TextOut(0,200,str);

       }

       CView::OnTimer(nIDEvent);

}

 

谨记:

1.       对一个变量进行自加自减时一定要初始化,不然他的初始值是未知的,结果是不正确的。

2.       通过学习这些知识希望能够拓宽编程的思路,培养发散性思维方式,对于一个问题的解决,要从多个方面考虑,而不要陷入固定的思维模式中

PLC结构化文本编程(Structured Text Programming for PLCs)是一种针对可编程逻辑控制器(PLC)的编程方法。它采用了一种类似于高级编程语言的结构化方式,并使用了控制逻辑方程、函数块、变量等现代化的编程范式,以实现更加可读性强,易于维护和重构的PLC程序。PLC结构化文本编程可以使得使用这种方法进行编程的人员能够更加容易地理解和掌握PLC的编程流程和逻辑,从而能够更加高效地进行程序的开发和维护。 PLC结构化文本编程的最大优势在于它的结构化。PLC编程的本质是控制逻辑的编写,而这种编程方法可以使得控制逻辑的编写变得更加简单和易于理解。另外,PLC结构化文本编程也可以降低PLC程序的错误率,从而更加可靠。由于此方法可以将程序模块化,因此使得程序的可读性变得更加强,也使得错误更容易被定位。 PLC结构化文本编程可以应用于不同大小的PLC程序。不同于嵌入式系统,PLC程序往往较小,应用软件的成本相对较高。因此,对于PLC编程而言,尽可能地提高编写效率和质量是非常重要的。 在PLC结构化文本编程方面的专业知识和技能要求并不高,只需要基础的编程知识和PLC编程的经验。PLC结构化文本编程是一种简单、易于学习的方法,它可以缩短PLC编程的时间和降低PLC的使用成本,因此在PLC编程的过程中,这种方法是非常值得掌握的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值