VC編程中如何在界面上完成3D文字
發(fā)表時間:2024-02-24 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]作者: 劉 濤 一般情況下,程序開發(fā)人員都希望自己的程序美觀大方,為了達(dá)到這一個要求,想盡辦法美化自己的程序,如果在界面上適當(dāng)?shù)牡胤教砑硬@示3D文字,將不失為一個好的選擇,可以達(dá)到事半功倍的效果,本文針對這一問題,通過一個簡單的小程序,介紹如何實(shí)現(xiàn)這一目標(biāo)。有興趣的讀者可以稍加改動,將該方法...
作者: 劉 濤
一般情況下,程序開發(fā)人員都希望自己的程序美觀大方,為了達(dá)到這一個要求,想盡辦法美化自己的程序,如果在界面上適當(dāng)?shù)牡胤教砑硬@示3D文字,將不失為一個好的選擇,可以達(dá)到事半功倍的效果,本文針對這一問題,通過一個簡單的小程序,介紹如何實(shí)現(xiàn)這一目標(biāo)。有興趣的讀者可以稍加改動,將該方法應(yīng)用到自己的程序中去。
首先啟動VC生成一個新的基于對話框的項目,命名為3Dtext,在對話框中重載OnPaint()函數(shù),具體實(shí)現(xiàn)的思想是通過CDC::SetTextColor()分別設(shè)置文字的顏色為高亮(3DHILIGHT)和陰影(3DSHADOW)的狀態(tài)下顯示文字;同時注意在兩次顯示文字時要錯開一個像素,這樣才能達(dá)到預(yù)期的效果。具體實(shí)現(xiàn)代碼如下:
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="電腦報,我們的學(xué)習(xí)報";
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();
}
}