Je voudrais afficher une image en fond d'une dialog (créée par DialogBox).
Sur le WM_PAINT de la callback dialog, j'entame un BeginPaint, bref le
truc classique, mais l'image n'apparaît pas.
Le WM_PAINT d'une callback dialog est-il différent du WM_PAINT d'une
wndProc ? Dois-je sous-classer la dialog ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian ASTOR
lgloub wrote:
Je voudrais afficher une image en fond d'une dialog (créée par DialogBox). Sur le WM_PAINT de la callback dialog, j'entame un BeginPaint, bref le truc classique, mais l'image n'apparaît pas. Le WM_PAINT d'une callback dialog est-il différent du WM_PAINT d'une wndProc ? Dois-je sous-classer la dialog ?
Non, c'est pareil. Une des petites différences est juste que le style de la classe de Dlg par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce qui fait que le WM_PAINT n'est pas appelé qd on resize (soit subclassing, soit SetClassLong() ds ce cas)
lgloub wrote:
Je voudrais afficher une image en fond d'une dialog (créée par DialogBox).
Sur le WM_PAINT de la callback dialog, j'entame un BeginPaint, bref le
truc classique, mais l'image n'apparaît pas.
Le WM_PAINT d'une callback dialog est-il différent du WM_PAINT d'une
wndProc ? Dois-je sous-classer la dialog ?
Non, c'est pareil.
Une des petites différences est juste que le style de la classe de Dlg
par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce
qui fait que le WM_PAINT n'est pas appelé qd on resize (soit
subclassing, soit SetClassLong() ds ce cas)
Je voudrais afficher une image en fond d'une dialog (créée par DialogBox). Sur le WM_PAINT de la callback dialog, j'entame un BeginPaint, bref le truc classique, mais l'image n'apparaît pas. Le WM_PAINT d'une callback dialog est-il différent du WM_PAINT d'une wndProc ? Dois-je sous-classer la dialog ?
Non, c'est pareil. Une des petites différences est juste que le style de la classe de Dlg par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce qui fait que le WM_PAINT n'est pas appelé qd on resize (soit subclassing, soit SetClassLong() ds ce cas)
lgloub
> Non, c'est pareil. Une des petites différences est juste que le style de la classe de Dlg par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce qui fait que le WM_PAINT n'est pas appelé qd on resize (soit subclassing, soit SetClassLong() ds ce cas)
Merci pour ces précisions. Mais alors je comprends pas pourquoi l'image s'affiche pas :
Apparemment il n'y a pas de WM_CREATE sur une dialog. J'ai donc essayé de charger la bitmap à d'autres endroits (WM_INITDIALOG, WM_PAINT, WM_CREATE de la winmain), mais rien ne marche. if(g_hBmDlgBack == NULL) g_hBmDlgBack = LoadBitmap(g_hInstance, MAKEINTRESOURCE(ID_BTM_DLGBACK));
Doit y avoir une erreur dans mon WM_PAINT ?
> Non, c'est pareil.
Une des petites différences est juste que le style de la classe de Dlg
par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce
qui fait que le WM_PAINT n'est pas appelé qd on resize (soit
subclassing, soit SetClassLong() ds ce cas)
Merci pour ces précisions.
Mais alors je comprends pas pourquoi l'image s'affiche pas :
Apparemment il n'y a pas de WM_CREATE sur une dialog. J'ai donc essayé
de charger la bitmap à d'autres endroits (WM_INITDIALOG, WM_PAINT,
WM_CREATE de la winmain), mais rien ne marche.
if(g_hBmDlgBack == NULL)
g_hBmDlgBack = LoadBitmap(g_hInstance,
MAKEINTRESOURCE(ID_BTM_DLGBACK));
> Non, c'est pareil. Une des petites différences est juste que le style de la classe de Dlg par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce qui fait que le WM_PAINT n'est pas appelé qd on resize (soit subclassing, soit SetClassLong() ds ce cas)
Merci pour ces précisions. Mais alors je comprends pas pourquoi l'image s'affiche pas :
Apparemment il n'y a pas de WM_CREATE sur une dialog. J'ai donc essayé de charger la bitmap à d'autres endroits (WM_INITDIALOG, WM_PAINT, WM_CREATE de la winmain), mais rien ne marche. if(g_hBmDlgBack == NULL) g_hBmDlgBack = LoadBitmap(g_hInstance, MAKEINTRESOURCE(ID_BTM_DLGBACK));
Doit y avoir une erreur dans mon WM_PAINT ?
Christian ASTOR
lgloub wrote:
Doit y avoir une erreur dans mon WM_PAINT ?
Non, il est correct (à part return TRUE au lieu de FALSE, mais pas grave) Si je le copie tel quel ds 1 de mes Dlg, ça marche très bien. (s'assurant que g_hBmDlgBack est bien renseigné, ds le WM_INITDIALOG) Sorry, pas d'autres idées sans plus d'éléments...
lgloub wrote:
Doit y avoir une erreur dans mon WM_PAINT ?
Non, il est correct (à part return TRUE au lieu de FALSE, mais pas grave)
Si je le copie tel quel ds 1 de mes Dlg, ça marche très bien.
(s'assurant que g_hBmDlgBack est bien renseigné, ds le WM_INITDIALOG)
Sorry, pas d'autres idées sans plus d'éléments...
Non, il est correct (à part return TRUE au lieu de FALSE, mais pas grave) Si je le copie tel quel ds 1 de mes Dlg, ça marche très bien. (s'assurant que g_hBmDlgBack est bien renseigné, ds le WM_INITDIALOG) Sorry, pas d'autres idées sans plus d'éléments...
lgloub
> Non, il est correct (à part return TRUE au lieu de FALSE, mais pas grave) Si je le copie tel quel ds 1 de mes Dlg, ça marche très bien. (s'assurant que g_hBmDlgBack est bien renseigné, ds le WM_INITDIALOG) Sorry, pas d'autres idées sans plus d'éléments...
Effectivement, la ressource veut un bmp, j'avais mis un jpg... :( Autre question : je dois apparemment utiliser DeleteObject pour libérer la bitmap. Je le fais sur le WM_CLOSE, ou le mot-clé DISCARDABLE assure la libération ?
En tout cas merci pour ta constante aide ;)
> Non, il est correct (à part return TRUE au lieu de FALSE, mais pas grave)
Si je le copie tel quel ds 1 de mes Dlg, ça marche très bien.
(s'assurant que g_hBmDlgBack est bien renseigné, ds le WM_INITDIALOG)
Sorry, pas d'autres idées sans plus d'éléments...
Effectivement, la ressource veut un bmp, j'avais mis un jpg... :(
Autre question : je dois apparemment utiliser DeleteObject pour libérer
la bitmap. Je le fais sur le WM_CLOSE, ou le mot-clé DISCARDABLE assure
la libération ?
> Non, il est correct (à part return TRUE au lieu de FALSE, mais pas grave) Si je le copie tel quel ds 1 de mes Dlg, ça marche très bien. (s'assurant que g_hBmDlgBack est bien renseigné, ds le WM_INITDIALOG) Sorry, pas d'autres idées sans plus d'éléments...
Effectivement, la ressource veut un bmp, j'avais mis un jpg... :( Autre question : je dois apparemment utiliser DeleteObject pour libérer la bitmap. Je le fais sur le WM_CLOSE, ou le mot-clé DISCARDABLE assure la libération ?
En tout cas merci pour ta constante aide ;)
lgloub
Christian ASTOR wrote:
DISCARDABLE est un reliquat 16-bits, gardé pour compatibilité ascendante. On libère ds le WM_DESTROY ou WM_NCDESTROY.
ok, merci.
Christian ASTOR wrote:
DISCARDABLE est un reliquat 16-bits, gardé pour compatibilité ascendante.
On libère ds le WM_DESTROY ou WM_NCDESTROY.
DISCARDABLE est un reliquat 16-bits, gardé pour compatibilité ascendante. On libère ds le WM_DESTROY ou WM_NCDESTROY.
ok, merci.
Christian ASTOR
lgloub wrote:
Autre question : je dois apparemment utiliser DeleteObject pour libérer la bitmap. Je le fais sur le WM_CLOSE, ou le mot-clé DISCARDABLE assure la libération ?
DISCARDABLE est un reliquat 16-bits, gardé pour compatibilité ascendante. On libère ds le WM_DESTROY ou WM_NCDESTROY.
lgloub wrote:
Autre question : je dois apparemment utiliser DeleteObject pour libérer
la bitmap. Je le fais sur le WM_CLOSE, ou le mot-clé DISCARDABLE assure
la libération ?
DISCARDABLE est un reliquat 16-bits, gardé pour compatibilité ascendante.
On libère ds le WM_DESTROY ou WM_NCDESTROY.
Autre question : je dois apparemment utiliser DeleteObject pour libérer la bitmap. Je le fais sur le WM_CLOSE, ou le mot-clé DISCARDABLE assure la libération ?
DISCARDABLE est un reliquat 16-bits, gardé pour compatibilité ascendante. On libère ds le WM_DESTROY ou WM_NCDESTROY.
Vincent Burel
"lgloub" wrote in message news:3fa4fd20$0$255$
> Non, c'est pareil. > Une des petites différences est juste que le style de la classe de Dlg > par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce > qui fait que le WM_PAINT n'est pas appelé qd on resize (soit > subclassing, soit SetClassLong() ds ce cas)
Merci pour ces précisions. Mais alors je comprends pas pourquoi l'image s'affiche pas :
si c'est un fond, on le fait généralement sur le WM_ERASEBKGND la dc est fournit par le WPARAM.
cela permet notamment des optim avec InvalidateRect provocant ou non le ré-affichage du background : le décord(WM_ERASEBKGND) ou seulement de l'affichage significatif (WM_PAINT)
VB
"lgloub" <lgloub@free.fr> wrote in message
news:3fa4fd20$0$255$636a55ce@news.free.fr...
> Non, c'est pareil.
> Une des petites différences est juste que le style de la classe de Dlg
> par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce
> qui fait que le WM_PAINT n'est pas appelé qd on resize (soit
> subclassing, soit SetClassLong() ds ce cas)
Merci pour ces précisions.
Mais alors je comprends pas pourquoi l'image s'affiche pas :
si c'est un fond, on le fait généralement sur le
WM_ERASEBKGND
la dc est fournit par le WPARAM.
cela permet notamment des optim avec InvalidateRect provocant ou non le
ré-affichage du background : le décord(WM_ERASEBKGND) ou seulement de
l'affichage significatif (WM_PAINT)
> Non, c'est pareil. > Une des petites différences est juste que le style de la classe de Dlg > par défaut (#32770) n'a pas des flags comme CS_HREDRAW, CS_VREDRAW, ce > qui fait que le WM_PAINT n'est pas appelé qd on resize (soit > subclassing, soit SetClassLong() ds ce cas)
Merci pour ces précisions. Mais alors je comprends pas pourquoi l'image s'affiche pas :
si c'est un fond, on le fait généralement sur le WM_ERASEBKGND la dc est fournit par le WPARAM.
cela permet notamment des optim avec InvalidateRect provocant ou non le ré-affichage du background : le décord(WM_ERASEBKGND) ou seulement de l'affichage significatif (WM_PAINT)
VB
lgloub
> si c'est un fond, on le fait généralement sur le WM_ERASEBKGND la dc est fournit par le WPARAM.
cela permet notamment des optim avec InvalidateRect provocant ou non le ré-affichage du background : le décord(WM_ERASEBKGND) ou seulement de l'affichage significatif (WM_PAINT)
Merci. Une précision qui me sera précieuse ;)
> si c'est un fond, on le fait généralement sur le
WM_ERASEBKGND
la dc est fournit par le WPARAM.
cela permet notamment des optim avec InvalidateRect provocant ou non le
ré-affichage du background : le décord(WM_ERASEBKGND) ou seulement de
l'affichage significatif (WM_PAINT)
> si c'est un fond, on le fait généralement sur le WM_ERASEBKGND la dc est fournit par le WPARAM.
cela permet notamment des optim avec InvalidateRect provocant ou non le ré-affichage du background : le décord(WM_ERASEBKGND) ou seulement de l'affichage significatif (WM_PAINT)