2010-05-06 14 views
1

Ou dans mon cas particulier une région de windows (HRGN)?Est-il possible de dupliquer un handle GDI?

Mise à jour: Les problèmes sont les suivants:

J'ai une collection d'objets, chacun de ces objets peut contenir HRGN. Cette région une fois acquise est libérée lorsque l'objet est détruit. Puisque certains de ces objets sont stockés dans un vecteur std ::, je dois définir un opérateur d'assignation.

Jusqu'à présent, je viens d'assigner ces HRGN, mais c'est un bug. Si je duplique de tels objets, chacun d'entre eux essaiera de supprimer la même région, et l'un d'entre eux utilisera une région inexistante.

+1

Pourquoi voulez-vous dupliquer la poignée? Il y a probablement une solution à votre problème, mais vous devez donner plus de contexte (et éventuellement des extraits de code). –

+0

Merci, j'ai ajouté une partie du contexte. – Ismael

Répondre

2

Envelopper chaque HRGN dans un objet de comptage de référence modélisé après tout pointeur intelligent, par ex. shared_ptr.

3

Non, ce n'est pas possible. Les objets GDI ne prennent en charge qu'un seul handle par objet.

+0

J'espérais qu'il me manquait un appel d'api, il me semble que la solution de correction est de garder une référence moi-même. Je vous remercie. – Ismael

4

Vous ne pouvez pas créer de doublon de poignée HRGN, mais vous pouvez obtenir une copie en utilisant la fonction CombineRgn.

+0

Je pensais à cela en utilisant RGN_COPY, mais je ne savais pas comment créer une région vide. – Ismael

+0

Mauvaise idée, le tas GDI est très limité au moins sur les anciens systèmes d'exploitation. –

+0

Oui, vous avez raison, je n'ai pas considéré cela. – Ismael