конвертировать HWND в HDC Visual Studio 2008 C ++ - PullRequest
0 голосов
/ 13 января 2012

Я использую этот код для помещения 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 (класс System :: Object ^, класс 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 (класс System :: Object ^, класс System :: EventArgs ^)" (? BtnAcquire_Click @ Form1 @ UIThread @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z) 1> C: \ Users \ Андреа Парола \ 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);

1 Ответ

2 голосов
/ 14 января 2012

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

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

...