失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c语言扔球第一次弹10米 c语言滚动字幕代码

c语言扔球第一次弹10米 c语言滚动字幕代码

时间:2020-08-27 08:38:51

相关推荐

c语言扔球第一次弹10米 c语言滚动字幕代码

满意答案

lgnosa

推荐于 .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语言滚动字幕代码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。