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

📄 vctip4.html

📁 一些关于vc编程技巧的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<p><font SIZE="+0" FACE="Times New Roman">CStatusBar * pStatusBar =</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">(CStatusBar *) AfxGetMainWnd ( ) </font>—<fontFACE="Times New Roman">&gt; GetDescendantWindow</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">(AFX_IDW_STUTUS_BAR);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Get pointer to toolbar .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CToolBar * pToolBar =</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">(CToolBar * ) AfxGetMainWnd ( ) </font>—<fontFACE="Times New Roman">&gt; GetDescendantWindow (AFX_IDW_TOOLBAR);</font></font> </p><p><a NAME="tip28"></a><b><font SIZE="+2"><font FACE="Times New Roman">28</font><fontFACE="黑体">、如何使能和禁止工具条的工具提示</font></font></b> </p><p><font SIZE="+0">如果设置了<font FACE="Times New Roman">CBRS_TOOLTIPS</font>风格位,工具条将显示工具提示,要使能或者禁止</font> </p><p><font SIZE="+0">工具提示,需要设置或者清除该风格位。下例通过调用<fontFACE="Times New Roman">CControlBar : : GetBarStyle</font></font> </p><p><font SIZE="+0">和<font FACE="Times New Roman">CControlBar : : SetBarStyle</font>建立一个完成此功能的成员函数:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMainFrame : : EnableToolTips ( BOOL bDisplayTips )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT_VALID (m_wndToolBar);</font> </p><p><font SIZE="+0" FACE="Times New Roman">DWORD dwStyle = m _wndToolBar.GetBarStyle ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (bDisplayTips)</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">dwStyle </font>|<fontFACE="Times New Roman">=CBRS_TOOLTIPS ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">else</font> </p><p><font SIZE="+0" FACE="Times New Roman">dwStyle &amp; = ~ CBRS_TOOLTIPS ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndToolBar.SetBarStyle (dwStyle );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip29"></a><b><font SIZE="+2"><font FACE="Times New Roman">29</font><fontFACE="黑体">、如何设置工具条标题</font></font></b> </p><p><font SIZE="+0">工具条是一个窗口,所以可以在调用<fontFACE="Times New Roman">CWnd : : SetWindowText</font>来设置标题,例子如下:</font> </p><p><font SIZE="+0" FACE="Times New Roman">int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreateStruct )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Set the caption of the toolbar .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndToolBar.SetWindowText (_T &quot;Standdard&quot;);</font> </p><p><a NAME="tip30"></a><b><font SIZE="+2"><font FACE="Times New Roman">30</font><fontFACE="黑体">、如何创建和使用无模式对话框</font></font></b> </p><p><font SIZE="+0"><font FACE="Times New Roman">MFC</font>将模式和无模式对话封装在同一个类中,但是使用无模式对话需要几</font> </p><p><font SIZE="+0">个对话需要几个额处的步骤。首先,使用资源编辑器建立对话资源并使用</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">ClassWizard</font>创建一个<fontFACE="Times New Roman">CDialog</font>的派生类。模式和无模式对话的中止是不一样的:</font> </p><p><font SIZE="+0">模式对话通过调用<font FACE="Times New Roman">CDialog : : EndDialog </font>来中止,无模式对话则是调用</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">CWnd: : DestroyWindow</font>来中止的,函数<fontFACE="Times New Roman">CDialog : : OnOK</font>和<font FACE="Times New Roman">CDialog : : OnCancel</font></font> </p><p><font SIZE="+0">调用<font FACE="Times New Roman">EndDialog ,</font>所以需要调用<fontFACE="Times New Roman">DestroyWindow</font>并重置无模式对话的函数。</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleDialog : : OnOK ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Retrieve and validate dialog data .</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (! UpdateData (TRUE) )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// the UpdateData rountine will set focus to correct item</font> </p><p><font SIZE="+0" FACE="Times New Roman">TRACEO (&quot; UpdateData failed during dialog termination .\n&quot;) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">return ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Call DestroyWindow instead of EndDialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">DestroyWindow ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleDialog : : OnCancel ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Call DestroyWindow instead of EndDialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">DestroyWindow ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">其次,需要正确删除表示对话的<font FACE="Times New Roman">C++</font>对象。对于模式对来说,这很容易,需要创建函数返回后即可删除<fontFACE="Times New Roman">C++</font>对象;无模式对话不是同步的,创建函数调用后立即返回,因而用户不知道何时删除<fontFACE="Times New Roman">C++</font>对象。撤销窗口时工作框调用<fontFACE="Times New Roman">CWnd : : PostNcDestroy</font>,可以重置该函数并执行清除操作,诸如删除<fontFACE="Times New Roman">this</font>指针。</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleDialog : : PostNcDestroy ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Declete the C++ object that represents this dialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">delete this ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,要创建无模式对话。可以调用<fontFACE="Times New Roman">CDialog : : DoModal</font>创建一个模式对放, 要创建一个无模式对话则要调用<font FACE="Times New Roman">CDialog: : Create</font>。下面的例子说明了应用程序是如何创建无模式对话的:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMainFrame : : OnSampleDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Allocate a modeless dialog object .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CSampleDilog * pDialog =new CSampleDialog ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT_VALID (pDialog) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Create the modeless dialog .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">BOOL bResult = pDialog </font>—<fontFACE="Times New Roman">&gt; Creste (IDD_IDALOG) ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT (bResult ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip31"></a><b><font SIZE="+2"><font FACE="Times New Roman">31</font><fontFACE="黑体">、如何在对话框中显示一个位图</font></font></b> </p><p><font SIZE="+0">这要归功于<font FACE="Times New Roman">Win 32</font>先进的静态控件和<fontFACE="Times New Roman">Microsoft</font>的资源编辑器, 在对话框中显示位图是很容易的, 只需将图形控件拖到对话中并选择适当属性即可,用户也可以显示图标、位图以及增强型元文件。</font> </p><p><a NAME="tip32"></a><b><font SIZE="+2"><font FACE="Times New Roman">32</font><fontFACE="黑体">、如何改变对话或窗体视窗的背景颜色</font></font></b> </p><p><font SIZE="+0">调用<font FACE="Times New Roman">CWinApp : : SetDialogBkColor</font>可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleApp : : InitInstance ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">//use blue dialog with yellow text .</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">需要重画对话(或对话的子控件)时,<fontFACE="Times New Roman">Windows</font>向对话发送消息<font FACE="Times New Roman">WM_CTLCOLOR</font>,通常用户可以让<fontFACE="Times New Roman">Windows</font>选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。</font> </p><p><font SIZE="+0">首先,给对话基类增加一人成员变量<fontFACE="Times New Roman">CBursh :</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">class CMyFormView : public CFormView</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">private :</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush m_ brush ; // background brush</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">} ;</font> </p><p><font SIZE="+0">其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMyFormView : : CMyFormView ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Initialize background brush .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,使用<font FACE="Times New Roman">ClassWizard</font>处理<fontFACE="Times New Roman">WM_CTLCOLOR</font>消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测<fontFACE="Times New Roman">nCtlColor</font>参量。</font> </p><p><font SIZE="+0" FACE="Times New Roman">HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Determine if drawing a dialog box . If we are , return +handle to</font> </p><p><font SIZE="+0" FACE="Times New Roman">//our own background brush . Otherwise let windows handle it .</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (nCtlColor = = CTLCOLOR _ DLG )</font> </p><p><font SIZE="+0" FACE="Times New Roman">return (HBRUSH) m_brush .GetSafeHandle ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><hr><p>&nbsp;<a HREF="skill.htm">返回上页</a>&nbsp;&nbsp;&nbsp;</p></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -