我是响应一个菜单
void Ctest26Dlg::OnMenuFileopen()
{
// TODO: Add your command handler code here
//CDC MemDC;
CString szFilters ("bmp Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"); CFileDialog fileDialog(TRUE, _T("bmp"), _T("*.bmp"),
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
fileDialog.DoModal();
if (fileDialog.GetPathName()!="")
{
//AfxMessageBox(fileDialog.GetPathName());
HBITMAP bitmap;
bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
fileDialog.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
HBITMAP oldBitmap;
CDC MemDC;
CClientDC dc(this);
MemDC.CreateCompatibleDC(&dc);
oldBitmap = (HBITMAP)MemDC.SelectObject(&bitmap);
CRect rc;
GetClientRect(&rc);
dc.BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(oldBitmap);
AfxMessageBox(_T(""));
}}

解决方案 »

  1.   

    你这个当然不行了,画图部分要放到WM_PAINT中去处理基于对话框的函数是OnPaint,多文档或单文档的是OnDraw
      

  2.   

    请问我这样为什么不行啊?void Ctest26Dlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    if (m_bitmap)//m_bitmap是dialog的一个变量HBITMAP
    {
    HBITMAP oldBitmap;
    CDC MemDC;
    CPaintDC dc(this);
    MemDC.CreateCompatibleDC(&dc);
    oldBitmap = (HBITMAP)MemDC.SelectObject(&m_bitmap);
    CRect rc;
    GetClientRect(&rc);
    dc.BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);
    MemDC.SelectObject(oldBitmap);
    CDialog::OnPaint();
    }
    }
    }
    //通过菜单响应打开bmp文件来显示
    void Ctest26Dlg::OnMenuFileopen()
    {
    // TODO: Add your command handler code here
    //CDC MemDC;
    CString szFilters ("bmp Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"); CFileDialog fileDialog(TRUE, _T("bmp"), _T("*.bmp"),
    OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
    fileDialog.DoModal();
    if (fileDialog.GetPathName()!="")
    {
    //AfxMessageBox(fileDialog.GetPathName());
    HBITMAP bitmap;
    bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
    fileDialog.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    m_bitmap = bitmap;
    SendMessage(WM_PAINT);
    }}
      

  3.   

    打开文件后:
    bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
    fileDialog.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);if (bitmap != NULL)
       m_bitmap.hObject (HBITMAP)bitmap;
    else
       MessageBox("Failed to open the image");
      

  4.   

    已经解决,贴出来给需要的人看看
    void Ctest26Dlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CBitmap* oldBitmap;
    CDC MemDC;
    CPaintDC dc(this);
    MemDC.CreateCompatibleDC(&dc);
    oldBitmap = MemDC.SelectObject(&m_Bitmap);//CBitmap m_Bitmap;
    CRect rc;
    GetClientRect(&rc);
    dc.BitBlt(0,30,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);
    MemDC.SelectObject(oldBitmap);
    CDialog::OnPaint();
    }
    }void Ctest26Dlg::OnMenuFileopen()
    {
    // TODO: Add your command handler code here
    //CDC MemDC;
    CString szFilters ("bmp Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"); CFileDialog fileDialog(TRUE, _T("bmp"), _T("*.bmp"),
    OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
    //fileDialog.DoModal();
    if (fileDialog.DoModal() == IDOK)
    {
    HBITMAP bitmap;
    bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
    fileDialog.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    m_Bitmap.DeleteObject();
    m_Bitmap.Attach(bitmap);
    Invalidate();
    //SendMessage(WM_PAINT);
    }}