📄 subject_39486.htm
字号:
<p>
序号:39486 发表者:萧一郎 发表日期:2003-05-11 14:09:28
<br>主题:请教:怎么做程序开启屏幕啊
<br>内容:就是因为我的程序开始运行较慢,我想设计一个开启画面,要怎么来实现啊!<BR>哪位能提供给我一个源程序啊?<BR>谢谢了先!<BR>另外最好开启画面能够显示程序相关信息,如版本,作者,支持网站超级联结什么的!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:Justin Le 回复日期:2003-05-11 14:31:49
<br>内容:这个可以<BR><BR><BR>---- 在软件启动时,为了加深软件在用户头脑中的印象,可以在软件封面上由下而上循环滚动显示一些包含软件名称、功能、版本、用户名、研制单位等文字信息,在用户按下任意键或点击鼠标键后,立即结束演示进入程序主界面。本文通过向工程中添加Splash screen组件,然后在CsplashWnd类中添加DrawText成员函数方便地实现了具有滚动文字效果的软件封面,其中文字的位置、对齐方式、字体、字号、颜色都由程序来控制。 <BR><BR>---- 详细设计步骤如下: <BR><BR>---- 1.创建一个名为test的SDI或MDI工程; <BR><BR>---- 2.向工程中添加Splash screen组件,即添加一个CWnd类的派生类CsplashWnd; <BR><BR>---- 3.编辑或导入软件封面的位图资源,标识号为IDB_SPLASH; <BR><BR>---- 4.向CsplashWnd类中添加一个公有成员函数DrawText,此函数用来在软件封面中显示文字,函数的实现代码如下:(其中参数含义分别为:内存dc,文字位置,对齐方式,字体,字号,颜色,正文文字) <BR><BR>void CSplashWnd::DrawText(CDC *pDC,<BR>int x, int y, int nAlign,<BR>CString sFontName, int nFONTSIZE0,<BR>COLORREF crTextColor, CString sText)<BR>{<BR> LOGFONT lf;//字体<BR> lf.lfStrikeOut=0;//删除线<BR> lf.lfCharSet = DEFAULT_CHARSET ;//字符集<BR> lf.lfEscapement =0;//角度<BR> lf.lfItalic = 0 ;//倾斜<BR> lf.lfUnderline = 0 ;//下划线<BR> lf.lfHeight = nFONTSIZE0 ;//字号<BR><BR> strcpy(lf.lfFaceName,sFaceName.<BR> GetBuffer(sFontName.GetLength()));<BR> CFont font ;<BR> font.CreateFontIndirect(&lf);<BR> CFont *pOldFont = (CFont *)<BR> pDC->SelectObject(&font);<BR> UINT oldAlign,uAlign ;<BR> switch(nAlign)<BR> {<BR> case 0: uAlign = TA_LEFT | TA_TOP ; break;<BR> case 1: uAlign = TA_CENTER | TA_TOP; break;<BR> case 2: uAlign = TA_RIGHT | TA_TOP ; break; <BR> default: uAlign = TA_LEFT | TA_TOP ; break;<BR> }<BR> oldAlign = pDC->SetTextAlign(uAlign);<BR> int oldMode = pDC->SetBkMode(TRANSPARENT);<BR> int oldColor = pDC->SetTextColor(crTextColor) ;<BR> pDC->TextOut(x,y,sText);<BR><BR> pDC->SetTextColor(oldColor) ;<BR> pDC->SetTextAlign(oldAlign);<BR> pDC->SetBkMode(oldMode);<BR> pDC->SelectObject(pOldFont);<BR> font.DeleteObject();<BR>}<BR><BR>---- 5. 给CsplashWnd类中添加如下公有成员变量,并初始化变量; <BR>class CSplashWnd : public CWnd<BR>{<BR>......<BR>public:<BR> CDC m_dcText,m_dcImage;//显示dc的兼容内存dc<BR> CBitmap* m_pBitmap;//位图对象指针<BR> CBitmap* m_pOldBitmapText,<BR> *m_pOldBitmap;//跟踪内存dc中的原位图<BR> CRgn m_rgn;//用于生成矩形区域<BR> CRect m_TextRect ;//显示文字的矩形区域<BR> int m_nCurPos ;//文字当前位置<BR>......<BR>}<BR><BR>CSplashWnd::CSplashWnd()<BR>{......<BR> m_nCurPos = 50 ;<BR>......<BR>}<BR>---- 6.在SPLASH.CPP中加入以下预定义命令: <BR>#define TITLECOLOR RGB(0,0,255)//默认标题颜色<BR>#define CONTENTCOLOR RGB(0,255,255)//默认说明文字颜色<BR>#define FONTSIZE0 15 //默认字号<BR><BR>---- 7. 在CsplashWnd类Create函数中拷贝矩形区域到m_TextRect ; <BR>BOOL CSplashWnd::Create<BR>(CWnd* pParentWnd /*= NULL*/)<BR>{......<BR> m_TextRect.CopyRect<BR> (&CRect(50,100,500,300));<BR>......<BR>}<BR><BR><BR>---- 8. 在CsplashWnd类的成员函数OnPaint中添加代码,响应显示窗口时发送的WM_PAINT消息。 <BR>void CSplashWnd::OnPaint()<BR>{<BR> CPaintDC dc(this);<BR> BITMAP bm;<BR> m_bitmap.GetBitmap(&bm);<BR> static BOOL bFirst = TRUE;//<BR> 指示是否第一次绘制窗口<BR> if(bFirst)<BR> {<BR>if (!m_dcImage.CreateCompatibleDC(&dc)) return;<BR>m_pOldBitmap = m_dcImage.SelectObject(&m_bitmap); <BR>if (!m_dcText.CreateCompatibleDC(&dc)) return;<BR>m_pBitmap = new CBitmap ;<BR>int nBitCount = m_dcText.GetDeviceCaps(BITSPIXEL);<BR>m_pBitmap->CreateBitmap<BR>(bm.bmWidth,bm.bmHeight,1,nBitCount,NULL);<BR>m_pOldBitmapText = m_dcText.SelectObject(m_pBitmap);<BR>m_rgn.CreateRectRgn(m_TextRect.left,m_TextRect.top,<BR>m_TextRect.right,m_TextRect.bottom);<BR> bFirst = FALSE;<BR> }<BR> m_dcText.SelectClipRgn(NULL);<BR> m_dcText.BitBlt(0, 0, bm.bmWidth, <BR> bm.bmHeight,&m_dcImage, 0, 0, SRCCOPY);<BR> m_dcText.SelectClipRgn(&m_rgn);<BR> int nBasex = m_TextRect.left ; <BR> int nBasey = m_TextRect.bottom-m_nCurPos; <BR> int nMidx = m_TextRect.left + m_TextRect.Width()/2 ;<BR><BR> DrawText(&m_dcText,nMidx,nBasey, 1,<BR>"楷体_GB2312", FONTSIZE0+5,TITLECOLOR,"研制单位");<BR>DrawText(&m_dcText,nMidx,nBasey+30, 1,<BR>"楷体_GB2312", FONTSIZE0,CONTENTCOLOR,<BR>"武警指挥学院模拟中心");<BR>DrawText(&m_dcText,nMidx,nBasey+50, 1,<BR>"楷体_GB2312", FONTSIZE0,TITLECOLOR,"邮政编码");<BR>DrawText(&m_dcText,nMidx,nBasey+70, 1,<BR>"楷体_GB2312", FONTSIZE0,CONTENTCOLOR,"300350");<BR>dc.BitBlt(0, 0, bm.bmWidth, <BR>bm.bmHeight,&m_dcText, 0,0, SRCCOPY);<BR>}<BR><BR>---- 9.在CsplashWnd类的OnTimer中加入以下内容,不断变换文字垂向位置,使具有滚动效果: <BR>void CSplashWnd::OnTimer(UINT nIDEvent)<BR>{<BR> m_nCurPos++;<BR> if( m_nCurPos>300 )<BR> { m_nCurPos = 0 ;<BR> }<BR> Invalidate(TRUE);<BR>}<BR><BR>10. 演示软件封面时,隐藏主框架窗口:<BR>BOOL CTestApp::InitInstance()<BR>{<BR>......<BR> m_pMainWnd->ShowWindow(SW_HIDE);<BR> m_pMainWnd->UpdateWindow();<BR> .......<BR>}<BR>---- 11. 在CsplashWnd类中重载WindowProc函数,按任意键或点击鼠标键结束封面演示: <BR>LRESULT CSplashWnd::WindowProc(UINT <BR>message, WPARAM wParam, LPARAM lParam) <BR>{<BR> if (c_pSplashWnd)<BR> {<BR>if (message == WM_KEYDOWN ||message == WM_SYSKEYDOWN ||<BR>message == WM_LBUTTONDOWN ||message == WM_RBUTTONDOWN ||<BR>message == WM_MBUTTONDOWN ||message == WM_NCLBUTTONDOWN ||<BR>message == WM_NCRBUTTONDOWN ||message == WM_NCMBUTTONDOWN)<BR> {<BR>c_pSplashWnd->HideSplashScreen();<BR>AfxGetMainWnd()->ShowWindow(SW_MAXIMIZE);<BR>return TRUE; <BR> }<BR> <BR> }<BR>return CWnd::WindowProc(message, wParam, lParam);<BR>}<BR><BR>---- 12.重载虚拟函数PostNcDestroy,在封面窗口销毁后释放有关对象: <BR>void CSplashWnd::PostNcDestroy()<BR>{...<BR> // Free the C++ class.<BR> m_dcImage.SelectObject(m_pOldBitmap);<BR> m_dcText.SelectClipRgn(NULL);<BR> m_dcText.SelectObject(m_pOldBitmapText);<BR> m_bitmap.DeleteObject();<BR> m_rgn.DeleteObject();<BR> delete this;<BR>......<BR>}<BR>---- 文中程序在Windows98/Visual C++6.0下运行通过。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧一郎 回复日期:2003-05-11 21:16:15
<br>内容:c_pSplashWnd<BR>是在哪里定义的?<BR>c_pSplashWnd->HideSplashScreen();<BR>又是什么类的函数啊?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧一郎 回复日期:2003-05-11 21:58:06
<br>内容:怎么我关闭了开启画面,主框架窗口没有显示出来啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧一郎 回复日期:2003-05-11 22:10:10
<br>内容:问题解决了,谢谢了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -