我在对话框里加了个picture控件,想在调用这个对话框时根据不同的情况显示不同的图片
不知道怎么实现,各位哥哥帮忙

解决方案 »

  1.   

    可以在同一个位置放置多个Picture,根据需要在统一时刻显示其中的一个Picture
    最好给这个控件添加一个CStatic变量,使用他的SetBitmap成员函数
      

  2.   

    这段代码用于显示图片,你自己研究研究吧
    #include "WindowSx.h"CFile file("*.bmp",CFile::modeRead);
    BITMAPFILEHEADER BitmapFileHeader;
    file.Read(&BitmapFileHeader,sizeof(BITMAPFILEHEADER));
    if (BitmapFileHeader.bfType==0X4D42)
    {
        BYTE* pMem=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,file.GetLength()-sizeof(BITMAPFILEHEADER));
        file.Read(pMem,file.GetLength()-sizeof(BITMAPFILEHEADER));
        BITMAPINFO* pBitmapInfo=(BITMAPINFO*)pMem;
        BITMAPINFOHEADER* pBitmapInfoHeader=(BITMAPINFOHEADER*)pMem;
        RGBQUAD* pRGB=(RGBQUAD*)(pMem+pBitmapInfoHeader->biSize);
        UINT iColor;
        if (pBitmapInfoHeader->biClrUsed==0)
            switch (pBitmapInfoHeader->biBitCount)
            {
            case 1:
                iColor=2;
                break;
            case 4:
                iColor=16;
                break;
            case 8:
                iColor=256;
                break;
            default:
                iColor=0;
            }
        else
            iColor=pBitmapInfoHeader->biClrUsed;
        BYTE* pData=pMem+pBitmapInfoHeader->biSize;
        if (iColor<=256)
            pData+=sizeof(RGBQUAD)*iColor;
        if (iColor>0 && iColor<=256)
        {
            struct {
                WORD iVersion;
                WORD iEntry;
                PALETTEENTRY entries[256];
            } palette={0X300,256};
            for (UINT i=0; i<iColor; i++)
            {
                palette.entries[i].peRed=pRGB[i].rgbRed;
                palette.entries[i].peGreen=pRGB[i].rgbGreen;
                palette.entries[i].peBlue=pRGB[i].rgbBlue;
                palette.entries[i].peFlags=0;
            }
            HPALETTE hPalette=::CreatePalette((LPLOGPALETTE)&palette);
            HPALETTE hOldPalette=::SelectPalette(dc.m_hDC,hPalette,FALSE);
            ::RealizePalette(dc.m_hDC);
            ::StretchDIBits(dc.m_hDC,
                            iX,iY,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
                            iXSource,iYSource,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
                            pData,pBitmapInfo,
                            DIB_RGB_COLORS,SRCCOPY);
            ::SelectPalette(dc.m_hDC,hOldPalette,FALSE);
            ::DeleteObject(hPalette);
        }
        else
            ::StretchDIBits(dc.m_hDC,
                            iX,iY,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
                            iXSource,iYSource,pBitmapInfoHeader->biWidth,pBitmapInfoHeader->biHeight,
                            pData,pBitmapInfo,
                            DIB_RGB_COLORS,SRCCOPY);
        GlobalFreePtr(pMem);
    }
      

  3.   

    这个控件怎么加CStatic变量啊?ClassWizard里都没用这个控件的ID啊
      

  4.   

    to:mynameisno1() 谢了,我先看看啊
      

  5.   

    选中Picture控件,按回车,出现属性对话框。把ID由IDC_STATIC改成其他的东西,只要不是IDC_STATIC就可以。
    然后再看ClassWizard,就会有了
      

  6.   

    我觉得只要你会用Picture控件来显示图片,就应该会这个问题呀。只不过当不同情况的时候,重新Load一下Bitmap。
      

  7.   

    我没用过picture,不好意思,新手
      

  8.   

    建成CStatic变量之后怎么控制?我感觉好像不用建多个picture也能实现
      

  9.   

    这个问题简单!建立一个CPicture1  , DDX为 m_Pic1 , TYPE 为 BITMAP    HBITMAP hbmp;
    hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
                (char *)"C:\\1.tmp",IMAGE_BITMAP,170,80,
                LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_Pic1.SetBitmap(hbmp);
      

  10.   

    我是这么做的,可什么也显示不出来,位图没问题,各位哥哥帮忙看看
    CBitmap m_mapstore;

    VERIFY(m_mapstore.LoadBitmap(IDB_BITMAP2));
    m_Map.SetBitmap(m_mapstore);
      

  11.   

    照我说的方法!绝对没问题!!!!!!!!建立一个图片控件IDC_STATIC1  , DDX为 m_Pic1 , TYPE 为 BITMAP    HBITMAP hbmp;
    hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
                (char *)"C:\\1.tmp",IMAGE_BITMAP,170,80,
                LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_Pic1.SetBitmap(hbmp);
      

  12.   

    to:xqk(夏乾坤) 哥,这方法是没问题,可太麻烦了,我用的那种方法理论能实现的,但不知道出什么错了,但还是谢谢你啊!