C++ 在图片控件中绘制图像

C++ 在图片控件中绘制图像,c++,windows,winapi,C++,Windows,Winapi,我有一个名为IDC\u PICTURECONTROL的图片控件和一个名为lpPicutre的LPPICTURE 当我的窗口接收到WM_PAINT时,我调用我的函数drawPicture(HWND,LPPICTURE)如下: drawPicture(GetDlgItem(hDlg, IDC_PICTURECONTROL), lpPicture); 按照现在的书写方式,控件周围的黑色边框消失了,图片根本没有绘制出来 如果我编辑该函数,使其不是绘制到图片控件,而是绘制到对话框本身(hDlg),则它正

我有一个名为
IDC\u PICTURECONTROL
的图片控件和一个名为
lpPicutre
LPPICTURE

当我的窗口接收到
WM_PAINT
时,我调用我的函数
drawPicture(HWND,LPPICTURE)
如下:

drawPicture(GetDlgItem(hDlg, IDC_PICTURECONTROL), lpPicture);
按照现在的书写方式,控件周围的黑色边框消失了,图片根本没有绘制出来

如果我编辑该函数,使其不是绘制到图片控件,而是绘制到对话框本身(
hDlg
),则它正确地绘制在窗口客户区的背景上。(不是我想要的)

以下是绘制函数中的代码:

void drawPicture(HWND hWnd, LPPICTURE picture)
{
    PAINTSTRUCT ps;
    HDC hdc;

    hdc = BeginPaint(hWnd, &ps);
  //hdc = BeginPaint(hDlg, &ps); (works, but draws on window instead of control)

    if (picture)
    {
        long hmWidth;
        long hmHeight;
        picture->get_Width(&hmWidth);
        picture->get_Height(&hmHeight);

        int nWidth  = MulDiv(hmWidth,  GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
        int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);

        RECT rc;
        GetClientRect(hWnd, &rc); // I have tried GetWindowRect() also

        int w = 0, h = 0, x = 0, y = 0;
        if (hmWidth == hmHeight)
        {
            // square
            w = (rc.right - rc.left);
            h = (rc.bottom - rc.top);

            x = rc.left;
            y = rc.top;
        }
        else if (hmWidth > hmHeight)
        {
            // wide
            w = (rc.right - rc.left);
            h = (w * hmHeight) / hmWidth;

            x = rc.left;
            y = (rc.bottom - rc.top - h) / 2;
        }
        else
        {
            //tall
            h = (rc.bottom - rc.top);
            w = (h * hmWidth) / hmHeight;

            y = rc.top;
            x = (rc.right - rc.left - w) / 2;
        }

        picture->Render(hdc, x, y, w, h, 0, hmHeight, hmWidth, -hmHeight, &rc);
    }

    EndPaint(hWnd, &ps);
  //EndPaint(hDlg, &ps);
}
hWnd
是图片控件的处理程序,
hDlg
是对话框的处理程序

我想它可能是从窗口的某个地方画出来的,所以我将x和y设置为0,宽度和高度设置为1000,但这并没有改变任何东西


我做错了什么?

如果这段代码与hDlg一起工作,它是正常的,问题可能出在静态控件本身。确保is具有SS_位图样式。在VisualStudio资源编辑器中,它被称为Type,并默认设置为SS_BLACKFRAME(Frame)。

此代码不适用于CStatic

CPictureView* image = new CPictureView(std::string("E:\\My Documents\\..jpeg"));
image->Create("", SS_BLACKRECT | SS_OWNERDRAW | WS_CHILD | WS_VISIBLE, CRect(100, 100, 300, 300), this, IDC_STATIC1);