📄 01_9_16_2.asp.html
字号:
<td class=a14><b> <a name="28">28.如何在代码中获取工具条和状态条的指针?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
缺省时, 工作框创建状态条和工具条时将它们作为主框窗口的子窗口,状态条有一个AFX_IDW_STATUS_BAR标识符,工具条有一个AFX_IDW_TOOLBAR标识符,下例说明了如何通过一起调用CWnd: : GetDescendantWindow和AfxGetMainWnd来获取这些子窗口的指针:</td></tr></table><table width=100% ><tr><td class=a14>
//Get pointer to status bar .</td></tr></table><table width=100% ><tr><td class=a14>
CStatusBar * pStatusBar = (CStatusBar *) AfxGetMainWnd ( )</td></tr></table><table width=100% ><tr><td class=a14>
—> GetDescendantWindow(AFX_IDW_STUTUS_BAR)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Get pointer to toolbar .</td></tr></table><table width=100% ><tr><td class=a14>
CToolBar * pToolBar = (CToolBar * ) AfxGetMainWnd ( )</td></tr></table><table width=100% ><tr><td class=a14>
—> GetDescendantWindow(AFX_IDW_TOOLBAR)</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="29">29.如何使能和禁止工具条的工具提示?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
如果设置了CBRS_TOOLTIPS风格位,工具条将显示工具提示,要使能或者禁止工具提示,需要设置或者清除该风格位。下例通过调用CControlBar : : GetBarStyle和CControlBar : : SetBarStyle建立一个完成此功能的成员函数:</td></tr></table><table width=100% ><tr><td class=a14>
void CMainFrame : : EnableToolTips ( BOOL bDisplayTips )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT_VALID (m_wndToolBar)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
DWORD dwStyle = m _wndToolBar.GetBarStyle ( )</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
if (bDisplayTips) dwStyle |=CBRS_TOOLTIPS</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
else</td></tr></table><table width=100% ><tr><td class=a14>
dwStyle & = ~CBRS_TOOLTIPS</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
m_wndToolBar.SetBarStyle (dwStyle )</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="30">30.如何设置工具条标题?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
工具条是一个窗口,所以可以在调用CWnd : : SetWindowText来设置标题,例子如下:</td></tr></table><table width=100% ><tr><td class=a14>
int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreateStruct )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
…</td></tr></table><table width=100% ><tr><td class=a14>
// Set the caption of the toolbar .</td></tr></table><table width=100% ><tr><td class=a14>
m_wndToolBar.SetWindowText (_T "Standdard")</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="31">31.如何创建和使用无模式对话框?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
MFC将模式和无模式对话封装在同一个类中,但是使用无模式对话需要几个对话需要几个额处的步骤。首先,使用资源编辑器建立对话资源并使用ClassWizard创建一个CDialog的派生类。模式和无模式对话的中止是不一样的:模式对话通过调用CDialog : : EndDialog 来中止,无模式对话则是调用CWnd: : DestroyWindow来中止的,函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数。</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleDialog : : OnOK ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// Retrieve and validate dialog data .</td></tr></table><table width=100% ><tr><td class=a14>
if (! UpdateData (TRUE) )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// the UpdateData rountine</td></tr></table><table width=100% ><tr><td class=a14>
will set focus to correct item TRACEO (" UpdateData failed during dialog termination .\n")</td></tr></table><table width=100% ><tr><td class=a14>
return</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Call DestroyWindow instead of EndDialog .</td></tr></table><table width=100% ><tr><td class=a14>
DestroyWindow ( )</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleDialog : : OnCancel ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
//Call DestroyWindow instead of EndDialog .</td></tr></table><table width=100% ><tr><td class=a14>
DestroyWindow ( )</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
其次,需要正确删除表示对话的C++对象。对于模式对来说,这很容易,需要创建函数返回后即可删除C++对象;无模式对话不是同步的,创建函数调用后立即返回,因而用户不知道何时删除C++对象。撤销窗口时工作框调用CWnd : : PostNcDestroy,可以重置该函数并执行清除操作,诸如删除this指针。</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleDialog : : PostNcDestroy ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// Declete the C++ object that represents this dialog.</td></tr></table><table width=100% ><tr><td class=a14>
delete this</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
最后,要创建无模式对话。可以调用CDialog : : DoModal创建一个模式对放,要创建一个无模式对话则要调用CDialog: : Create。下面的例子说明 了应用程序是如何创建无模式对话的: 象;无模式对话不是同步的,创建函数调用后立即返回,</td></tr></table><table width=100% ><tr><td class=a14>
void CMainFrame : : OnSampleDialog ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
//Allocate a modeless dialog object .</td></tr></table><table width=100% ><tr><td class=a14>
CSampleDilog * pDialog =new CSampleDialog</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT_VALID (pDialog) Destroy ( )</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Create the modeless dialog . represents this dialog.</td></tr></table><table width=100% ><tr><td class=a14>
BOOL bResult = pDialog —> Creste (IDD_IDALOG)</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT (bResult )</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="32">32.如何在对话框中显示一个位图?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
这要归功于Win 32先进的静态控件和Microsoft的资源编辑器,在对话框中显示位图是很容易的, 只需将图形控件拖到对话中并选择适当属性即可,用户也可以显示图标、位图以及增强型元文件。</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b><a name="33">33.如何改变对话或窗体视窗的背景颜色?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
调用CWinApp : : SetDialogBkColor可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。</td></tr></table><table width=100% ><tr><td class=a14>
BOOL CSampleApp : : InitInstance ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
…</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//use blue dialog with yellow text .</td></tr></table><table width=100% ><tr><td class=a14>
SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 ,255 , 0 ) )</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
…</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
首先,给对话基类增加一人成员变量</td></tr></table><table width=100% ><tr><td class=a14>
CBursh :class CMyFormView : public CFormView</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
…</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
private :</td></tr></table><table width=100% ><tr><td class=a14>
CBrush m_ brush // background brush</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
…</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。</td></tr></table><table width=100% ><tr><td class=a14>
CMyFormView : : CMyFormView ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// Initialize background brush .</td></tr></table><table width=100% ><tr><td class=a14>
m_brush .CreateSolidBrush (RGB ( 0, 0, 255) )</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。</td></tr></table><table width=100% ><tr><td class=a14>
HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor</td></tr></table><table width=100% ><tr><td class=a14>
)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// Determine if drawing a dialog box . If we are, return +handle to</td></tr></table><table width=100% ><tr><td class=a14>
//our own background brush . Otherwise let windows handle it .</td></tr></table><table width=100% ><tr><td class=a14>
if (nCtlColor = = CTLCOLOR _ DLG )</td></tr></table><table width=100% ><tr><td class=a14>
return (HBRUSH) m_brush.GetSafeHandle ( )</td></tr></table><table width=100% ><tr><td class=a14>
return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor</td></tr></table><table width=100% ><tr><td class=a14>
)</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="34">34.如何获取一个对话控件的指针?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
有两种方法。其一,调用CWnd: : GetDlgItem,获取一个CWnd*指针调用成员函数。下例调用GetDlgItem,将返回值传给一个CSpinButtonCtrl*以便调用CSpinButtonCtrl : : SetPos 函数:</td></tr></table><table width=100% ><tr><td class=a14>
BOOL CSampleDialog : : OnInitDialog ( )</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
CDialog : : OnInitDialog ( )</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Get pointer to spin button .</td></tr></table><table width=100% ><tr><td class=a14>
CSpinButtonCtrl * pSpin - ( CSpinButtonCtrl *) GetDlgItem(IDC_SPIN)</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT _ VALID (pSpin)</td></tr></table><table width=100% ><tr><td class=a14>
//Set spin button's default position .</td></tr></table><table width=100% ><tr><td class=a14>
pSpin —> SetPos (10)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
return TRUE</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
其二, 可以使用ClassWizard将控件和成员变量联系起来。在ClassWizard中简单地选择Member Variables标签,然后选择Add Variable …按钮。如果在对话资源编辑器中,按下Ctrl键并双击控件即可转到Add Member Variable对话。</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="35">35.如何禁止和使能控件?</a></b></td>
</tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -