4548|11

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc4.0如何在一个dialog上添加一个菜单栏 [复制链接]

我在oncreate函数里面添加没用.好象不支持 setmenu();不会做,请大侠帮忙

最新回复

谢谢楼上几位 问题用CommandBar_系列函数解决的  详情 回复 发表于 2007-8-31 14:39
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
先在资源里面创建一个菜单,然后用这个函数创建,然后在oncreate里面调用
HWND CreateRpCommandBar(HWND hwnd)
{
        SHMENUBARINFO mbi;

        memset(&mbi, 0, sizeof(SHMENUBARINFO));
        mbi.cbSize     = sizeof(SHMENUBARINFO);
        mbi.hwndParent = hwnd;
        mbi.nToolBarId = 你的菜单ID;
        mbi.hInstRes   = g_hInst;
        mbi.nBmpId     = 0;
        mbi.cBmpImages = 0;

        if (!SHCreateMenuBar(&mbi))
                return NULL;

        return mbi.hwndMB;
}
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
LRESULT onCreate(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
    SHMENUBARINFO mbi;

    // 初始化menubar结构
    memset(&mbi, 0, sizeof(SHMENUBARINFO));
    mbi.cbSize     = sizeof(SHMENUBARINFO); // 必须填充
    mbi.hwndParent = hWnd;
    mbi.nToolBarId = IDR_MAIN_MENUBAR;
    mbi.hInstRes   = g_hInstance;

    // 建立menubar控制
    if (!SHCreateMenuBar(&mbi))
    {
        MessageBox (hWnd, _T("建立menubar失败"),
                    g_szAppName, MB_OK);
        DestroyWindow(hWnd);
     }

     return 0;
}
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
感谢楼上两位
问题还是没有解决
弹出创建失败的对话框
再请帮忙
谢谢
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果是放在这里,没反应
int CMenussDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        if (CDialog::OnCreate(lpCreateStruct) == -1)
                return -1;
        SHMENUBARINFO mbi;

    // 初始化menubar结构
    memset(&mbi, 0, sizeof(SHMENUBARINFO));
    mbi.cbSize     = sizeof(SHMENUBARINFO); // 必须填充
    mbi.hwndParent =this->m_hWnd;
    mbi.nToolBarId = IDR_MENU1;
    mbi.hInstRes   = AfxGetInstanceHandle( );
    mbi.dwFlags=SHCMBF_HMENU;
    // 建立menubar控制
    if (!SHCreateMenuBar(&mbi))
    {
        MessageBox( _T("建立menubar失败"));
       // DestroyWindow(hWnd);
     }
        // TODO: Add your specialized creation code here
       
        return 0;
}
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
这样弹出创建失败对话框,麻烦再请帮忙
BOOL CMenussDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        CenterWindow(GetDesktopWindow());        // center to the hpc screen
    SHMENUBARINFO mbi;

    // 初始化menubar结构
    memset(&mbi, 0, sizeof(SHMENUBARINFO));
    mbi.cbSize     = sizeof(SHMENUBARINFO); // 必须填充
    mbi.hwndParent =this->m_hWnd;
    mbi.nToolBarId = IDR_MENU1;
    mbi.hInstRes   = AfxGetInstanceHandle( );
    mbi.dwFlags=SHCMBF_HMENU;
    // 建立menubar控制
    if (!SHCreateMenuBar(&mbi))
    {
        MessageBox( _T("建立menubar失败"));
      
     }

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

回复

94

帖子

0

TA的资源

一粒金砂(初级)

7
 
要创建菜单条,可以调用BOOL SHCreateMenuBar (SHMENUBARINFO *pmb);函数中唯一的参数是一个SHMENUBARINFO结构的的地址,该结构定义如下:
typedef struct tagSHMENUBARINFO {
DWORD cbSize;
HWND hwndParent;
DWORD dwFlags;
UINT nToolBarId;
HINSTANCE hInstRes;
int nBmpId;
int cBmpImages;
HWND hwndMB;
COLORREF clrBk;
}SHMENUBARINFO;

必须使用SHMENUBARINFO结构的尺寸来设置cbSize域。hwndParent设置为创建菜单条的窗口句柄。dwFlags则设置成三个标志的组合:
SHCMBF_EMPTYBAR 用来创建没有菜单的菜单条
SHCMBF_HIDDEN  创建一个菜单条,初始状态为隐藏
SHCMBF_HIDESIPBUTTON 创建一个菜单,其右边没有SIP按钮
SHCMBF_COLORBK 指出clrBk域中包含有效的颜色,在填充菜单条背景时使用。
SHCMBF_HMENU  指出资源是菜单资源,而不是菜单条资源

除非指定了SHCMBF_EMPTYBAR标志,否则你必须将nToolBarId域设置成描述菜单条中菜单和按钮结构的资源。除非使用了SHCMBF_HMENU标志,否则该资源并不是简单的菜单资源。该资源是一个普通资源数据快和菜单资源的组合,用来一起描述菜单条上的菜单以及按钮位置。我将在本节后面描述该资源。

接下来是hInstRes域,应该设置成包含菜单条资源的模块的实例句柄。随后的两个域,nBmpId和cBmpImages,描述了用于定义菜单条上按钮外观的位图图片。如果菜单条上有图形按钮,则可以将nBmpId设置成位图资源ID。该位图应该是16像素高,位图中的每个图片应该是16像素宽。所以如果位图中有三个图片,那么位图应该是48像素宽,16像素高。cBmpImages域设置成位图中图片的数量。为了更有艺术性,请参考最新的应用程序指导,看看如何将位图同其它部分搭配的更恰当。

如果菜单条创建成功,SHCReateMenuBar函数返回TRUE,这时候,hwndMB域中将包含菜单条句柄。您需要保存这个窗口句柄,因为一旦创建完成后,就没有其它方式可以确定菜单条句柄了。

看看这个对你有帮助没,你最好调试下看看问题出在哪,而不是简单的说创建失败
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
我这样做,在模拟器里面是弹出创建成功对话框,但是菜单没有显示在dialog上
BOOL CHhhhtestmenuDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        CenterWindow(GetDesktopWindow());        // center to the hpc screen

        // TODO: Add extra initialization here
        SHMENUBARINFO mbi;

    // 初始化menubar结构
    memset(&mbi, 0, sizeof(SHMENUBARINFO));
    mbi.cbSize     = sizeof(SHMENUBARINFO); // 必须填充
    mbi.hwndParent =this->m_hWnd;
    mbi.nToolBarId = IDR_MENU1;
    mbi.hInstRes   = AfxGetInstanceHandle( );
    mbi.dwFlags=SHCMBF_HMENU;
    // 建立menubar控制
         
    if (!SHCreateMenuBar(&mbi))
    {
        MessageBox( _T("建立menubar失败"));
       // DestroyWindow(hWnd);
     }
         else
         {
         MessageBox( _T("createmenubarcheng"));
         
         }
        return TRUE;  // return TRUE  unless you set the focus to a control
}
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

9
 
03的机器不支持mbi.dwFlags=SHCMBF_HMENU属性,在窗口中添加了这个属性后菜单栏就不正常了,你把这个删了,用系统自己创建的RCDATA就好了。你再试试?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
        HINSTANCE g_hInst = ::AfxGetInstanceHandle();
        HWND m_hWndCB;
        m_hWndCB = ::CommandBar_Create(g_hInst, m_hWnd, 1);
        if (m_hWndCB != NULL)
        {               
                //Add a menu bar
                ::CommandBar_InsertMenubar(m_hWndCB, g_hInst, IDR_MENU1, 0);               
                ::CommandBar_AddAdornments(m_hWndCB, 0, 0);
          }
放在初始化里。IDR_MENU1为菜单ID
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

11
 
使用CommandBar_系列函数吧
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
谢谢楼上几位
问题用CommandBar_系列函数解决的
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表