77范文网 - 专业文章范例文档资料分享平台

BCMenu

来源:网络收集 时间:2018-12-25 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

BCMenu

1、在SDI(单文档)中使用BCMenu

在 SDI 中使用 BCMenu,首先,自然是建立一个 SDI 工程,然后将“BCMenu.h”和“BCMenu.cpp”放入文件夹下,单击\工程\增加到工程\文件\,将\和\两个文件加入工程。

在 MainFrm.h 这个头文件里的成员函数 CMainFrame 里添加类型为 public 的脚本: BCMenu m_menu; HMENU NewMenu();

在 MainFrm.h 这个头文件的里添加下面的脚本: #include \

打开 Mainfrm.cpp 文件并加入下面的函数: HMENU CMainFrame::NewMenu() {

m_menu.LoadMenu(IDR_MAINFRAME); m_menu.LoadToolbar(IDR_MAINFRAME); return(m_menu.Detach()); }

编辑 C***App (***是你取的程序名字)里的 InitInstance() 成员函数。找到下面的脚本: if (!ProcessShellCommand(cmdInfo)) return FALSE;

在它后面添加下面的脚本:

CMenu* pMenu = m_pMainWnd->GetMenu(); if (pMenu)pMenu->DestroyMenu();

HMENU hMenu = ((CMainFrame*) m_pMainWnd)->NewMenu(); pMenu = CMenu::FromHandle( hMenu ); m_pMainWnd->SetMenu(pMenu);

((CMainFrame*)m_pMainWnd)->m_hMenuDefault = hMenu;

在 CMainFrame 类里添加消息处理函数:WM_MEASUREITEM、WM_MENUCHAR 和 WM_INITMENUPOPUP。添加方法是在 CMainFrame 类上右击鼠标选择 Add Windows Message Handler ,在右下角的选择框里选中 Window ,再在左面的列表里分别选择 WM_MEASUREITEM、WM_MENUCHAR 和 WM_INITMENUPOPUP 并单击 Add and Edit 按钮,然后加入下面的脚本:

void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) {

BOOL setflag=FALSE;

if(lpMeasureItemStruct->CtlType==ODT_MENU){

if(IsMenu((HMENU)lpMeasureItemStruct->itemID)){

CMenu* cmenu=CMenu::FromHandle((HMENU)lpMeasureItemStruct->itemID); if(BCMenu::IsMenu(cmenu)){

m_menu.MeasureItem(lpMeasureItemStruct);

setflag=TRUE; } } }

if(!setflag)CFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct); }

LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) {

LRESULT lresult;

if(BCMenu::IsMenu(pMenu))

lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu); else

lresult=CFrameWnd::OnMenuChar(nChar, nFlags, pMenu); return(lresult); }

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

CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu); if(!bSysMenu){

if(BCMenu::IsMenu(pPopupMenu))BCMenu::UpdateMenu(pPopupMenu); } }

构建运行一下,我们发现现在的菜单是 ORIGINAL 风格,要改成 XP 风格的话,请在适当的地方(如: CMainFrame 类里的 OnCreate 成员函数里。)加入下面的脚本: BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); 2、在MDI(多文档)中使用BCMenu

在 MDI 中使用 BCMenu,首先,自然是建立一个 MDI 工程,然后将“BCMenu.h”和“BCMenu.cpp”放入文件夹下,单击\工程\增加到工程\文件\,将\和\两个文件加入工程。

在 MainFrm.h 这个头文件里的成员函数 CMainFrame 里添加类型为 public 的脚本: HMENU NewMenu();

HMENU NewDefaultMenu(); BCMenu m_menu,m_default;

在 MainFrm.h 这个头文件的里添加下面的脚本: #include \

打开 Mainfrm.cpp 文件并加入下面的函数: HMENU CMainFrame::NewMenu() {

static UINT toolbars[]={ IDR_MAINFRAME };

m_menu.LoadMenu(IDR_MYMENUTYPE); m_menu.LoadToolbars(toolbars,1);

return(m_menu.Detach()); }

HMENU CMainFrame::NewDefaultMenu() {

m_default.LoadMenu(IDR_MAINFRAME); m_default.LoadToolbar(IDR_MAINFRAME); return(m_default.Detach()); }

编辑 C***App (***是你取的程序名字)里的 InitInstance() 成员函数。找到下面的脚本: if (!ProcessShellCommand(cmdInfo)) return FALSE;

m_pMainWnd = pMainFrame;

// This code replaces the MFC created menus with the Ownerdrawn versions

在它后面添加下面的脚本:

pDocTemplate->m_hMenuShared=pMainFrame->NewMenu();

pMainFrame->m_hMenuDefault=pMainFrame->NewDefaultMenu(); pMainFrame->OnUpdateFrameMenu(pMainFrame->m_hMenuDefault);

在 CMainFrame 类里添加消息处理函数:WM_MEASUREITEM、WM_MENUCHAR 和 WM_INITMENUPOPUP。添加方法是在 CMainFrame 类上右击鼠标选择 Add Windows Message Handler ,在右下角的选择框里选中 Window ,再在左面的列表里分别选择 WM_MEASUREITEM、WM_MENUCHAR 和 WM_INITMENUPOPUP 并单击 Add and Edit 按钮,然后加入下面的脚本:

void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) {

BOOL setflag=FALSE;

if(lpMeasureItemStruct->CtlType==ODT_MENU){

if(IsMenu((HMENU)lpMeasureItemStruct->itemID)){

CMenu* cmenu=CMenu::FromHandle((HMENU)lpMeasureItemStruct->itemID); if(BCMenu::IsMenu(cmenu)){

m_menu.MeasureItem(lpMeasureItemStruct); setflag=TRUE; } } }

if(!setflag)CMDIFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct); }

LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) {

LRESULT lresult;

if(BCMenu::IsMenu(pMenu))

lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu); else

lresult=CMDIFrameWnd::OnMenuChar(nChar, nFlags, pMenu);

return(lresult); }

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

CMDIFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu); if(!bSysMenu){

if(BCMenu::IsMenu(pPopupMenu))BCMenu::UpdateMenu(pPopupMenu); } }

构建运行一下,我们发现现在的菜单是 ORIGINAL 风格,要改成 XP 风格的话,请在适当的地方(如: CMainFrame 类里的 OnCreate 成员函数里。)加入下面的脚本: BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); 3、在Dialog(基本对话框)中使用BCMenu

如果说在 SDI 和 MDI 中使用 BCMenu 很麻烦的话,那么在 Dialog 中使用起来就是相当的简单了,不过因为在网页上没有说明 Dialog 里使用 BCMenu 的方法,只有一个很麻烦的示例,所以我的做法是新建一个基本对话框后和示例进行对比得到的,如果出现问题的话(至少我还没发现问题),请与示例文件进行对比。

首先新建一个MFC基于Dialog的程序,然后自然是创建一个菜单咯。 再把\和\文件复制到当前的文件夹下。

单击\工程\增加到工程\文件\,将\和\两个文件加入工程。 右击\添加一个成员变量:

双击\在其上方添加头文件(绿色为自动生成的脚本,红色为添加的脚本): // BCMenuDialogDlg.h : header file //

#if !defined(AFX_BCMENUDIALOGDLG_H__D5EE798A_B08C_4F8A_8404_0BED7C0F108A__INCLUDED_) #define

AFX_BCMENUDIALOGDLG_H__D5EE798A_B08C_4F8A_8404_0BED7C0F108A__INCLUDED_ #include \#if _MSC_VER > 1000 #pragma once

#endif // _MSC_VER > 1000

//加入 BCMenu 类的头文件。 #include \

///////////////////////////////////////////////////////////////////////////// // CBCMenuDialogDlg dialog

再在\函数里进行添加: // TODO: Add extra initialization here //设置风格为 XP(如果要用 ORIGINAL 风格,就设置为 BCMENU_DRAWMODE_ORIGINAL)。 BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); //载入需要改变的菜单。

m_menu.LoadMenu(IDR_MENU_MAIN);

SetMenu(&m_menu);

return TRUE; // return TRUE unless you set the focus to a control

这样就可以了,更多的使用方法可以参考\源文件,如在运行时改变菜单的风格

CButtonST

本篇主要包括了以下的效果:

1. 在按钮上加入Icon,使Icon和文字同时显示 2. 显示平面按钮

3. 使按钮上的图标可变

4. 设置按钮在不同状态下的底色和文字颜色

5. 设置图标和文字的位置

6. 根据Icon的形状设置按钮的形状

7. 添加Tooltips

以下是Basic Features的演示界面:

效果一:在按钮上加入Icon,使Icon和文字同时显示

假设按钮ID为IDC_BUTTON1

1. 添加成员变量

1.CButtonST m_btn;

2. 添加Icon资源,设其ID设为IDI_ICON1

3. 在OnInitDialog函数中初始化按钮

1.m_btn.SubclassDlgItem(IDC_BUTTON1,this); 2.m_btn.SetIcon(IDI_ICON1); 3.m_btn.SetFlat(FALSE);

注意:为达到最好效果,请根据Icon的大小调整按钮的大小。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库BCMenu在线全文阅读。

BCMenu.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/389904.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: