1.位图文件是单独存放在硬盘上的 2.以下方法可以选择位图文件么?如果行,请帮助怎样显示
static char BASED_CODE szFilter[] = "BMP Files (*.BMP)|*.mft|All Files (*.*)|*.*||";
    CFileDialog CFDlg(true,"*.BMP",NULL,OFN_HIDEREADONLY | OFN_LONGNAMES ,szFilter);
    if(CFDlg.DoModal()==IDOK)
    {.....//请问这里插入哪些代码可以将选择的位图文件显示
     }
  ...........谢谢!!

解决方案 »

  1.   

    兄弟,要么你就用微软自带的工具把图片打开,要么就用Shell打开,如果是想显示在自己的dialog上,那要贴图的。
    邮件贴出来,给你个完整的贴图程序自己看去吧。
      

  2.   

    在打开图片的头文件中加
    CBitmap  m_bmp;
    在打开图片的函数中加:
    static char BASED_CODE szFilter[] = "bmp Files (*.bmp)|*.mft|All Files (*.*)|*.*||";
        CFileDialog CFDlg(true,"*.BMP",NULL,OFN_HIDEREADONLY | OFN_LONGNAMES ,szFilter);
        if(CFDlg.DoModal()==IDOK)
        {

    CString filename=CFDlg.GetPathName();
    HBITMAP hbmp;
    if( m_bmp.m_hObject != NULL )//判断
    {
    m_bmp.DeleteObject();
    }
    /////////载入图片
    hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
    filename, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
    if( hbmp == NULL ) 
    return ;
    //////取得加载的BMP的信息//////
    m_bmp.Attach( hbmp );
    DIBSECTION ds;
    BITMAPINFOHEADER &bminfo = ds.dsBmih; 
    m_bmp.GetObject( sizeof(ds), &ds );
    int cx=bminfo.biWidth;  //得到图像宽度
    int cy=bminfo.biHeight; //得到图像高度
    ////得到图像宽度和高度,调整控件的大小,让它正好显示一张图片
    CRect rect;
    GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);//控件的指针
    ScreenToClient(&rect);
    GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);
                      //调整大小
    InvalidateRect(rect,TRUE);

    }
    在OnPaint()中加:  CPaintDC dc(GetDlgItem(IDC_STATIC1)); //得到picture控件的DC,图像将被绘制在控件上 
      CRect rcclient;
        GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient);
        CDC memdc;
        memdc.CreateCompatibleDC(&dc);  
        CBitmap bitmap;
        bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
        memdc.SelectObject( &bitmap );
        CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
        CDC maskdc;
        maskdc.CreateCompatibleDC(&dc);
        CBitmap maskbitmap;
        maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
        maskdc.SelectObject( &maskbitmap );
        maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc, 
        rcclient.left, rcclient.top, SRCCOPY);
        CBrush brush;
        brush.CreatePatternBrush(&m_bmp);
        dc.FillRect(rcclient, &brush);  
        dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), 
                 &memdc, rcclient.left, rcclient.top,SRCPAINT);
        brush.DeleteObject();调试通过!