«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1406622
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]用VC++制作有滚动字幕效果的软件封面
既瑜(224499) 发表于 2005/3/16 19:52:54

在软件启动时,为了加深软件在用户头脑中的印象,可以在软件封面上由下而上循环滚动显示一些包含软件名称、功能、版本、用户名、研制单位等文字信息,在用户按下任意键或点击鼠标键后,立即结束演示进入程序主界面。本文通过向工程中添加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); } ---- 9.在CsplashWnd类的OnTimer中加入以下内容,不断变换文字垂向位置,使具有滚动效果: void CSplashWnd::OnTimer(UINT nIDEvent) { m_nCurPos++; if( m_nCurPos>300 ) { m_nCurPos = 0 ; } Invalidate(TRUE); } 10. 演示软件封面时,隐藏主框架窗口: BOOL CTestApp::InitInstance() { ...... m_pMainWnd->ShowWindow(SW_HIDE); m_pMainWnd->UpdateWindow(); ....... } ---- 11. 在CsplashWnd类中重载WindowProc函数,按任意键或点击鼠标键结束封面演示: LRESULT CSplashWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (c_pSplashWnd) { if (message == WM_KEYDOWN ||message == WM_SYSKEYDOWN || message == WM_LBUTTONDOWN ||message == WM_RBUTTONDOWN || message == WM_MBUTTONDOWN ||message == WM_NCLBUTTONDOWN || message == WM_NCRBUTTONDOWN ||message == WM_NCMBUTTONDOWN) { c_pSplashWnd->HideSplashScreen(); AfxGetMainWnd()->ShowWindow(SW_MAXIMIZE); return TRUE; } } return CWnd::WindowProc(message, wParam, lParam); } ---- 12.重载虚拟函数PostNcDestroy,在封面窗口销毁后释放有关对象: void CSplashWnd::PostNcDestroy() {... // Free the C++ class. m_dcImage.SelectObject(m_pOldBitmap); m_dcText.SelectClipRgn(NULL); m_dcText.SelectObject(m_pOldBitmapText); m_bitmap.DeleteObject(); m_rgn.DeleteObject(); delete this; ...... } ---- 文中程序在Windows98/Visual C++6.0下运行通过。

阅读全文(1813) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.230 second(s), page refreshed 144764662 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号