Posso creare un contesto di periferica che è solo una parte di un altro contesto di dispositivo?

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

  •  13-10-2019
  •  | 
  •  

Domanda

Ho sottoclasse un controllo grafica che prende una maniglia contesto di periferica, HDC, come input e usi che per il disegno. Il mio nuovo controllo è solo il controllo originale centrata sulla cima di un'immagine ingrandita. Mi piacerebbe essere in grado di chiamare Draw del controllo originale () metodo per riutilizzo del codice, ma sono sicuri di come procedere.

Ecco l'idea:

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
}
È stato utile?

Soluzione

penso che si può essere confusi su ciò che un contesto di periferica è. Un contesto di periferica è un luogo in memoria che è possibile disegnare a, sia esso il buffer dello schermo o di una bitmap o qualcos'altro. Dal momento che immagino si desidera solo disegnare sullo schermo, è necessario un solo DC. Per realizzare ciò che si vuole, mi sento di raccomandare il superamento di un rettangolo per la funzione che gli dice dove tracciare. Opzionalmente, e con prestazioni più povere, si potrebbe creare un nuovo Bitmap per l'area più piccola, e dare la funzione CC del bitmap a cui attingere. Ora che ci penso, che avrebbe potuto essere quello che volevi dire, in primo luogo: P! In bocca al lupo

Altri suggerimenti

Anche se non infallibile, è possibile simulare un DC come una sottosezione di un DC utilizzando una combinazione di SetViewportOrgEx e SelezionaOggetto con una regione agganciato alla zona sub in questione.

Il problema con questo approccio è che se il codice disegno già utilizza queste API necessari per riscritto per essere consapevoli che è necessario combinare la sua mascheratura e compensazione con gli offset esistenti e di clipping regioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top