我建了一个基于对话框的工程,并为该工程添加了一个菜单,在该菜单的弹出菜单下有两个子菜单位图1和位图2,我的目的是通过点击子菜单来显示相应的位图,故在每个子菜单的消息映射里调用函数自己写的函数OnRun(UINT nBitmapID,UINT nMenuID),OnRun()函数里也用了loadBitmap(nBitmapID)以装载位图,执行后无错误,但是点击子菜单时并不显示位图图象,请问各位高手是什么原因?
是不是要用个类似Invalidate()更新一下什么的?

解决方案 »

  1.   

    个人观点:LoadBitmap只是装载入到了内存中,不是用来显示的
      

  2.   

    你可以在OnPaint里面载入你自己想要的图
    在你的子菜单上面添家 判断啊
    简单的运用if()语句
    开始的时候FALSE 
    点击就TRUE 载入
    不就可以了吗
      

  3.   

    LoadBitmap 只是加载后得到一个 HBITMAP 句柄而已,还没有进行绘制
    你必须在 OnPaint 中将 HBITMAP 选入到 DC 中并使用 BitBlt 来绘制
      

  4.   

    这两天刚好做过类似的东西,看起来你好象是要用来显示资源中已经定义过ID的位图,下面是大致的例子:
    //先定义两个DC,一个是显示设备的DC,一个适合显示设备兼容的内存DC;
    CClientDC dc(this);//显示设备
    CDC memDC;//内存DC
    memDC.CreateCompatibleDC(&dc);//把内存DC设定为和显示设备兼容
    CBitmap *poldbmp=NULL;//定义一个旧BMP指针用以恢复
    poldbmp=memDC.SelectObject(&your_bmp);//把你的位图装入内存DC,并保留原指针
    dc.BitBlt(//把内存DC的矩阵传送到显示设备,即显示位图,具体参数看msdn吧!
               OFFSET_X,
               OFFSET_Y,
               bmWidth,
               bmHeight,
               &memDC,
               0,
               0,
               SRCCOPY
              );
       memDC.SelectObject(poldbmp);//恢复内存指针,不要忘了