изображението с необработени данни не се показва в контрола на картината с помощта на StretchDIBits

Направих контрола на картината (ID= IDC_PICTURE) за показване на необработени данни с помощта на StretchDIBits().

    HWND hDlg,hWndCtl;
    hWndCtl =::GetDlgItem(hDlg,IDC_PICTURE);
    hdc =:: GetDC(hWndCtl);
    ::StretchDIBits(hdc,0,0,width,height,0,0,width,height,raw_image,m_pBitMapInfo,DIB_RGB_COLORS,SRCCOPY);

Но изображенията се показват на екрана на работния ми плот, а не в контрола на картината, който направих. Как мога да разреша този проблем? Благодаря ти много.


mfc
person ios198    schedule 05.07.2014    source източник


Отговори (1)


В следващия ред...

hWndCtl =::GetDlgItem(hDlg,IDC_PICTURE);

... не сте инициализирали hDlg, така че вероятно е неуспешно и hWndCtl се връща като NULL.

Тогава този ред...

 hdc =:: GetDC(hWndCtl);

... е ефективно GetDC(NULL), което ви дава DC на работния плот.

Така че, за да разрешите проблема, уверете се, че предавате HWND от диалоговия прозорец на GetDlgItem или, тъй като използвате MFC, използвайте CWnd версията на GetDlgItem от вашия CDialog производен клас по този начин:

CWnd *pWnd = GetDlgItem(IDC_PICTURE);    // add error checking here for NULL return
HDC hdc =::GetDC(pWnd->GetSafeHwnd());   // use the HWND of the control to get the DC

// ... do the blit ...
person Roger Rowland    schedule 05.07.2014