Могу ли я создать контекст устройства, который является частью другого контекста устройства? - PullRequest
1 голос
/ 29 декабря 2010

Я подклассифицировал графический элемент управления, который принимает дескриптор контекста устройства, HDC, и использует его для рисования.Мой новый элемент управления - это просто исходный элемент управления, центрированный поверх большого изображения.Я хотел бы иметь возможность вызывать метод 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
}

Ответы [ 2 ]

3 голосов
/ 29 декабря 2010

Думаю, вы не понимаете, что такое контекст устройства.Контекст устройства - это место в памяти, к которому вы можете рисовать, будь то экранный буфер, растровое изображение или что-то еще.Поскольку я думаю, что вы хотите рисовать только на экране, вам нужен только один DC.Чтобы выполнить то, что вы хотите, я бы порекомендовал передать прямоугольник функции, которая сообщает ему, где рисовать.При желании и с более низкой производительностью вы можете создать новое растровое изображение для меньшей области и назначить функцию DC для растрового изображения.Теперь, когда я думаю об этом, возможно, именно это вы и имели в виду: P Удачи!

0 голосов
/ 29 декабря 2010

Несмотря на то, что он не защищен от ошибок, вы можете подделать DC как подраздел DC, используя комбинацию SetViewportOrgEx и SelectObject с областью, обрезанной до рассматриваемой подобласти.

Проблема с этим подходом состоит в том, что если код рисования уже использует эти API, его необходимо переписать, чтобы учесть, что ему необходимо объединить свои маскировку и смещение с существующими смещениями и областями отсечения.

...