Что нового?

Вывод графики в инсталлятор C++

Tidro

Новичок
Может кто написать/выложить пример на отрисовку графики в окно инсталлятора со смещением по координатам (достаточно пикселя)
Пример:botva,slideshow
 

Tidro

Новичок
Через библиотеку нужно
Можно конечно получить положение окна относительно экрана и сдвинуть по координатам, нужно еще проверять свернут ли инсталлятор, наверняка есть другое решение
Еще можно попробовать прицепится к хэндлу
Код:
void foo(HWND hWnd){
     if (IsWindow(hWnd))
     {
       ShowWindow(hWnd, SW_HIDE);
     }
}
 
Последнее редактирование:

Shegorat

Lord of Madness
Администратор
Tidro, что конкретно то требуется? А то отрисовка графики понятие растяжимое.
 

Tidro

Новичок
Отрисовка квадрата/прямоугольника например:
Код:
     if (IsWindow(hWnd))
     {
        HDC hDC;
    hDC = GetWindowDC(hWnd);
        Rectangle(hDC, 100, 100, 200, 200);
     }
Только его надо перерисовывать, можно ли как то этого избежать?
Иначе при сворачивание и разворачивание он исчезает или часть отрисовки пропадает
Было из-за списка компонентов :D
Что бы удалить пред рисовки InvalidateRect(hWnd,NULL,RDW_ERASE); есть способ лучше?
 
Последнее редактирование:

David.D.Rocco

Участник
Проверенный
Wm_paint надо перехватывать. SetWindowLong\GWL_WNDPROC - если окно чужое.

Вот пример отрисовки изображения:
Код:
case WM_CREATE:
        {
            hbm = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_IMAGE));

        }
        break;

    case WM_PAINT:
        {
            hdc = BeginPaint(hWnd, &ps);

            Rectangle(hdc, 10, 10, 110, 110);

            BITMAP bm;
            HDC hdcMem = CreateCompatibleDC(hdc);
            HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, hbm);
            GetObject(hbm, sizeof(bm), &bm);
            BitBlt(hdc, 200, 200, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
            SelectObject(hdcMem, hbmOld);
            DeleteDC(hdcMem);

            EndPaint(hWnd, &ps);
        }
        break;
 

Вложения

Shegorat

Lord of Madness
Администратор
Только его надо перерисовывать, можно ли как то этого избежать?
При сворачивании/разворачивании форме посылается сообщение WM_PAINT, так что в любом случае нужно перерисовывать.
При собственной отрисовке нужно обрабатывать сообщение WM_PAINT, как это сделать David.D.Rocco уже показал.
Что бы удалить пред рисовки InvalidateRect(hWnd,NULL,RDW_ERASE); есть способ лучше?
Нет, InvalidateRect стандартный способ уведомить форму, о том что ей нужно выполнить перерисовку. Другое дело, что можно указывать только нужную область для очистки, а не всю форму.
 
Сверху