Rover12421's Blog

The End.

Gh0st使用真彩菜单栏切换标签页

实际要实现的效果如下:

效果图

当点击真彩菜单栏上的“系统设置”,就自动切换到“服务设置”标签页,“创建配置”对应“服务设置”,“域名更新”对用“更新IP”。

真正实现起来其实不难,主要是要找对方法。下面具体说下步骤。(这个Gh0st版本是又“迷離”提供,方法都是一样的)

一.增加菜单项

增加菜单

首先需要在菜单上增加对用的菜单ID,我这里选择的是IDR_MAINFRAME 。

添加三个对用菜单ID:

IDM_SETTINGS 系统设置

IDM_BUILD 创建配置

IDM_UPIP 域名跟新

至于顶层菜单的“附件”自己可以随便写。

二.给菜单添加消息事件

打开ClassWizard,他会提示增加到类,使用默认的增加到已存在的类

Adding a Class

在弹出的类选择窗口里选择CMainFrame,我们后面要添加的菜单事件也需要添加在这个类里。如果不是在这个类里,菜单的响应事件并不会在每一个标签页的时候都能响应,真彩菜单的图标也就会变成灰色的。

Selete Class

在后面的修复类信息里直接取消跳过

Repair Class Information

在打开的ClassWizard里分别添加3个菜单的响应函数,第一步,一定要选对类“CMainFrame”,然后分别为 IDM_SETTINGS,IDM_BUILD,IDM_UPIP 添加 COMMAND 消息响应函数。函数名就用默认的就好了。

MFC ClassWizard

三.修改消息响应函数

可以直接在上面的ClassWizard点EditCode跳入文件位置,进行函数修改。或者直接打开“MainFrm.cpp”文件,拉到最后就可以看到刚才添加的三个消息响应函数了。

其实代码就一句

((CMainFrame*)AfxGetApp()->m_pMainWnd)->SetCurView(N);

修改后的代码如下:

void CMainFrame::OnSettings()

{

// TODO: Add your command handler code here

((CMainFrame*)AfxGetApp()->m_pMainWnd)->SetCurView(1);

}

void CMainFrame::OnBuild()

{

// TODO: Add your command handler code here

((CMainFrame*)AfxGetApp()->m_pMainWnd)->SetCurView(2);

}

void CMainFrame::OnUpip()

{

// TODO: Add your command handler code here

((CMainFrame*)AfxGetApp()->m_pMainWnd)->SetCurView(3);

}

四.修改真彩菜单代码

最后一步修稿真彩菜单中菜单对应的ID。

可以搜索“m_wndToolBar.SetButtonInfo”来定位。我们直接打开MainFrm.cpp。找到

m_wndToolBar.SetButtonInfo(9, IDD_SETTINGS, TBSTYLE_BUTTON , 7);

m_wndToolBar.SetButtonText(9, “系统设置”);

m_wndToolBar.SetButtonInfo(10, IDD_BUILD, TBSTYLE_BUTTON , 8);

m_wndToolBar.SetButtonText(10, “创建配置”);

m_wndToolBar.SetButtonInfo(11, IDD_UPIP, TBSTYLE_BUTTON , 9);

m_wndToolBar.SetButtonText(11, “域名更新”);

只要修改ID就行了。更改后如下:

m_wndToolBar.SetButtonInfo(9, IDM_SETTINGS, TBSTYLE_BUTTON , 7);

m_wndToolBar.SetButtonText(9, “系统设置”);

m_wndToolBar.SetButtonInfo(10, IDM_BUILD, TBSTYLE_BUTTON , 8);

m_wndToolBar.SetButtonText(10, “创建配置”);

m_wndToolBar.SetButtonInfo(11, IDM_UPIP, TBSTYLE_BUTTON , 9);

m_wndToolBar.SetButtonText(11, “域名更新”);

最后编译运行。效果如下

最终效果图

Comments