У меня есть элемент управления изображением, который называется IDC_PICTURECONTROL
, и LPPICTURE
, который называется lpPicutre
.
Когда мое окно получает 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, но это ничего не изменило.
Что я делаю не так?