Я рисую некоторые символы, принадлежащие определенным объектам, в контекст устройства и теперь хочу иметь возможность позже проверить, находится ли курсор мыши над таким символом.Как отказаться от пути CDC?
Для этого мой план состоял в том, чтобы сначала создать путь CDC
и использовать его для создания объекта региона CRgn
.
pDC->BeginPath();
pDC->Ellipse(ellipse[0], ellipse[1], ellipse[2], ellipse[3]); // Create path only
pDC->EndPath();
// Actually draw the ellipse
pDC->StrokeAndFillPath(); // Apparently removes the path from the DC
CRgn region;
if (region.CreateFromPath(pDC)) // Would also remove the path from the DC
{
// We never get here :-/
// Here I would copy the region's data,
// attach it to the object being drawn and
// destroy the region.
// That way I can create a region later on and do the hit-testing.
}
Как я могу использовать путь для рисования и создания региона, без необходимости рисовать дважды? При рисовании дважды в два раза больше времени, затраченного на мой метод рисования, чего я бы хотел избежать.
Не работает здесь (VC9) ... MSDN говорит: «После того, как CreateFromPath преобразует путь в область, Windows отбрасывает закрытый путь из контекста устройства». – foraidt
Я не уверен, что вы автоматически уведомлены об изменениях, но на всякий случай, если вы этого не сделаете, посмотрите на отредактированный ответ. –
Хорошо, теперь это работает. Но сохранение и восстановление состояния постоянного тока, по-видимому, также требует много времени. Я не вижу увеличения производительности по сравнению с чертежом дважды. (Если вы хотите числа: длительность моего теста варьируется от 180 мс до 200 мс в обоих случаях, где метод сохранения/восстановления выглядит немного медленнее.) – foraidt