分享
 
 
 

用AppWizard创建并使用ToolBar StatusBar Dialog Bar

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

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

生成应用:利用AppWizard生成一个MFC工程,VC/4d_g2.gif" target=_blank>图例,并设置为单文档界面VC/4d_g3.gif" target=_blank>图例,最后选择工具条,状态条和ReBar支持,VC/4d_g4.gif" target=_blank>图例

修改菜单:利用资源编辑器删除多余的菜单并添加一个新的弹出菜单和三个子菜单,VC/4d_g5.gif" target=_blank>图例,分别是: 名称ID说明字符

CheckIDM_CHECKSetCheck Demo\nSetCheck Demo

DisableIDM_DISABLEDisable Demo\nDisable Demo

ShowText on DialogBarIDM_SHOW_TXTShowText on DialogBar Demo\nShowText on DialogBar

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

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

修改工具条:在工具条中添加两个按钮,ID值为IDM_CHECK和IDM_DISABLE和其中两个菜单项具有相同的ID值。VC/4d_g7.gif" target=_blank>图例

利用ClassWizard为三个菜单项添加消息映射和更新命令。VC/4d_g8.gif" target=_blank>图例

修改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);

}

VC/4d_s1.zip">下载演示代码 17K

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有