以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  OpenGL学习之二:在界面上显示3D文字  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=87484)


--  作者:葛靖青001
--  发布时间:11/5/2010 11:13:00 AM

--  OpenGL学习之二:在界面上显示3D文字
首先启动VC生成一个新的基于对话框的项目,命名为3Dtext,在对话框中重载OnPaint()函数,具体实现的思想是通过CDC::SetTextColor()分别设置文字的颜色为高亮(3DHILIGHT)和阴影(3DSHADOW)的状态下显示文字;同时注意在两次显示文字时要错开一个像素,这样才能达到预期的效果。具体实现代码如下:

  void CMy3DTextDlg::OnPaint()

  { if (IsIconic())

  {

  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Center icon in client rectangle

  int cxIcon = GetSystemMetrics(SM_CXICON);

  int cyIcon = GetSystemMetrics(SM_CYICON);

  CRect rect;

  GetClientRect(&rect);

  int x = (rect.Width() - cxIcon + 1) / 2;

  int y = (rect.Height() - cyIcon + 1) / 2;

  // Draw the icon

  dc.DrawIcon(x, y, m_hIcon);

  }

  else

  {

  CPaintDC dc(this); // device context for painting

  CString string;

  string="电脑报,我们的学习报";

  CFont m_fontLogo;

  m_fontLogo.CreateFont(44, 0, 0, 0, 55, FALSE, FALSE,0,0,0,0,0,0, "Arial");

  dc.SetBkMode(TRANSPARENT);

  CRect rectText;

  GetClientRect(&rectText);

  CFont * OldFont = dc.SelectObject(&m_fontLogo);

  // draw text in DC

  COLORREF OldColor = dc.SetTextColor( ::GetSysColor( COLOR_3DHILIGHT));

  dc.DrawText( string, rectText+CPoint(1,1) , DT_SINGLELINE | DT_LEFT | DT_VCENTER|DT_CENTER);

  dc.SetTextColor( ::GetSysColor( COLOR_3DSHADOW));

  dc.DrawText( string, rectText, DT_SINGLELINE | DT_LEFT | DT_VCENTER|DT_CENTER);

  // restore old text color

  dc.SetTextColor( OldColor);

  // restore old font

  dc.SelectObject(OldFont);

  // CDialog::OnPaint();

  }

  }


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms