⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_39486.htm

📁 一些关于vc的问答
💻 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>&nbsp;&nbsp;&nbsp;&nbsp;LOGFONT lf;//字体<BR>&nbsp;&nbsp;&nbsp;&nbsp;lf.lfStrikeOut=0;//删除线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lf.lfCharSet = DEFAULT_CHARSET ;//字符集<BR>&nbsp;&nbsp;&nbsp;&nbsp;lf.lfEscapement =0;//角度<BR>&nbsp;&nbsp;&nbsp;&nbsp;lf.lfItalic = 0 ;//倾斜<BR>&nbsp;&nbsp;&nbsp;&nbsp;lf.lfUnderline = 0 ;//下划线<BR>&nbsp;&nbsp;&nbsp;&nbsp;lf.lfHeight = nFONTSIZE0 ;//字号<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(lf.lfFaceName,sFaceName.<BR>&nbsp;&nbsp;&nbsp;&nbsp;GetBuffer(sFontName.GetLength()));<BR>&nbsp;&nbsp;&nbsp;&nbsp;CFont font ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;font.CreateFontIndirect(&amp;lf);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CFont *pOldFont = (CFont *)<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SelectObject(&amp;font);<BR>&nbsp;&nbsp;&nbsp;&nbsp;UINT oldAlign,uAlign ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;switch(nAlign)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 0: uAlign = TA_LEFT | TA_TOP ; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 1: uAlign = TA_CENTER | TA_TOP; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 2: uAlign = TA_RIGHT&nbsp;&nbsp;| TA_TOP ; break; <BR>&nbsp;&nbsp;&nbsp;&nbsp;default: uAlign = TA_LEFT | TA_TOP ; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;oldAlign = pDC-&gt;SetTextAlign(uAlign);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;oldMode =&nbsp;&nbsp;pDC-&gt;SetBkMode(TRANSPARENT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;oldColor = pDC-&gt;SetTextColor(crTextColor) ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;TextOut(x,y,sText);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetTextColor(oldColor) ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetTextAlign(oldAlign);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetBkMode(oldMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SelectObject(pOldFont);<BR>&nbsp;&nbsp;&nbsp;&nbsp;font.DeleteObject();<BR>}<BR><BR>---- 5. 给CsplashWnd类中添加如下公有成员变量,并初始化变量; <BR>class CSplashWnd : public CWnd<BR>{<BR>......<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC m_dcText,m_dcImage;//显示dc的兼容内存dc<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* m_pBitmap;//位图对象指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* m_pOldBitmapText,<BR>&nbsp;&nbsp;&nbsp;&nbsp;*m_pOldBitmap;//跟踪内存dc中的原位图<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRgn m_rgn;//用于生成矩形区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;&nbsp; m_TextRect ;//显示文字的矩形区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; m_nCurPos&nbsp;&nbsp;;//文字当前位置<BR>......<BR>}<BR><BR>CSplashWnd::CSplashWnd()<BR>{......<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_nCurPos = 50 ;<BR>......<BR>}<BR>---- 6.在SPLASH.CPP中加入以下预定义命令: <BR>#define&nbsp;&nbsp;&nbsp;&nbsp; TITLECOLOR&nbsp;&nbsp;&nbsp;&nbsp;RGB(0,0,255)//默认标题颜色<BR>#define&nbsp;&nbsp;CONTENTCOLOR&nbsp;&nbsp;RGB(0,255,255)//默认说明文字颜色<BR>#define&nbsp;&nbsp;FONTSIZE0&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp; //默认字号<BR><BR>---- 7. 在CsplashWnd类Create函数中拷贝矩形区域到m_TextRect ; <BR>BOOL CSplashWnd::Create<BR>(CWnd* pParentWnd /*= NULL*/)<BR>{......<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_TextRect.CopyRect<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&amp;CRect(50,100,500,300));<BR>......<BR>}<BR><BR><BR>---- 8. 在CsplashWnd类的成员函数OnPaint中添加代码,响应显示窗口时发送的WM_PAINT消息。 <BR>void CSplashWnd::OnPaint()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;BITMAP bm;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_bitmap.GetBitmap(&amp;bm);<BR>&nbsp;&nbsp;&nbsp;&nbsp;static BOOL bFirst = TRUE;//<BR>&nbsp;&nbsp;&nbsp;&nbsp;指示是否第一次绘制窗口<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(bFirst)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>if (!m_dcImage.CreateCompatibleDC(&amp;dc))&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>m_pOldBitmap = m_dcImage.SelectObject(&amp;m_bitmap);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>if (!m_dcText.CreateCompatibleDC(&amp;dc))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>m_pBitmap = new CBitmap ;<BR>int nBitCount = m_dcText.GetDeviceCaps(BITSPIXEL);<BR>m_pBitmap-&gt;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFirst = FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dcText.SelectClipRgn(NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dcText.BitBlt(0, 0, bm.bmWidth, <BR>&nbsp;&nbsp;&nbsp;&nbsp;bm.bmHeight,&amp;m_dcImage, 0, 0, SRCCOPY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dcText.SelectClipRgn(&amp;m_rgn);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int nBasex = m_TextRect.left ; <BR>&nbsp;&nbsp;&nbsp;&nbsp;int nBasey = m_TextRect.bottom-m_nCurPos; <BR>&nbsp;&nbsp;&nbsp;&nbsp;int nMidx = m_TextRect.left + m_TextRect.Width()/2 ;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;DrawText(&amp;m_dcText,nMidx,nBasey, 1,<BR>"楷体_GB2312", FONTSIZE0+5,TITLECOLOR,"研制单位");<BR>DrawText(&amp;m_dcText,nMidx,nBasey+30, 1,<BR>"楷体_GB2312", FONTSIZE0,CONTENTCOLOR,<BR>"武警指挥学院模拟中心");<BR>DrawText(&amp;m_dcText,nMidx,nBasey+50, 1,<BR>"楷体_GB2312", FONTSIZE0,TITLECOLOR,"邮政编码");<BR>DrawText(&amp;m_dcText,nMidx,nBasey+70, 1,<BR>"楷体_GB2312", FONTSIZE0,CONTENTCOLOR,"300350");<BR>dc.BitBlt(0, 0, bm.bmWidth, <BR>bm.bmHeight,&amp;m_dcText, 0,0, SRCCOPY);<BR>}<BR><BR>---- 9.在CsplashWnd类的OnTimer中加入以下内容,不断变换文字垂向位置,使具有滚动效果: <BR>void CSplashWnd::OnTimer(UINT nIDEvent)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_nCurPos++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if( m_nCurPos&gt;300 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nCurPos = 0 ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;Invalidate(TRUE);<BR>}<BR><BR>10. 演示软件封面时,隐藏主框架窗口:<BR>BOOL CTestApp::InitInstance()<BR>{<BR>......<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pMainWnd-&gt;ShowWindow(SW_HIDE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pMainWnd-&gt;UpdateWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;.......<BR>}<BR>---- 11. 在CsplashWnd类中重载WindowProc函数,按任意键或点击鼠标键结束封面演示: <BR>LRESULT CSplashWnd::WindowProc(UINT <BR>message, WPARAM wParam, LPARAM lParam) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (c_pSplashWnd)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>c_pSplashWnd-&gt;HideSplashScreen();<BR>AfxGetMainWnd()-&gt;ShowWindow(SW_MAXIMIZE);<BR>return TRUE;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>return CWnd::WindowProc(message, wParam, lParam);<BR>}<BR><BR>---- 12.重载虚拟函数PostNcDestroy,在封面窗口销毁后释放有关对象: <BR>void CSplashWnd::PostNcDestroy()<BR>{...<BR>&nbsp;&nbsp;&nbsp;&nbsp;// Free the C++ class.<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dcImage.SelectObject(m_pOldBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dcText.SelectClipRgn(NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dcText.SelectObject(m_pOldBitmapText);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_bitmap.DeleteObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_rgn.DeleteObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;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-&gt;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 + -