使用StretchDIBits在图片控件中不显示原始数据图像

时间:2014-07-05 03:31:04

标签: mfc

我使用StretchDIBits()制作了一个图片控件(ID = IDC_PICTURE)来显示原始数据。

    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);

但图像显示在我的桌面屏幕上,而不是我制作的图片控件内。我怎么解决这个问题?非常感谢你。

1 个答案:

答案 0 :(得分:0)

在以下一行......

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 ...