作者: 劉 濤
一般情況下,程序開發人員都希望自己的程序美觀大方,為了達到這一個要求,想盡辦法美化自己的程序,如果在界面上適當的地方添加并顯示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(); } }
|