Конвертировать HWND в HDC Visual Studio 2008 C++
Я использую этот код для помещения 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 @ Система @@P$AAVEventArgs@4@@Z)
1>C:\Users\ Андреа Парола \Documents\Visual Studio 2008\ Проекты \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 ответ
Щелкните правой кнопкой мыши свой проект, Свойства, Линкер, Ввод. Удалите $(NoInherit) в параметре "Дополнительные зависимости", чтобы компоновщик получил указание связать стандартные библиотеки импорта Windows. Включая user32.lib, тот, который предоставляет GetDC().
Воспринимайте это как намек на то, что вы пишете необычный код. Вы должны использовать System::Drawing в приложении Winforms. StretchDIBits() покрывается Graphics::DrawImage()