满意的回答
lgnosa
推荐使用2016.10.01
通过率: 59%等级: 11
帮助: 4654人
软件启动时,为了在用户脑海中加深软件形象,在软件封面上自下而上滚动显示软件名称、功能、版本、用户名、研发公司等文字信息,用户按任意键或妈妈在本文中,软件具有滚动效果,可通过将Splash screen组件添加到项目中并将DrawText成员添加到CsplashWnd类中来控制字符的位置、对齐方式、字体、大小和颜色
---详细的设计步骤如下。
----1 .创建名为test的SDI或MDI项目;
---- 2 .将Splash screen组件添加到项目中。 即,添加CWnd类的派生类CsplashWnd;
---- 3 .编辑或导入软件覆盖的位图资源。 识别号码为IDB_SPLASH;
----4 .将公共成员函数DrawText添加到csplashwnd类中。 此函数用于在软件封面上显示文本。 的实现代码如下: (
voidcsplashwnd :3360 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.createfontindirect(lf;
CFont *pOldFont=(CFont * )
PDC -选择对象(字体;
单元old align,uAlign;
交换机(n align ) )。
{
case 0: u align=ta _ left|ta _ top; 布雷克;
case 1: u align=ta _ center|ta _ top; 布雷克;
case 2: u align=ta _ right|ta _ top; 布雷克;
d fault : u align=ta _ left|ta _ top; 布雷克;
}
old align=PDC-settext align (u align );
intoldmode=PDC-setb kmode (传输);
in told color=PDC-settext color (Cr text color );
PDC-textout(x,y,sText );
PDC-settextcolor(oldcolor );
PDC-settextalign(Oldalign;
PDC-setb kmode (old模式;
PDC-select object (轮询字体;
font.DeleteObject (;
}
----5 .将以下公共成员变量添加到csplashwnd类中并初始化变量:
class csplashwnd :公共cwnd
{
.
公共:
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中:
#definetitlecolorRGB(0、0、255 )//默认标题颜色
# definecontentcolorrgb (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 (
{
caintDCDC(this;
位图Bm;
m_bitmap.getbitmap(BM;
静态bool b first=true; //
指示是否首次绘制窗口
if(bfirst ) ) )。
{
if (! m _ DC image.createcompatibledc (DC ) ) return;
m _ p oldbitmap=m _ DC image.select object (m _ bitmap );
if (! m_DCtext.createcompatibledc(DC ) ) return;
m_pBitmap=new CBitmap;
int nbitcount=m _ DC text.getdevicecaps (bits pixel;
m_pBitmap-CreateBitmap
(bm.bmWidth,bm.bmHeight,1,nBitCount,NULL );
m _ poldbitmaptext=m _ DC text.select object (m _ pbitmap );
m _ rgn.createrectrgn (m _ text rect.left,m_TextRect.top,
m_TextRect.right,m_TextRect.bottom;
bFirst=FALSE;
}
m_DCtext.selectcliprgn(null;
m _ DC text.bitblt (0,0,bm.bmWidth,
bm.bmHeight,m_dcImage,0,0,SRCCOPY;
m_DCtext.selectcliprgn(m_rgn;
int nBasex=m_TextRect.left;
intnbasey=m _ text rect.bottom-m _ n curpos;
intn midx=m _ text rect.leftm _ text rect.width ()/2;
drawtext(m_DCtext,nMidx,nBasey,1,
'楷体_GB2312 ',FONTSIZE0 5,TITLECOLOR,'研发单位';
drawtext(m_DCtext,nMidx,NBA sey 30,1,
'楷体_GB2312 ',FONTSIZE0,CONTENTCOLOR,
“武警指挥学院仿真中心”
drawtext(m_DCtext,nMidx,NBA sey 50,1,
'楷体_GB2312 ',字体0,标题颜色,'邮政编码';
drawtext(m_DCtext,nMidx,NBA sey 70,1,
'楷体_GB2312 ',FONTSIZE0,CONTENTCOLOR,' 300350 ';
DC.bitblt (0,0,bm.bmWidth,
bm.bmHeight,m_dcText,0,0,SRCCOPY;
}
30共享举报