c语言扔球第一次弹10米,c语言滚动字幕代码
滿意答案
lgnosa
推薦于 2016.10.01
采納率:59%????等級:11
已幫助:4654人
在軟件啟動時,為了加深軟件在用戶頭腦中的印象,可以在軟件封面上由下而上循環滾動顯示一些包含軟件名稱、功能、版本、用戶名、研制單位等文字信息,在用戶按下任意鍵或點擊鼠標鍵后,立即結束演示進入程序主界面。本文通過向工程中添加Splash screen組件,然后在CsplashWnd類中添加DrawText成員方便地實現了具有滾動文字效果的軟件封面,其中文字的位置、對齊方式、字體、字號、顏色都由程序來控制。
---- 詳細設計步驟如下:
---- 1.創建一個名為test的SDI或MDI工程;
---- 2.向工程中添加Splash screen組件,即添加一個CWnd類的派生類CsplashWnd;
---- 3.編輯或導入軟件封面的位圖資源,標識號為IDB_SPLASH;
---- 4.向CsplashWnd類中添加一個公有成員函數DrawText,此函數用來在軟件封面中顯示文字,的實現代碼如下:(其中參數含義分別為:內存dc,文字位置,對齊方式,字體,字號,顏色,正文文字)
void CSplashWnd::DrawText(CDC *pDC,
int x, int y, int nAlign,
CString sFontName, int nFONTSIZE0,
COLORREF crTextColor, CString sText)
{
LOGFONT lf;//字體
lf.lfStrikeOut=0;//刪除線
lf.lfCharSet = DEFAULT_CHARSET ;//字符集
lf.lfEscapement =0;//角度
lf.lfItalic = 0 ;//傾斜
lf.lfUnderline = 0 ;//下劃線
lf.lfHeight = nFONTSIZE0 ;//字號
strcpy(lf.lfFaceName,sFaceName.
GetBuffer(sFontName.GetLength()));
CFont font ;
font.CreateFontIndirect(&lf);
CFont *pOldFont = (CFont *)
pDC->SelectObject(&font);
UINT oldAlign,uAlign ;
switch(nAlign)
{
case 0: uAlign = TA_LEFT | TA_TOP ; break;
case 1: uAlign = TA_CENTER | TA_TOP; break;
case 2: uAlign = TA_RIGHT | TA_TOP ; break;
default: uAlign = TA_LEFT | TA_TOP ; break;
}
oldAlign = pDC->SetTextAlign(uAlign);
int oldMode = pDC->SetBkMode(TRANSPARENT);
int oldColor = pDC->SetTextColor(crTextColor) ;
pDC->TextOut(x,y,sText);
pDC->SetTextColor(oldColor) ;
pDC->SetTextAlign(oldAlign);
pDC->SetBkMode(oldMode);
pDC->SelectObject(pOldFont);
font.DeleteObject();
}
---- 5. 給CsplashWnd類中添加如下公有成員變量,并初始化變量;
class CSplashWnd : public CWnd
{
......
public:
CDC m_dcText,m_dcImage;//顯示dc的兼容內存dc
CBitmap* m_pBitmap;//位圖對象
CBitmap* m_pOldBitmapText,
*m_pOldBitmap;//跟蹤內存dc中的原位圖
CRgn m_rgn;//用于生成矩形區域
CRect m_TextRect ;//顯示文字的矩形區域
int m_nCurPos ;//文字當前位置
......
}
CSplashWnd::CSplashWnd()
{......
m_nCurPos = 50 ;
......
}
---- 6.在SPLASH.CPP中加入以下預定義命令:
#define TITLECOLOR RGB(0,0,255)//默認標題顏色
#define CONTENTCOLOR RGB(0,255,255)//默認說明文字顏色
#define FONTSIZE0 15 //默認字號
---- 7. 在CsplashWnd類Create中拷貝矩形區域到m_TextRect ;
BOOL CSplashWnd::Create
(CWnd* pParentWnd /*= NULL*/)
{......
m_TextRect.CopyRect
(&CRect(50,100,500,300));
......
}
---- 8. 在CsplashWnd類的成員OnPaint中添加代碼,響應顯示窗口時發送的WM_PAINT消息。
void CSplashWnd::OnPaint()
{
CPaintDC dc(this);
BITMAP bm;
m_bitmap.GetBitmap(&bm);
static BOOL bFirst = TRUE;//
指示是否第一次繪制窗口
if(bFirst)
{
if (!m_dcImage.CreateCompatibleDC(&dc)) return;
m_pOldBitmap = m_dcImage.SelectObject(&m_bitmap);
if (!m_dcText.CreateCompatibleDC(&dc)) return;
m_pBitmap = new CBitmap ;
int nBitCount = m_dcText.GetDeviceCaps(BITSPIXEL);
m_pBitmap->CreateBitmap
(bm.bmWidth,bm.bmHeight,1,nBitCount,NULL);
m_pOldBitmapText = m_dcText.SelectObject(m_pBitmap);
m_rgn.CreateRectRgn(m_TextRect.left,m_TextRect.top,
m_TextRect.right,m_TextRect.bottom);
bFirst = FALSE;
}
m_dcText.SelectClipRgn(NULL);
m_dcText.BitBlt(0, 0, bm.bmWidth,
bm.bmHeight,&m_dcImage, 0, 0, SRCCOPY);
m_dcText.SelectClipRgn(&m_rgn);
int nBasex = m_TextRect.left ;
int nBasey = m_TextRect.bottom-m_nCurPos;
int nMidx = m_TextRect.left + m_TextRect.Width()/2 ;
DrawText(&m_dcText,nMidx,nBasey, 1,
"楷體_GB2312", FONTSIZE0+5,TITLECOLOR,"研制單位");
DrawText(&m_dcText,nMidx,nBasey+30, 1,
"楷體_GB2312", FONTSIZE0,CONTENTCOLOR,
"武警指揮學院模擬中心");
DrawText(&m_dcText,nMidx,nBasey+50, 1,
"楷體_GB2312", FONTSIZE0,TITLECOLOR,"郵政編碼");
DrawText(&m_dcText,nMidx,nBasey+70, 1,
"楷體_GB2312", FONTSIZE0,CONTENTCOLOR,"300350");
dc.BitBlt(0, 0, bm.bmWidth,
bm.bmHeight,&m_dcText, 0,0, SRCCOPY);
}
30分享舉報
總結
以上是生活随笔為你收集整理的c语言扔球第一次弹10米,c语言滚动字幕代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用selenium实现前程无忧简历自动
- 下一篇: js 获取当前是这个年份的第几周+获取这