Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


crashtuak, например вызвать InvalidateRect в первом параметре указав хендл статика, который нужно перерисовать (тем самым форсировав событие WM_PAINT для этого окна). Или UpdateWindow, про который вспоминал pva в 4м сообщении темы. Ещё вариант с подмигиванием - скрыть и отобразить окно.

pva, если бы второй способ работал, это бы было бы решением для темы *GdiPlus*| маски прозрачности?
Считаю что для того, что б добиться результата со второго скрина от crashtuak, как раз и нужно применять маску. Да вот похоже такой встроенной функции в GDIplus нет, так что остаётся вариант по пиксельной обработки (а он достаточно медленный).
Два изображения имеют одинаковые размеры, во втором, где проходят чёрные линии (линии маски), в первом по этим же координатам пиксели должны становится прозрачными.
Вот только пока не знаю, как задать конкретному пикселю в изображении, что он должен быть прозрачным.

Понемногу осваиваюсь с прямой работой с GDIplus (до этого имел дело через .NET врапер).
Уже функцию с темы exe в скринсейвер на GdiPlus перенёс.
читать дальше »
Код: Выделить весь код
void GeneratorTsvetnyhPolos_GdiPlus(HDC *hDc, RECT *rectBar, int OffSet)
{
	Graphics g(*hDc);
	g.SetPageUnit(UnitPixel);	

	g.FillRectangle(new SolidBrush(Color(255, 255, 255, 255)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 196, 196, 0)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 0, 196, 196)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 0, 196, 0)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 196, 0, 196)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 196, 0, 0)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 0, 0, 196)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
	rectBar->left = rectBar->right;
	rectBar->right += OffSet;
	g.FillRectangle(new SolidBrush(Color(255, 0, 0, 0)), Rect (rectBar->left, rectBar->top, rectBar->right, rectBar->bottom));
}

Последний раз редактировалось Admiral, 26-01-2010 в 13:59.


Отправлено: 13:47, 26-01-2010 | #9