试试这个:
HBITMAP hBmp=(HBITMAP)::CreateMappedBitmap(AfxGetApp()->m_hInstance,IDB_MYBMP,0,NULL,0);
m_hBMP=(HBITMAP)::CopyImage(hBmp,IMAGE_BITMAP,0,0,LR_COPYRETURNORG and LR_COPYDELETEORG);
CStatic *pSet;
pSet=(CStatic*)GetDlgItem(IDC_STATIC1);
pSet->SetBitmap(m_hBMP);

解决方案 »

  1.   

    改成如下代码后运行通过:
    HBITMAP bitmap;
    m_picture.Create("",WS_CHILD and WS_VISIBLE and SS_CENTERIMAGE and SS_BITMAP,
    CRect(0,0,180,160),this,IDC_STATIC1);
    bitmap=(HBITMAP)::LoadBitmap(AfxGetInstanceHandle(),(LPSTR)IDB_BITMAP1);
    m_picture.SetBitmap(bitmap);
      

  2.   

    谢谢以上两位高手的参与。经本人的测试,发现以下问题请大家帮忙分析一下。首先,我在编译时查出使用“and”是语法错误。另外,dzl朋友的回帖中的LoadBitmap函数不能只使用两个参数。
    请大家再想想办法。谢谢。
      

  3.   

        请注意,我使用的是::LoadBitmap而不是::LoadImage,另本段代码已在VC6上运行通过,我是在CView类的OnCreate中加入本段代码的,m_pictrue是CView类的成员。
      

  4.   

    dzl:
      你好,你的回答我已收到。但我现在讨论的是CStatic控件的图片显示,并不是CView类。m_picture是一个CStatic控件的名称。如果你的意思是将m_picture申明为CView类的成员的话,请问具体如何操作?
      谢谢。
      

  5.   

    控件在view或对话框中是一样的。
    如果图片在资源内而不是外部文件,这样做就可以了:
    CBitmap bitmap;
    m_picture.Create("",WS_CHILD  and  WS_VISIBLE  and  SS_CENTERIMAGE  and  SS_BITMAP,
    CRect(0,0,180,160),this,IDC_STATIC1);
    bitmap.LoadBitmap(IDB_BITMAP1);
    m_picture.SetBitmap(bitmap.Detach());
      

  6.   

    HINSTANCE hInst = AfxGetInstanceHandle();
    ((CStatic *)GetDlgItem(IDC_STATIC1))->SetBitmap(
          ::LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)));
    这段代码肯定是可以的。
      

  7.   

    slmine:
        你误解我的意思了,其实这个问题很简单。你只要通过AppWizard生成一个SDI程序框架,在CxxxView类中加入成员CStatic m_picture,再在CxxxView的OnCreate函数中加入我上面列出的代码就行了。其中::LoadBitmap是Win32 API。
      

  8.   

    各位:
       也许是我没有表达清楚,我再重申一下。我设计了一个基于对话框的程序,在对话框中有一个CStatic的控件和一些按钮。现在,要实现的功能是点击按钮,在CStatic控件中显示一张图片。
       代码如下:
    m_picture.Create("",WS_CHILD and WS_VISIBLE and SS_CENTER and SS_BITMAP,CRect(50,50,60,60),this,IDC_STATIC1);
    bitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_VGACOLOR);
    m_picture.SetBitmap(bitmap);
    其中m_picture是CStatic控件的名称,IDB_BITMAP1是图片名称。
    现在,问题是编译代码时没有报错。但试运行时,点击按钮就出错。
    还有,WS_CHILD and WS_VISIBLE...这种格式好象编译不通过。
      

  9.   


    CStatic* m_picture=(CStatic *)GetDlgItem(IDC_STATIC1);
    HBITMAP bitmap;
    bitmap=(HBITMAP)::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
    m_picture->ModifyStyle(0,SS_BITMAP and SS_CENTERIMAGE);
    m_picture->SetBitmap(bitmap);
      

  10.   

    我是这样做的:
    void CDevSelector::OnSelchangeDeviceList() 
    {
    OnPaint();  //把这一行放在你的按下按钮的响应代码中
    }void CDevSelector::OnPaint() 
    {
    CPaintDC dc(this);

             //IDC_DEVICE_LIST是list控件,只要改变其中的选项,就重新显示示意图
    CComboBox *box = (CComboBox *)GetDlgItem(IDC_DEVICE_LIST);
    m_nIndex = box->GetCurSel();
    CWnd *st = GetDlgItem(IDC_STATIC_SAMPLE);
    CDC *pDC = st->GetDC();
    RECT r;
    st->GetClientRect(&r);
    st->InvalidateRect(NULL);
    st->UpdateWindow();
    if(m_nIndex != CB_ERR && DevIDBX(m_nIndex)){
    CDC *pMemDC = new CDC;
    CBitmap *bmp;
    bmp = new CBitmap;
    bmp->LoadBitmap(DevIDBX(m_nIndex));
    pMemDC->CreateCompatibleDC(pDC);
    pMemDC->SelectObject(bmp);
    int x=(r.right-32)/2,y=(r.bottom-32)/2;
    pDC->BitBlt(x,y,32,32,pMemDC,0,0,SRCCOPY);
    bmp->DeleteObject();
    pDC->SelectStockObject(NULL_BRUSH);
    pDC->SelectStockObject(BLACK_PEN);
    pDC->Rectangle(x,y,x+32,y+32);
    delete bmp;
    delete pMemDC;
    }
    else{
    pDC->SelectStockObject(NULL_PEN);
    pDC->SelectStockObject(WHITE_BRUSH);
    pDC->Rectangle(&r);
    }
    st->ReleaseDC(pDC);
    }