Могу ли я создать контекст устройства, который является лишь частью контекста другого устройства?
-
13-10-2019 - |
Вопрос
Я подключил графический элемент управления, который принимает контекст устройства, HDC, в качестве ввода и использует это для рисования. Мой новый элемент управления - это только оригинальный элемент управления, центрированный поверх большего изображения. Я хотел бы иметь возможность назвать исходный метод Draw Control's Draw () для повторного использования кода, но я не уверен, как продолжить.
Вот идея:
void CCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
// original method draws a checkbox
}
void CBorderedCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
// Draw my image here
// Create new hdc2 and hdcTemp2 which are just some portion of hdc and hdcTemp
// For example, hdc2 may just be a rectangle inside of hdc that is 20 pixels
// indented on all sides.
// Call CCheckBox::DrawCtrl() with hdc2 and hdcTemp2
}
Решение
Я думаю, что вы можете быть смущены тем, что такое контекст устройства. Контекст устройства - это место в памяти, на которое вы можете нарисовать, будь то буфер экрана, растровый карту или что -то еще. Поскольку я представляю, вы хотите только рисовать на экране, вам нужен только один DC. Чтобы выполнить то, что вы хотите, я бы порекомендовал перенести прямоугольник к функции, которая говорит ей, где рисовать. При желании, и с более низкой производительностью вы можете создать новую растровую карту для меньшей области и дать функции DC Bitmap DC. Теперь, когда я думаю об этом, это могло быть тем, что вы имели в виду в первую очередь: P Удачи!
Другие советы
Хотя это и не надежный, вы можете подделать DC в качестве подраздела DC, используя комбинацию SetViewPortorgex а также SelectObject с регионом, подрезанной до подставной зоны.
Проблема с этим подходом заключается в том, что код рисования уже использует эти API, необходимые для переписывания, чтобы знать, что ему необходимо объединить его маскирование и компенсацию с существующими смещениями и регионами отсечения.