Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Impression d'une dialogbox

5 réponses
Avatar
Frd
Bonjour


je souhaite envoyer le contenu de plusieurs dialogbox dans un buffer image.
Les dialogbox ne sont pas affichées à l'écran.
Pour ça, j'ai donc créé un bitmap et un device context (pDC) et je
parcours les dialogbox une à une

char szClass[255];

CWnd* pWnd = pDlg->GetWindow(GW_CHILD);

GetClassName(pWnd->m_hWnd,szClass,255);
DWORD dwStyle = pWnd->GetStyle();

if( strcmp(szClass,"Static")==0 )

//si c'est du texte pas de problème
pDC->DrawText(csTxt,...);

//mais quand c'est une image
if ((dwStyle & SS_BITMAP) == SS_BITMAP)
je n'arrive pas à avoir la main sur l'image.

Si je pouvais récupérer le numéro de la ressource qq part ça m'irait,
mais je sais pas comment récupérer cette valeur, doit bien y avoir une
fonction proche du GetClassName et du GetStyle mais je la trouve pas.

Comment qu'on fait ?

Merci d'avance.

5 réponses

Avatar
Christian ASTOR
Frd a écrit :

je souhaite envoyer le contenu de plusieurs dialogbox dans un buffer image.
Les dialogbox ne sont pas affichées à l'écran.
Pour ça, j'ai donc créé un bitmap et un device context (pDC) et je
parcours les dialogbox une à une
char szClass[255];
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
GetClassName(pWnd->m_hWnd,szClass,255);
DWORD dwStyle = pWnd->GetStyle();
if( strcmp(szClass,"Static")==0 )

//si c'est du texte pas de problème
pDC->DrawText(csTxt,...);

//mais quand c'est une image
if ((dwStyle& SS_BITMAP) == SS_BITMAP)
je n'arrive pas à avoir la main sur l'image.



WM_PRINTCLIENT
Avatar
Frd
Le 15/04/2011 17:19, Christian ASTOR a écrit :

je souhaite envoyer le contenu de plusieurs dialogbox dans un buffer image.
Les dialogbox ne sont pas affichées à l'écran.
Pour ça, j'ai donc créé un bitmap et un device context (pDC) et je
parcours les dialogbox une à une
char szClass[255];
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
GetClassName(pWnd->m_hWnd,szClass,255);
DWORD dwStyle = pWnd->GetStyle();



WM_PRINTCLIENT




Salut

quand je fais
SendMessage(pWnd->m_hWnd, WM_PRINTCLIENT, (WPARAM) pDC->m_hDC,
PRF_CLIENT );

ou même

pWnd->PrintClient(pDC, PRF_CLIENT);

le bitmap est bien affiché, mais il apparait en 0,0 du device context.
Et un
pDC->MoveTo(x, y);
n'y change rien...

Merci pour la piste
Avatar
Christian ASTOR
Frd a écrit :

Salut

quand je fais
SendMessage(pWnd->m_hWnd, WM_PRINTCLIENT, (WPARAM) pDC->m_hDC,
PRF_CLIENT );

ou même

pWnd->PrintClient(pDC, PRF_CLIENT);

le bitmap est bien affiché, mais il apparait en 0,0 du device context.
Et un
pDC->MoveTo(x, y);
n'y change rien...



Oui, normal, MoveTo() n'est pas fait pour ça.
On envoie WM_PRINTCLIENT dans un Memory DC, où on le triture comme on
veut, et on le blitte au final par BitBlt() par exemple, vers le HDC final.
Avatar
Frd
Le 18/04/2011 16:15, Christian ASTOR a écrit :
Frd a écrit :

Salut

quand je fais
SendMessage(pWnd->m_hWnd, WM_PRINTCLIENT, (WPARAM) pDC->m_hDC,
PRF_CLIENT );

ou même

pWnd->PrintClient(pDC, PRF_CLIENT);

le bitmap est bien affiché, mais il apparait en 0,0 du device context.
Et un
pDC->MoveTo(x, y);
n'y change rien...



Oui, normal, MoveTo() n'est pas fait pour ça.
On envoie WM_PRINTCLIENT dans un Memory DC, où on le triture comme on
veut, et on le blitte au final par BitBlt() par exemple, vers le HDC final.



Je vois.

Mais j'ai trouvé un tantinet plus simple

CPoint oldPoint = pDC->SetViewportOrg(x, y);
pWnd->PrintClient(pDC, PRF_CLIENT);
pDC->SetViewportOrg(oldPoint);

ça fait exactement ce que je veux !

Merci à toi.
Avatar
Frd
Le 18/04/2011 16:24, Frd a écrit :
Oui, normal, MoveTo() n'est pas fait pour ça.
On envoie WM_PRINTCLIENT dans un Memory DC, où on le triture comme on
veut, et on le blitte au final par BitBlt() par exemple, vers le HDC final.



Je vois.

Mais j'ai trouvé un tantinet plus simple

CPoint oldPoint = pDC->SetViewportOrg(x, y);
pWnd->PrintClient(pDC, PRF_CLIENT);
pDC->SetViewportOrg(oldPoint);

ça fait exactement ce que je veux !

Merci à toi.



Bon ben c'est pas encore gagné !
Pour l'export dans une image ça fonctionne, mais pour envoyer vers un
PrinterDC j'ai encore un petit problème de positionnement.