点击这里给我发消息 点击这里给我发消息

VC++利用AppWizard创建并使用ToolBar StatusBar Dialog Bar

添加时间:2013-12-7
    相关阅读: 程序 C++ VC
 

运行时程序界面如界面图,该程序拥有一个工具条用于显示两个命令按钮,一个用于演示如何使按钮处于检查状态,另一个根据第一个按钮的状态来禁止/允许自身。(设置检查状态和允许状态都通过OnUpdateCommand实现)此外Dialog Bar上有一个输入框和按钮,这两个子窗口的禁止/允许同样是根据工具条上的按钮状态来确定,当按下Dialog Bar上的按钮时将显示输入框中的文字内容。状态条的第一部分用于显示各种提示,第二部分用于利用OnUpdateCommand显示当前时间。同时在程序中演示了如何设置菜单项的命令解释字符(将在状态条的第一部分显示)和如何设置工具条的提示字符(利用一个小的ToolTip窗口显示)。

生成应用:利用AppWizard生成一个MFC工程,图1,并设置为单文档界面图2,最后选择工具条,状态条和ReBar支持,图3

修改菜单:利用资源编辑器删除多余的菜单并添加一个新的弹出菜单和三个子菜单,图4,分别是:

 

图1

图2

图3

图4

\n前的字符串将显示在状态条中作为命令解释,\n后的部分将作为具有相同ID的工具条按钮的提示显示在ToolTip窗口中。

修改Dialog Bar:在Dialog Bar中添加一个输入框和按钮,按钮的ID为IDM_SHOW_TXT与一个菜单项具有相同的ID,这样可以利用映射菜单消息来处理按钮消息(当然使用不同ID值也可以利用ON_COMMAND来映射Dialog Bar上的按钮消息,但是ClassWizard没有提供为Dialog Bar上按钮进行映射的途径,只能手工添加消息映射代码)。图5

修改工具条:在工具条中添加两个按钮,ID值为IDM_CHECK和IDM_DISABLE和其中两个菜单项具有相同的ID值。图6

利用ClassWizard为三个菜单项添加消息映射和更新命令。图7

图5

图6

图7

修改MainFrm.h文件

//添加一个成员变量来记录工具条上Check按钮的检查状态。
protected:
 BOOL m_fCheck;
//手工添加状态条第二部分用于显示时间的更新命令,和用于禁止/允许输入框的更新命令
 //{{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自动产生的代码
 afx_msg void OnUpdateTime(CCmdUI* pCmdUI); //显示时间
 afx_msg void OnUpdateInput(CCmdUI* pCmdUI); //禁止/允许输入框
 

修改MainFrm.cpp文件

//修改状态条上各部分ID
#define ID_TIME   0x705 //作为状态条上第二部分ID
static UINT indicators[] =
{
 ID_SEPARATOR,           // status line indicator
 ID_SEPARATOR,   //先设置为ID_SEPARATOR,在状态条创建后再进行修改
};
//修改消息映射
 //{{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自动生成代码
 ON_UPDATE_COMMAND_UI(ID_TIME, OnUpdateTime) ////显示时间
 ON_UPDATE_COMMAND_UI(IDC_INPUT_TEST, OnUpdateInput) //禁止/允许输入框
//修改OnCreate函数,重新设置状态条第二部分ID值
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
....
 // by wenyy 修改状态条上第二部分信息
 m_wndStatusBar.SetPaneInfo(1,ID_TIME,SBPS_NORMAL,60);//set the width
 return 0;
}
//修改经过映射的消息处理函数代码
void CMainFrame::OnCheck()
{
 //在Check按钮被按下时改变并保存状态
 m_fCheck=!m_fCheck;
}

void CMainFrame::OnUpdateCheck(CCmdUI* pCmdUI)
{
 //Check按钮是否设置为检查状态
 pCmdUI->SetCheck(m_fCheck);
}

void CMainFrame::OnDisable()
{
 //Disable按钮被按下
 AfxMessageBox("you press disable test");
}

void CMainFrame::OnUpdateDisable(CCmdUI* pCmdUI)
{
 //根据Check状态决定自身禁止/允许状态
 pCmdUI->Enable(m_fCheck);
}

void CMainFrame::OnShowTxt()
{
 //得到Dialog Bar上输入框中文字并显示
 CEdit* pE=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_INPUT_TEST);
 CString szO;
 pE->GetWindowText(szO);
 AfxMessageBox(szO);
}

void CMainFrame::OnUpdateShowTxt(CCmdUI* pCmdUI)
{
 //Dialog Bar上按钮根据Check状态决定自身禁止/允许状态
 pCmdUI->Enable(m_fCheck);
}

void CMainFrame::OnUpdateInput(CCmdUI* pCmdUI)
{
 //Dialog Bar上输入框根据Check状态决定自身禁止/允许状态
 pCmdUI->Enable(m_fCheck);
}

void CMainFrame::OnUpdateTime(CCmdUI* pCmdUI)
{
 //根据当前时间设置状态条上第二部分文字
 CTime timeCur=CTime::GetCurrentTime();
 char szOut[20];
 sprintf( szOut, "%02d:%02d:%02d", timeCur.GetHour(), timeCur.GetMinute(),timeCur.GetSecond());
 pCmdUI->SetText(szOut);
}

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册