изображение необработанных данных не отображается в управлении изображением с помощью 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