преобразовать HWND в визуальную студию HDC 2008 С++

Я использую этот код, чтобы поместить IplImage в pictureBox, закомментированная часть не работает, поэтому я пытаюсь использовать первые 3 строки кода, но третья возвращает 3 ошибки во время компиляции:
1>UIThread. obj: ошибка LNK2028: неразрешенный токен (0A00030D) "extern "C" struct HDC__ * stdcall GetDC(struct HWND *)" (?GetDC@@$$J14YGPAUHDC_@@PAUHWND_@@@Z) упоминается в функции "private: void clrcall UIThread::Form1::BtnAcquire_Click(class System::Object ^,class System::EventArgs ^)" (?BtnAcquire_Click@Form1@UIThread@@ $$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) 1>UIThread.obj: ошибка LNK2019: неразрешенный внешний символ "extern "C" struct HDC * stdcall GetDC( struct HWND *)" (?GetDC@@$$J14YGPAUHDC_@@PAUHWND_@@@Z), на которую ссылается функция "private: void __clrcall UIThread::Form1::BtnAcquire_Click(class System::Object ^,class System::EventArgs ^)" (?BtnAcquire_Click@Form1@UIThread@@$$FA$AAMXP$AAVObject@System@@P$AAVEventAr gs@4@@Z) 1>C:\Users\Andrea Parola\Documents\Visual Studio 2008\Projects\UIThread\Debug\UIThread.exe: фатальная ошибка LNK1120: 2 неразрешенных внешних файла

так как мне преобразовать HWND в HDC?

            HANDLE handle = (HANDLE)this->PbBoxImg->Handle.ToInt32();
    HWND hWnd=*(HWND*)&handle;
    HDC hdc = GetDC(hWnd);
    //HDC hdc = picturebox.GetDC()->m_hDC;
    char m_chBmpBuf[2048];
    BITMAPINFO *m_pBmpInfo =0;
    m_pBmpInfo = (BITMAPINFO *)m_chBmpBuf;
    m_pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    m_pBmpInfo->bmiHeader.biWidth = img->width;
    m_pBmpInfo->bmiHeader.biHeight = -img->height;
    m_pBmpInfo->bmiHeader.biBitCount= 24;

    m_pBmpInfo->bmiHeader.biPlanes = 1;
    m_pBmpInfo->bmiHeader.biCompression = BI_RGB;
    m_pBmpInfo->bmiHeader.biSizeImage = 0;
    m_pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
    m_pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
    m_pBmpInfo->bmiHeader.biClrUsed = 0;
    m_pBmpInfo->bmiHeader.biClrImportant = 0;
    StretchDIBits(hdc, 0, 0, img->width, img->height, 
                       0, 0, img->width, img->height, 
                       img->imageData, m_pBmpInfo,
                       DIB_RGB_COLORS, SRCCOPY);

person andrea    schedule 13.01.2012    source источник


Ответы (1)


Щелкните правой кнопкой мыши свой проект, Свойства, Компоновщик, Ввод. Удалите $(NoInherit) в параметре Дополнительные зависимости, чтобы компоновщику было предложено связать стандартные библиотеки импорта Windows. Включая user32.lib, который предоставляет GetDC().

Воспринимайте это как намек на то, что вы пишете необычный код. Вы должны использовать System::Drawing в приложении Winforms. StretchDIBits() покрывается Graphics::DrawImage()

person Hans Passant    schedule 14.01.2012
comment
по-прежнему GetDC не распознается, даже если я включаю user32.lib в свой проект. так как вы сказали, что это необычный код, есть ли у вас лучшее решение для преобразования IplImage в формат s, который может отображаться в окне изображения, без сохранения и перезагрузки? Спасибо - person andrea; 16.01.2012