1. 添加资源,新加一个ToolBar的资源 IDR_TOOLBAR_SEARCH,并在此工具栏上再加上一个项:取ID为:ID_SEARCH2. 在MainFrm类中加入如下代码:变量:
CMFCToolBar m_wndToolBarSearch;
方法:
CMFCToolBarComboBoxButton *m_comboButton;
afx_msg LRESULT OnToolbarReset(WPARAM,LPARAM);
afx_msg void OnSelChangeClick();
afx_msg void OnClickComboBox();
3. 在MainFrm的消息映射中加入如下代码:
ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, OnToolbarReset)
ON_COMMAND(ID_SEARCH, &CMainFrame::OnClickComboBox)
ON_CBN_SELCHANGE(ID_SEARCH,&CMainFrame::OnSelChangeClick)
4. 在MainFrm的构造函数中修改如下:
CMainFrame::CMainFrame() : m_comboButton( NULL )
5. 在MainFrm的析构函数中加入:
if ( NULL != m_comboButton )
{
delete m_comboButton;
m_comboButton = NULL;
}
else ;
6. 添加消息响应函数的实现
LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM lp)
{
if ( NULL == m_comboButton )
{
m_comboButton = new CMFCToolBarComboBoxButton(ID_SEARCH, GetCmdMgr ()->GetCmdImage(ID_SEARCH, FALSE), CBS_DROPDOWN);
}
else ;
m_comboButton->EnableWindow(TRUE);
m_comboButton->SetCenterVert();
m_comboButton->SetDropDownHeight(10);
m_comboButton->SetFlatMode();
m_comboButton->AddItem(_T("OPTION1"));
m_comboButton->AddItem(_T("OPTION2"));
m_comboButton->SelectItem(0);
m_wndToolBarSearch.ReplaceButton (ID_SEARCH, *m_comboButton);
return 0;
}
void CMainFrame::OnSelChangeClick()
{
MessageBox( _T("OnSelChangeClick.") );
}
void CMainFrame::OnClickComboBox()
{
CMFCToolBarComboBoxButton* pSrcCombo = CMFCToolBarComboBoxButton::GetByCmd (ID_SEARCH, TRUE);
int index = m_comboButton->GetCurSel();
index = pSrcCombo->GetCurSel();
CString str;
pSrcCombo->GetEditCtrl()->GetWindowText( str );
pSrcCombo->AddItem(str);
MessageBox( _T("OnClickComboBox: ") + str );
}
7. 在MainFrm的OnCreate中的适当地方添加创建的代码:
if (!m_wndToolBarSearch.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(1, 1, 1, 1), IDR_TOOLBAR_SEARCH) ||
!m_wndToolBarSearch.LoadToolBar(theApp.m_bHiColorIcons ? IDR_TOOLBAR_SEARCH : IDR_TOOLBAR_SEARCH))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
//
m_wndToolBarSearch.SetWindowText( _T("Search") );
//
m_wndToolBarSearch.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
//
m_wndToolBarSearch.EnableDocking(CBRS_ALIGN_ANY);
//
DockPane(&m_wndToolBarSearch);
转载于:https://www.sychzs.cn/junx1989/archive/2012/07/24/junx1989_20120724102359.html
今天来简单介绍下vs2010旗舰版中解决方案边框栏的结构,并且拿一个实际的MFC的例子来展示下。
1. Solution Explorer
显示项目中包含的文件。这些文件分布在Header Files,Resource Files,Source Files三个虚拟文件夹中,当然还有一个ReadMe.txt。为何称之为虚拟文件夹呢,是因为他们在我们的磁盘空间是不存在的,只是为了方便程序猿们查看的。这三个文件夹从字面上都可以理解了,分别是头文件,资源文件,源文件。
2. Class View
Class View显示项目中包括的类和这些类的成员,还显示任何已经定义的全局实体。类显示在上面的窗格中,下面的窗格显示在上面的窗格中选中的类的成员。在Class View中右击某个实体,可以显示出用来查看该实体的定义或引用位置的菜单。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
左边的图显示了包括的类,右边的是我展开了CAboutDlg类,可以清楚的看出他是继承自CDialogEx,而CDialogEx继承自CDialog。
3. Property Manager
显示可以为项目构建的版本,有两个选项:Debug和Release。有项目开发经验的人肯定都知道,Debug是调试版本,Release是发布版本。发布版本的执行文件较调试版本小,因为他当中去掉了很多的调试信息。
1. 新建项目,在resourceview视图添加新的菜单(右键)
?
?
2. 在下图Type Here处添加菜单内容。
注意,当定义了二级及以后菜单后,一级菜单就不能再更改ID了,也不再有响应函数;
注意菜单资源的名称 IDR_MENU1,之后会用到。
?
3. 添加完菜单后,单击子菜单项,在properties中修改各子菜单项的ID:
?
4. 在主对话框.h文件中,添加菜单变量;在.cpp文件的OnIniDialog()函数中导入菜单资源:
CMenu m_Menu;
m_Menu.LoadMenu(IDR_MENU1);
SetMenu(&m_Menu);
?
还有一种显示方法如下:
先增成员变量HMENU m_hMenu1; 然后在初始化函数OnInitDialog()添加一下代码: ?m_hMenu1=LoadMenu(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU1));//导入资源,创建
菜单 ?::SetMenu(this->GetSafeHwnd(),m_hMenu1);//添加到对话框
5. 在Class Wizard中为各子菜单添加相应消息函数:
注意:类一定要选主对话框类。
?
6. 在消息响应函数内,添加相应程序:
参考:http://www.sychzs.cn/phenixyf/article/details/42680473
????????? http://www.sychzs.cn/phenixyf/article/details/42713045
?