VC编程中如何在界面上实现3D文字

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

作者: 刘 涛

一般情况下,程序开发人员都希望自己的程序美观大方,为了达到这一个要求,想尽办法美化自己的程序,如果在界面上适当的地方添加并显示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();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航