2015-10-27 181 views
1

我是C++的新手,我使用的是Visual Studio 2012的MFC 如何在瀏覽按鈕的圖片控件中顯示圖片? Browse(瀏覽)按鈕點擊,我的路徑設置爲一樣,顯示圖片來自瀏覽按鈕

void CSimilarityOfImagesDlg::OnBnClickedButton1() 
{ 
    CFileDialog dlg(TRUE); 
    int iRet = dlg.DoModal(); 
    CString path = dlg.GetPathName(); 

    SetWindowText (path); 
    CEdit* cedit; 
    cedit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_EDIT1)); 
    cedit->SetWindowTextW(path); 
    cedit->GetWindowTextW(path); 

} 

回答

1

MFC/ATL框架編輯控件帶有CImage類,允許你加載圖像(PNG,JPEG,BMP,GIF等格式的支持)。爲了在圖片控件中顯示目標圖片,您需要使用CStatic::SetBitmap()方法。 CImage類實現Detach()方法,該方法允許您直接訪問HBITMAP對象。下面是一個例子:

m_PictureCtrl是在對話框窗口頭文件中定義這樣的:

CStatic m_PictureCtrl; 

它使用標準MFC數據交換機構映射到IDC_PIC_STATIC控制ID。

void CTestPicDlg::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Control(pDX, IDC_PIC_STATIC, m_PictureCtrl); 
} 

瀏覽按鈕的處理程序是這樣的:

CFileDialog dlg(TRUE); 
if (dlg.DoModal() == IDOK) 
{  
    CString sPath = dlg.GetPathName(); 

    CImage img; 
    HRESULT hr = img.Load(sPath); 
    if (FAILED(hr)) 
    { 
     CString sErrorMsg; 
     sErrorMsg.Format(_T("Failed to load %s"), sPath);  
     AfxMessageBox(sErrorMsg); 
     return; 
    } 

    CRect rect; 
    m_PictureCtrl.GetClientRect(rect); 
    int nWidth = rect.Width(); 
    int nHeight = rect.Height(); 

    CDC* pScreenDC = GetDC(); 
    CDC MemDC; 
    MemDC.CreateCompatibleDC(pScreenDC); 
    CBitmap bmp; 
    bmp.CreateCompatibleBitmap(pScreenDC, nWidth, nHeight); 

    CBitmap *pOldObj = MemDC.SelectObject(&bmp); 
    img.StretchBlt(MemDC.m_hDC, 0, 0, nWidth, nHeight, 0, 0, img.GetWidth(), img.GetHeight(), SRCCOPY); 
    MemDC.SelectObject(pOldObj); 

    m_PictureCtrl.SetBitmap((HBITMAP)bmp.Detach()); 
    ReleaseDC(pScreenDC); 
} 
+0

SRY基因,但什麼是m_PictureCtrl?這是身份證嗎? – user3552658

+1

我已經擴展了添加m_PictureCtrl定義的答案。 –

+0

非常感謝!我在哪裏可以找到Do Data Exchange的另一個問題?我仍在搜索它 – user3552658