Kann ich einen Gerätekontext erstellen, der nur einen Teil eines anderen Gerätekontexts ist?

StackOverflow https://stackoverflow.com/questions/4551280

  •  13-10-2019
  •  | 
  •  

Frage

Ich habe eine Grafiksteuerung unterklebt, die einen Gerätekontextgriff, HDC, als Eingabe annimmt und diese zum Zeichnen verwendet. Meine neue Kontrolle ist nur die ursprüngliche Steuerung, die auf einem größeren Bild zentriert ist. Ich möchte in der Lage sein, die Methode der ursprünglichen Steuerung () für die Wiederverwendung von Code aufzurufen, aber ich bin mir nicht sicher, wie ich vorgehen soll.

Hier ist die Idee:

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
}
War es hilfreich?

Lösung

Ich denke, Sie sind möglicherweise verwirrt, was ein Gerätekontext ist. Ein Gerätekontext ist ein Ort im Speicher, an den Sie zeichnen können, sei es der Bildschirmpuffer oder eine Bitmap oder etwas anderes. Da ich mir vorstelle, dass Sie nur auf dem Bildschirm zeichnen möchten, brauchen Sie nur einen DC. Um das zu erreichen, was Sie wollen, würde ich empfehlen, ein Rechteck an die Funktion zu übergeben, die ihm mitteilt, wohin zu zeichnen ist. Optional und mit schlechterer Leistung können Sie eine neue Bitmap für den kleineren Bereich erstellen und der Funktion den DC des Bitmap zum Zeichnen geben. Jetzt, wo ich darüber nachdenke, könnte das überhaupt das gewesen sein: P Viel Glück!

Andere Tipps

Obwohl Sie nicht narrensicher sind, können Sie einen DC als Unterabschnitt eines DC vortäuschen, indem Sie eine Kombination von verwenden SetViewportorgex und SelectObject mit einer Region, die in den fraglichen Unterbereich abgeschnitten ist.

Das Problem bei diesem Ansatz ist, ob das Zeichnen von Code diese APIs bereits verwendet, um sich umzusetzen, um sich zu bewusst, dass er ihre Maskierung und den Ausgleich mit den vorhandenen Offsets und Clipping -Regionen verbinden muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top