2010-08-26 2 views
0

Я хочу перекрасить часть окна не все. я понятия не имею, как это сделать. им с помощью win32 Пожалуйста нет тк ........
заранее спасибо C++ repaint часть окна


// create rect structure 
RECT rect2; 
rect2.left=0; 
rect2.top=0; 
rect2.right=225; 
rect2.bottom=300; 
// calling invalidateRect when left mouse button is donw 
case WM_LBUTTONDOWN: 
    InvalidateRect(hWnd, &rect2, false); 
    break; 
+0

Простой ответ: не использовать GDI для игр. Независимо от того, насколько вы осторожны, чтобы минимизировать работу над вашим перерисовкой, OpenGL или DirectX практически * определенно делают намного лучшую работу. –

+0

@ Jerry Coffin: На самом деле все еще есть веские причины использовать GDI для некоторых игр. Если производительность менее важна для переносимости на очень старые системы или системы с устаревшими драйверами графических карт или если вы все равно смеетесь в 2D в программном обеспечении, GDI по-прежнему остается жизнеспособным выбором. Например, я создал для игрового движка случайных игр, полностью основанный на GDI, но также оптимизированный для достойного запуска для многих сценариев, обычно встречающихся в казуальных играх. –

+0

@Adrian: Если вы довольны этим, это здорово. Хотя совместимость со старым аппаратным/программным обеспечением имеет некоторые ограничения, я использую OpenGL довольно успешно под NT 3.5 на таком старом аппаратном обеспечении, что вы вряд ли сможете найти его вне музея. –

ответ

2

Передайте прямоугольник части окна, которую вы хотите перекрасить, в метод InvalidateRect(). Прочтите here для деталей.

+0

Я уже думал об этом, но это не сработало, вы можете увидеть мой код, плохо опубликуйте его в минуту – Ramilol

+1

Определите «не работает». Кроме того, если у вас есть собственный обработчик WM_PAINT, вам необходимо уважать прямоугольник клипа, который он вам дает. В общем, хотя, если это для игры, как уже упоминалось, вы, скорее всего, лучше с DirectX, если вы планируете делать больше, чем просто бьющие и фигуры. – EboMike

+0

all im using gdi for - рисовать простой прямоугольник и загружать некоторые изображения – Ramilol

0

Что случилось с RedrawWindow?

+0

если я перерисовал все окно, он будет использовать слишком много моего процессора – Ramilol

+0

'RedrawWindow' перерисовывает ** часть ** окна. Проверьте параметр 'lprcUpdate'. –

+0

Я пробовал и не работал:/ – Ramilol

2

Это для игрового движка? Это выглядит так, потому что вас беспокоит использование процессора при полном перерисовке.

Если это так, то я бы рекомендовал blitting для обратного буферного изображения, отслеживая, какая часть вашего заднего буфера изменилась и копирует только эту часть на экран после того, как вы закончите рендеринг. Это называется двойной буферизацией, а также позаботится о мерцающих проблемах, которые вы можете увидеть.

+0

да им создание игры, а также использование двойной буферизации в моей игре – Ramilol

Смежные вопросы