📄 vcc83.htm
字号:
<html>
<head>
<title>c++系列</title>
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td width=200 height="59">
</tr>
</tbody>
</table>
<table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0
cellspacing=0 width=685 align="center" height="70">
<tbody>
<tr>
<td bgcolor=#F9D23C height=14>
<div align=center class=H1><font color="#FFFFFF">利用AppWizard创建并使用ToolBar
StatusBar Dialog Bar</font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=51>
<p align="left">运行时程序界面如界面图,该程序拥有一个工具条用于显示两个命令按钮,一个用于演示如何使按钮处于检查状态,另一个根据第一个按钮的状态来禁止/允许自身。(设置检查状态和允许状态都通过OnUpdateCommand实现)此外Dialog
Bar上有一个输入框和按钮,这两个子窗口的禁止/允许同样是根据工具条上的按钮状态来确定,当按下Dialog Bar上的按钮时将显示输入框中的文字内容。状态条的第一部分用于显示各种提示,第二部分用于利用OnUpdateCommand显示当前时间。同时在程序中演示了如何设置菜单项的命令解释字符(将在状态条的第一部分显示)和如何设置工具条的提示字符(利用一个小的ToolTip窗口显示)。</p>
<p class="unnamed1"><b>生成应用:</b>利用AppWizard生成一个MFC工程,并设置为单文档界面,最后选择工具条,状态条和ReBar支持,</p>
<p class="unnamed1"><b>修改菜单:</b>利用资源编辑器删除多余的菜单并添加一个新的弹出菜单和三个子菜单,分别是:
<table align=center border=1 cellspacing=0 width="100%">
<tbody>
<tr>
<td width="30%" class="unnamed1">名称</td>
<td width="10%" class="unnamed1">ID</td>
<td width="50%" class="unnamed1">说明字符</td>
</tr>
<tr>
<td class="unnamed1">Check</td>
<td class="unnamed1">IDM_CHECK</td>
<td class="unnamed1">SetCheck Demo\nSetCheck Demo</td>
</tr>
<tr>
<td class="unnamed1">Disable</td>
<td class="unnamed1">IDM_DISABLE</td>
<td class="unnamed1">Disable Demo\nDisable Demo</td>
</tr>
<tr>
<td class="unnamed1">ShowText on DialogBar</td>
<td class="unnamed1">IDM_SHOW_TXT</td>
<td class="unnamed1">ShowText on DialogBar Demo\nShowText on DialogBar</td>
</tr>
</tbody>
</table>
<p></p>
<p class="unnamed1">\n前的字符串将显示在状态条中作为命令解释,\n后的部分将作为具有相同ID的工具条按钮的提示显示在ToolTip窗口中。
</p>
<p class="unnamed1"><b>修改Dialog Bar:</b>在Dialog Bar中添加一个输入框和按钮,按钮的ID为IDM_SHOW_TXT与一个菜单项具有相同的ID,这样可以利用映射菜单消息来处理按钮消息(<font
color=red>当然使用不同ID值也可以利用ON_COMMAND来映射Dialog Bar上的按钮消息,但是ClassWizard没有提供为Dialog
Bar上按钮进行映射的途径,只能手工添加消息映射代码</font>)。</p>
<p class="unnamed1"><b>修改工具条:</b>在工具条中添加两个按钮,ID值为IDM_CHECK和IDM_DISABLE和其中两个菜单项具有相同的ID值。</p>
<p class="unnamed1">利用ClassWizard为三个菜单项添加消息映射和更新命令。</p>
<p class="unnamed1">修改MainFrm.h文件
<pre class="unnamed1">//添加一个成员变量来记录工具条上Check按钮的检查状态。
protected:<font color=red>
BOOL m_fCheck;</font>
//手工添加状态条第二部分用于显示时间的更新命令,
和用于禁止/允许输入框的更新命令
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnCheck();
afx_msg void OnUpdateCheck(CCmdUI* pCmdUI);
afx_msg void OnDisable();
afx_msg void OnUpdateDisable(CCmdUI* pCmdUI);
afx_msg void OnShowTxt();
afx_msg void OnUpdateShowTxt(CCmdUI* pCmdUI);
//}}AFX_MSG
//上面的部分为ClassWizard自动产生的代码<font color=red>
afx_msg void OnUpdateTime(CCmdUI* pCmdUI); //显示时间
afx_msg void OnUpdateInput(CCmdUI* pCmdUI); //禁止/允许输入框</font>
</pre>
<p></p>
<p class="unnamed1">修改MainFrm.cpp文件
<pre class="unnamed1">//修改状态条上各部分ID<font color=red>
#define ID_TIME 0x705 //作为状态条上第二部分ID</font>
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator<font color=red>
ID_SEPARATOR, //先设置为ID_SEPARATOR,
在状态条创建后再进行修改</font>
};
//修改消息映射
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(IDM_CHECK, OnCheck)
ON_UPDATE_COMMAND_UI(IDM_CHECK, OnUpdateCheck)
ON_COMMAND(IDM_DISABLE, OnDisable)
ON_UPDATE_COMMAND_UI(IDM_DISABLE, OnUpdateDisable)
ON_COMMAND(IDM_SHOW_TXT, OnShowTxt)
ON_UPDATE_COMMAND_UI(IDM_SHOW_TXT, OnUpdateShowTxt)
//}}AFX_MSG_MAP
//以上部分为ClassWizard自动生成代码<font color=red>
ON_UPDATE_COMMAND_UI(ID_TIME, OnUpdateTime) ////显示时间
ON_UPDATE_COMMAND_UI(IDC_INPUT_TEST, OnUpdateInput)
//禁止/允许输入框</font>
//修改OnCreate函数,重新设置状态条第二部分ID值
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
....<font color=red>
// by wenyy 修改状态条上第二部分信息
m_wndStatusBar.SetPaneInfo(1,ID_TIME,SBPS_NORMAL,60);
//set the width</font>
return 0;
}
//修改经过映射的消息处理函数代码
void CMainFrame::OnCheck()
{<font color=red>
//在Check按钮被按下时改变并保存状态
m_fCheck=!m_fCheck;</font>
}
void CMainFrame::OnUpdateCheck(CCmdUI* pCmdUI)
{<font color=red>
//Check按钮是否设置为检查状态
pCmdUI->SetCheck(m_fCheck);</font>
}
void CMainFrame::OnDisable()
{<font color=red>
//Disable按钮被按下
AfxMessageBox("you press disable test");</font>
}
void CMainFrame::OnUpdateDisable(CCmdUI* pCmdUI)
{<font color=red>
//根据Check状态决定自身禁止/允许状态
pCmdUI->Enable(m_fCheck);</font>
}
void CMainFrame::OnShowTxt()
{<font color=red>
//得到Dialog Bar上输入框中文字并显示
CEdit* pE=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_INPUT_TEST);
CString szO;
pE->GetWindowText(szO);
AfxMessageBox(szO);</font>
}
void CMainFrame::OnUpdateShowTxt(CCmdUI* pCmdUI)
{<font color=red>
//Dialog Bar上按钮根据Check状态决定自身禁止/允许状态
pCmdUI->Enable(m_fCheck);</font>
}
void CMainFrame::OnUpdateInput(CCmdUI* pCmdUI)
{<font color=red>
//Dialog Bar上输入框根据Check状态决定自身禁止/允许状态
pCmdUI->Enable(m_fCheck);</font>
}
void CMainFrame::OnUpdateTime(CCmdUI* pCmdUI)
{<font color=red>
//根据当前时间设置状态条上第二部分文字
CTime timeCur=CTime::GetCurrentTime();
char szOut[20];
sprintf( szOut, "%02d:%02d:%02d", timeCur.GetHour(),
timeCur.GetMinute(),timeCur.GetSecond());
pCmdUI->SetText(szOut);</font>
}</pre>
<div align="left"> </div>
</td>
</tr>
</tbody>
</table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -