我在向主菜单中添加位图时,程序正确运行,但在该菜单项的前面只是一个小的单色实心方框,并不是我想要的位图,不知道是什么原因。我的作法是:
  1。在应用程序的资源文件中添加想要增加的位图,并将其ID命名为IDB_OPEN1和IDB_OPEN2;
  2。在应用程序的视图类中添加CBitmap类的对象,取名为bm_open1和bm_open2。在视图类的构造函数中添加以下代码:
bm_open1.LoadBitmap(IDB_OPEN1);//分别表示选中和未选两个状态bm_open2.LoadBitmap(IDB_OPEN2);(函数LoadBitmap用于加载位图到CBitmap类的对象)
  3。在视图类的成员函数OnDraw()中添加以下代码:
CWnd*parent=GetParent();
CMenu*pmenubar=parent->GetMenu();
CMenu*pmenu=pmenubar->GetSubMenu(2);
pmenu->SetMenuItemBitmaps(1,MF_BYPOSITION,&bm_open1,&bm_open2);
====================================
我的感觉是:我使用的位图是自己在画图板(msdraw)上画的,超过了256色,
你说呢?

解决方案 »

  1.   

    在onpaint中试试下面的方法 CPaintDC DCDlg( this );
    CRect CRectTemp; GetClientRect( CRectTemp );
    DCDlg.FillRect( CRectTemp, &CBrushBackGround );
    当然,还有一些其他的
      

  2.   


    哦,看错了,不好意思原来是菜单中,你看《深入浅出MFC》吧,有例子的
      

  3.   

    好像跟drawitem()有关的,去看看
      

  4.   

    copy *bmp然 后 paste定 义 的 工 具 栏 图 像 中
      

  5.   

    void CDialogproDlg::OnButton2() 
    {bm_open1.LoadBitmap(IDB_BITMAP2);//CBitmap 类型的成员变量
    bm_open2.LoadBitmap(IDB_BITMAP3);
    CMenu* pMenu=new CMenu;
    pMenu->LoadMenu (IDR_MENU2);pMenu->SetMenuItemBitmaps(ID_MENUITEM32771,MF_BYCOMMAND,&bm_open1,&bm_open2);
    //设置ID为ID_MENUITEM32771的菜单项的图标
    AfxGetMainWnd()->SetMenu (pMenu);
    //设置对话框的菜单}
      

  6.   

    不要在OnDraw中设置菜单图表
      

  7.   

    to  adygyad(Yuan Ghost) 
    你说的好像是在一个按钮的响应函数中。可是我处理的是程序的主菜单。该如何做呢?
    to qdjiang() 
    不在OnDraw(),那应该在什么地方,还请明示!
      

  8.   

    把adygyad(Yuan Ghost)的代码放在框架类中即设置状态栏的地方,就可以在窗口创建时修改menu。
      

  9.   

    to ALL 
    可能你们给我的方法在你们自己的程序中可以用。在这里表示谢意。不过,我还是在自己的程序中使用自己的方法搞定了这件事。不过还是谢谢你们对我提出问题的关注。谢谢。