您的位置:首页 > 其它

添加菜单栏、工具栏按钮、状态栏,并将菜单栏和工具栏关联

2014-08-21 09:57 381 查看
代码部分是是网上部分是自己的,现在整理一下。以下代码都已测试过,可直接使用~

一.菜单栏:(首先新建菜单资源,假设ID号为IDR_MENU)

1、定义类的成员变量: HMENU m_hMenu;

2、在初始化函数中添加:m_hMenu = LoadMenu(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU));

::SetMenu(this->GetSafeHwnd(),m_hMenu);

3、消息响应函数:直接在Class Wizard里添加COMMAND或者COMMAD_UPDATE消息响应函数。

二. 自制工具栏:

1、添加类的成员变量:CImageList m_imagelist;

CToolBar m_toolbar;

2、插入icon图标资源,每个按钮一个

3、 在初始化函数里添加自定义函数inintToolbar();

void CXcdispatchDlg::inintToolbar()

{

/**************************创建工具栏*********************/

m_imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);//32是图标尺寸

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_LOGOUT));//图标资源ID号

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_GEHU));

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_MESSAGE));

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_ZU));

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_ABOUT));

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_HELP));

m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_EXIT));

UINT Array[7];

for (int i=0;i<7;i++)

{

Array[i]=9000+i;

}

m_toolbar.Create(this);

m_toolbar.SetButtons(Array,7);

m_toolbar.SetButtonText(0,"注销");

m_toolbar.SetButtonText(1,"个呼");

m_toolbar.SetButtonText(2,"短信");

m_toolbar.SetButtonText(3,"转组");

m_toolbar.SetButtonText(4,"关于");

m_toolbar.SetButtonText(5,"帮助");

m_toolbar.SetButtonText(6,"退出");

m_toolbar.GetToolBarCtrl().SetButtonWidth(20,20);

m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);

m_toolbar.SetSizes(CSize(50,50),CSize(30,30)); //尺寸大小 可以调

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

}

三 在菜单栏关联工具栏,设置菜单栏前如果打勾则工具栏显示,否则工具栏不显示

1、添加自定义消息响应函数OnInitMenuPopup:

在头文件中添加afx_msg void OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu);

在cpp文件中添加ON_WM_INITMENUPOPUP()

然后添加具体代码

void CXcdispatchDlg::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu)

{

CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);

if(!bSysMenu && pPopupMenu)

{

CCmdUI cmdUI;

cmdUI.m_pOther = NULL;

cmdUI.m_pMenu = pPopupMenu;

cmdUI.m_pSubMenu = NULL;

UINT count = pPopupMenu->GetMenuItemCount();

cmdUI.m_nIndexMax = count;

for(UINT i=0; i<count; i++)

{

UINT nID = pPopupMenu->GetMenuItemID(i);

if(-1 == nID || 0 == nID)

{

continue;

}

cmdUI.m_nID = nID;

cmdUI.m_nIndex = i;

cmdUI.DoUpdate(this, FALSE);

}

}

}

2、 添加消息响应函数OnBnClickedToolBar(UINT nID):

在cpp文件中添加ON_COMMAND_RANGE(9000,9006, OnBnClickedToolBar) //因为我是7个按钮判断按了哪个

void CXcdispatchDlg::OnBnClickedToolBar(UINT nID)

{

int nIndex=nID-9000;

switch(nIndex)

{

case 0:{

LogoutButton();

}

break;

case 1:{

GeHu dlg;

dlg.DoModal();

}

break;

case 2:{

ShortMessage dlg;

dlg.DoModal();

}

break;

case 3:{

Zhuanzu dlg;

dlg.DoModal();

}

break;

case 4:{

AfxMessageBox("关于");

}

break;

case 5:{

AfxMessageBox("帮助");

}

break;

case 6:{

ExitButton();

}

break;

default:

AfxMessageBox("出错啦");

break;

}

}

!!!注意:添加了上面那句ON_COMMAND_RANGE(9000,9006,OnBnClickedToolBar)这个范围后,发现不能用Class Wizard添加控件的消息响应函数了,而且添加一次工程里所有的afx_msg消息响应函数会自动成倍增加,这个原因我现在还不太清楚为什么,网上看到也有人有过这个问题,但是没看到有人跟帖,如果有知道的希望分享一下啦。所以我现在先把这句删了,等最后再添加。没有这句就不能判断按了哪个工具栏按钮,执行上面这个函数里不同的case内容了。

3、接下来就是菜单栏前面打勾,工具栏按钮显示;不打勾工具栏隐藏

以帮助菜单为例,添加类的成员变量: BOOL flag;

然后在Class Wizard添加该菜单的COMMAND和COMMAND_UPDATE消息响应函数。

void CXcdispatchDlg::OnHelp()

{

flag=!flag;

if(flag==true)

m_toolbar.GetToolBarCtrl().HideButton(9005,FALSE);//我有7个工具栏按钮需要和菜单栏关联,设了9000-9006,其中这个帮助菜单是第6个,所以是9005

else

m_toolbar.GetToolBarCtrl().HideButton(9005,TRUE);

}

void CXcdispatchDlg::OnUpdateHelp(CCmdUI* pCmdUI)

{

pCmdUI->SetCheck(flag); //SetCheck是显示菜单前是否打钩

}

四 状态栏

添加类的成员变量:CStatusBarCtrl m_StatusBar;

在初始化函数中添加:

m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW, CRect(0,0,0,0), this, 0); int strPartDim[4]= {120, 240,360, -1}; //分割数量, 我一共是4项内容,前三个递增

m_StatusBar.SetParts(4, strPartDim);

m_StatusBar.SetText("CAD服务器:", 0, 0);

m_StatusBar.SetText("集中网管:", 1, 0);

m_StatusBar.SetText("ATS系统:", 2, 0);

m_StatusBar.SetText("时钟系统:", 3, 0);

到这里就差不多啦,欢迎有更好的补充~


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐