Question

MSDN suivant s'affiche dans le pour CreatePatternBrush:

Vous pouvez supprimer un modèle de brosse sans affectant le bitmap associés par à l'aide de la DeleteObject fonction.Par conséquent, vous pouvez ensuite utiliser cette bitmap pour créer n'importe quel nombre de patron les pinceaux.

Ma question est à l'opposé.Si le HBRUSH est de longue durée, puis-je supprimer le HBITMAP juste après que j'ai créer le pinceau?C'est à dire:le HBRUSH magasin de sa propre copie de la HBITMAP?

Dans ce cas, j'aimerais que la HBRUSH avoir la portée de l'objet tandis que la HBITMAP aurait la portée de la méthode (la méthode qui crée le HBRUSH).

Était-ce utile?

La solution

Le HBRUSH et HBITMAP sont entièrement indépendants.Les poignées peuvent être supprimés totalement indépendants les uns des autres, et, une fois créée, aucune modification de l'objet aura un effet sur l'autre.

Autres conseils

La brosse ne avoir sa propre copie de l'image bitmap.Ceci est facile à voir par la suppression de l'image bitmap après la création de la brosse, puis à l'aide de la brosse (fonctionne très bien)

À l'aide de la fonction GetObject pour remplir un LOGBRUSH structure sera de retour l'image d'origine de la poignée, dans des états lbhatch, bien que, et non pas la copie de la poignée, malheureusement.Et à l'aide de la fonction GetObject sur le revenu bitmap poignée échoue si l'image est supprimée.

Quiconque aucune idée de comment obtenir l'image d'origine dimensions de la brosse dans ce cas?Je souhaite créer une copie du modèle de brosse, même si l'image d'origine est supprimé.Je peux obtenir une copie de l'image d'origine simplement en peinture avec le pinceau, mais je ne sais pas c'est la taille.J'ai essayé d'utiliser SetbrushorgEx (hdc, -1,-1), en espérant que le -1 serait réduit modulo ses dimensions lorsqu'pinceau sélectionné dans le contexte de périphérique et obtenir les valeurs lorsque je récupère avec GetBrushOrgEx.Ne fonctionne pas.

Je pense que le bitmap doit survivre à la brosse:le pinceau références existantes bitmap plutôt que de copier.

Vous pouvez toujours essayer et voir ce qui s'est passé.

Je doute que les CreatePatternBrush() de l'API de copies de l'image bitmap vous donner, depuis un HBITMAP est:

  1. un descripteur de GDI, le nombre maximum de ce qui est limité, et
  2. potentiellement assez grand.

Win32 et GDI ont tendance à être conservateur sur la création interne des copies de vos données, si seulement parce que quand la plupart de leurs Api ont été créés (CreatePatternBrush() dates de Windows 95, et de nombreuses fonctions sont encore plus vieux), de la mémoire et de GDI poignées ont été beaucoup plus limitée de l'offre qu'ils sont maintenant.(Par exemple, Windows 95 a été nécessaire pour bien fonctionner sur un système avec seulement 4 MO de RAM.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top