Здравствуйте!
У меня возникли проблемы с использованием функции AnimateWindow. Я прочитала все в MSDN и RSDN, что нашла про AnimateWindow. В результате ни один из способов непонятно как правильно использовать (т.к. неправильно работает для моего случая) и какой-то сумбур в голове...
Задача:
сделать плавное появление главного окна, используя AnimateWindow. После этого на главном окне должна отрисоваться картинка (средствами GDI+).
Проблема:
какой бы способ ни пробовала, изображение отрисовывается только после сворачивания/разворачивания окна, в то время, как если вместо AnimateWindow использовать ShowWindow, то такой проблемы нет.
Функция создания главного окна
bool
CImageViewer::CreateMainWindow()
{
m_hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, (const char*)"Image Viewer main window class",
(const char*)"Image Viewer v.1.0.0", WS_OVERLAPPEDWINDOW,
0, 0,
1024, 768,
NULL, NULL,
m_hInstance, this);
if (m_hWnd == NULL)
return false;
if (!AnimateWindow(m_hWnd, 500, AW_BLEND))
return false;
if (!UpdateWindow(m_hWnd))
return false;
return true;
}
Оконная процедура
LRESULT CALLBACK
CImageViewer::WndProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (msg)
{
case WM_PRINTCLIENT:
// в MSDN написано, что нужно обрабатывать это сообщение, но как?
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if (hdc == NULL) break;
OnPaint(hdc);
EndPaint(hWnd, &ps);
break;
case WM_CLOSE:
AnimateWindow(hWnd, 500, AW_BLEND|AW_HIDE);
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wparam, lparam);
}
return 0;
}
Функция прорисовки (использует GDI+)
void
CImageViewer::OnPaint(HDC hdc)
{
Graphics graphics(hdc);
Image image(L"g:\\_project\\image viewer\\ipcamera.jpg");
graphics.DrawImage(&image, 0, 0);
}