?? teach_road_4d.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="聞怡洋 wyy_cq@21cn.com">
<title>Visual C++/MFC開發指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../main.css">
</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>
<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每點一下上面的廣告我就能有更多的上網時間為大家尋找資料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整體框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--標記放置區域-->
<tr>
<td width="30%" align="center" bgcolor="#003D84" valign=middle><img src=../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
<td width="70%" align="center" bgcolor="#003D84" valign=middle><img src=../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#0080C0" align=center><font color=white>您當前位置</font> <a href=../index.htm><font color=white>首頁</font></a> <a href=index.htm><font color=white>開發教程</font></a> <font color=white>4.D 利用<font class=eng color=white>AppWizard</font>創建并使用<font class=eng color=white>ToolBar StatusBar Dialog Bar</font></font><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></font></td>
</tr>
</table><!--標記放置區域 END-->
<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr>
<td><!--begin-->
<br>
<p align=center><big>4.D 利用<font class=eng>AppWizard</font>創建并使用<font class=eng>ToolBar StatusBar Dialog Bar</font></big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>運行時程序界面如<a href=4d_g1.gif target=_blank>界面圖</a>,該程序擁有一個工具條用于顯示兩個命令按鈕,一個用于演示如何使按鈕處于檢查狀態,另一個根據第一個按鈕的狀態來禁止/允許自身。(設置檢查狀態和允許狀態都通過OnUpdateCommand實現)此外Dialog Bar上有一個輸入框和按鈕,這兩個子窗口的禁止/允許同樣是根據工具條上的按鈕狀態來確定,當按下Dialog Bar上的按鈕時將顯示輸入框中的文字內容。狀態條的第一部分用于顯示各種提示,第二部分用于利用OnUpdateCommand顯示當前時間。同時在程序中演示了如何設置菜單項的命令解釋字符(將在狀態條的第一部分顯示)和如何設置工具條的提示字符(利用一個小的ToolTip窗口顯示)。</p>
<p><b>生成應用:</b>利用AppWizard生成一個MFC工程,<a href=4d_g2.gif target=_blank>圖例</a>,并設置為單文檔界面<a href=4d_g3.gif target=_blank>圖例</a>,最后選擇工具條,狀態條和ReBar支持,<a href=4d_g4.gif target=_blank>圖例</a></p>
<p><b>修改菜單:</b>利用資源編輯器刪除多余的菜單并添加一個新的彈出菜單和三個子菜單,<a href=4d_g5.gif target=_blank>圖例</a>,分別是:
<table border=1 width=100% align=center cellspacing="0">
<tr><td width=30%>名稱</td><td width=10%>ID</td><td width=50%>說明字符</td></tr>
<tr><td>Check</td><td>IDM_CHECK</td><td>SetCheck Demo\nSetCheck Demo</td></tr>
<tr><td>Disable</td><td>IDM_DISABLE</td><td>Disable Demo\nDisable Demo</td></tr>
<tr><td>ShowText on DialogBar</td><td>IDM_SHOW_TXT</td><td>ShowText on DialogBar Demo\nShowText on DialogBar</td></tr>
</table>
</p>
<p>
\n前的字符串將顯示在狀態條中作為命令解釋,\n后的部分將作為具有相同ID的工具條按鈕的提示顯示在ToolTip窗口中。
</p>
<p><b>修改Dialog Bar:</b>在Dialog Bar中添加一個輸入框和按鈕,按鈕的ID為IDM_SHOW_TXT與一個菜單項具有相同的ID,這樣可以利用映射菜單消息來處理按鈕消息(<font color=red>當然使用不同ID值也可以利用ON_COMMAND來映射Dialog Bar上的按鈕消息,但是ClassWizard沒有提供為Dialog Bar上按鈕進行映射的途徑,只能手工添加消息映射代碼</font>)。<a href=4d_g6.gif target=_blank>圖例</a></p>
<p><b>修改工具條:</b>在工具條中添加兩個按鈕,ID值為IDM_CHECK和IDM_DISABLE和其中兩個菜單項具有相同的ID值。<a href=4d_g7.gif target=_blank>圖例</a></p>
<p>利用ClassWizard為三個菜單項添加消息映射和更新命令。<a href=4d_g8.gif target=_blank>圖例</a></p>
<p>修改MainFrm.h文件
<pre>
//添加一個成員變量來記錄工具條上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>修改MainFrm.cpp文件
<pre>
//修改狀態條上各部分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>
</p>
</p>
<p ><a href=4d_s1.zip>下載演示代碼 17K</a></p>
</small>
</td>
</tr>
<tr><td>
<small>
<p align=center><a href=index.htm#charpter4>返回</a></p>
</small>
</td></tr>
</table>
<p align=center><small>版權所有 聞怡洋 <a href=http://www.vchelp.net/>http://www.vchelp.net/</a></small></p>
</td><!--end-->
</tr>
</table>
</td></tr></table><!--整體框架 END-->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -