我想自己加一个button控件  然后用CFileDialog 选择一张图片 加载到 程序的一个位图控件中 
    怎么实现?

解决方案 »

  1.   

    可以的,用LoadImage加载图片,对于位图控件有一个方法:SetBitmap,可以用来设置图片。
      

  2.   


    void CRotateImage::OnBtLoad() 
    {
    CFileDialog flDlg(TRUE,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件|*.bmp||",this);
    if (flDlg.DoModal()==IDOK)
    {
    CString csFileName = flDlg.GetPathName();
    m_SrcFile = flDlg.GetPathName();
    m_BmpName.SetWindowText(csFileName);
    if (m_hBmp != NULL)
    {
    DeleteObject(m_hBmp);
    m_hBmp = NULL;
    }
    m_hBmp = (HBITMAP)LoadImage(NULL,csFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    if (m_hBmp)
    {
    m_Image.SetBitmap(m_hBmp);
    m_bLoaded = TRUE;
    }
    CFile file;
    file.Open(csFileName,CFile::modeRead);
    file.Read(&m_bmFileHeader,sizeof(BITMAPFILEHEADER));
    file.Read(&m_bmInfoHeader,sizeof(BITMAPINFOHEADER));
    int szPalette = 0;
    if (m_bmInfoHeader.biBitCount != 24)
    {
    file.Close();
    MessageBox("请选择真彩色位图!","提示");
    return;
    }

    int nBmpData = m_bmInfoHeader.biSizeImage;
    if (m_pBmpData != NULL)
    {
    delete []m_pBmpData;
    m_pBmpData = NULL;
    }
    m_pBmpData = new BYTE[nBmpData]; file.ReadHuge(m_pBmpData,nBmpData);
    file.Close();
    int sizeofbuffer = m_bmInfoHeader.biWidth * m_bmInfoHeader.biHeight * 4;
    int externWidth;
    externWidth = m_bmInfoHeader.biWidth * 3;
    if(externWidth % 4 != 0)
    externWidth = 4 - externWidth % 4;
    else
    externWidth = 0;
    int k = 0;
    BYTE* m_pImageTempBuffer = new BYTE[sizeofbuffer]; for (int n = m_bmInfoHeader.biHeight - 1; n >= 0; n--) 
    {
    for (UINT m = 0; m < m_bmInfoHeader.biWidth * 3; m += 3) 
    {
    m_pImageTempBuffer[k]   = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m]; //blue
    m_pImageTempBuffer[k+1] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+1];//green
    m_pImageTempBuffer[k+2] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+2];//red
    m_pImageTempBuffer[k+3] = 255;
    k += 4;
    }
    } delete []m_pBmpData;
    m_pBmpData = new BYTE[sizeofbuffer];
    memcpy(m_pBmpData, m_pImageTempBuffer, sizeofbuffer); delete []m_pImageTempBuffer; //设置滚动范围
    CRect bmpRC,wndRC;
    m_ImagePanel.GetClientRect(wndRC);
    m_Image.GetClientRect(bmpRC); m_ImagePanel.OnHScroll(SB_LEFT, 1, NULL); 
    m_ImagePanel.OnVScroll(SB_LEFT, 1, NULL);  m_ImagePanel.SetScrollRange(SB_VERT,0,bmpRC.Height()-wndRC.Height());
    m_ImagePanel.SetScrollRange(SB_HORZ,0,bmpRC.Width()-wndRC.Width());
    }
    }