mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 20103 13 juil. 2006 à 14:00
Yo,
pour récuperer le hDC de ta pictureBox, tu doit passée son Handle en paramètre; le proto de la fonction étant:
HDC GetDC(
HWND hWnd // handle of window
);
Si tu récuperais le handle de l'écran avec getDC(0), c'est parceque windows considerais getDC(NULL), il renvoie la fenetre principale pour eviter des erreurs de mémoires.
Pour ce genre de questions, utilise WIN32 Programmer's Reference, qui contient TOUT les protos des fonctions contenu dans Windows.h, un gain de temps considérable.
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 20103 13 juil. 2006 à 15:05
re-salut,
même délire, voila le proto de la fonction:
HWND GetDlgItem(
HWND hDlg, // handle of dialog box
int nIDDlgItem // identifier of control
);
donc ca nous donne:
HWND CadreTest = GetDlgItem(HWND_Dlg,IDC_Cadre);
HWND_Dlg étant le handle de ta boite de dialogue (IDD_PROPPAGE5), que tu recupere avec le même procédé avec le Handle de ta fenetre principale si tu en as une, ou NULL. Ca donne HWND HWND_Dlg = getDlgItem(NULL,IDD_PROPPAGES);
Tes erreurs proviennent du fait que tu passe un IDC(int) en premier paramètre alors qu'il attends un HWND.
Voila les liens de WIN32 REFERENCE (2 part d'un .rar)
PS: CWnd est une structure propre aux classes crées pour visual C++, je te conseille d'utiliser les fonctions de windows.h directement (sous visual toujours), ce sera plus efficace je pense.
//-->méthode de vecchio56 // HDC hdc = ::GetDC(GetDlgItem(IDD_PROPPAGE5)->m_hWnd);
HDC hdc = ::GetDC(0); // <-- DC de l'écran
/* //Effacement de l'image précédente
HBITMAP BmpVide, Vide = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"",IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);
sizeDst.cx = 375;
sizeDst.cy = 150;
BmpVide = RedimBmp(hdc,Vide,rcSrc,sizeDst);
DrawBmp(hdc,704,642,BmpVide);
*/
//Taille de l'image Logo
Taille = GetBmpSize(image);
//Taille de l'image résultante
sizeDst = CalcDim(Taille,375,150);
m_DimBMP.Format("%d x %d -- %d x %d",Taille.cx,Taille.cy,sizeDst.cx,sizeDst.cy);
//Redimensionnement de l'image
NewBmp = RedimBmp(hdc,image,rcSrc,sizeDst);
//Affichage de l'image aux coordonnées choisies
DrawBmp(hdc,0,0,NewBmp);
}
***************************************************************************
Avec la méthode de vecchio56, plus d'erreur mais le programme plante complétement!
Avec la méthode de =182173 mad_love_disease, j'ai encore des erreurs de conversions de paramètres.
Je suis vraiment désolé de vous embeter, je sens que je suis pas loin mais je suis débutant et j'ai pas encore les automatismes!
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 20103 14 juil. 2006 à 11:53
La méthode de Vechio56 devrait fonctionner normalement. La mienne ne fonctionne pas car getDlgItem doit etre remplacer par getDlgItemInt pour recuperer le handle de IDC_CADRE, enfin je pense. Je pars en vacances dans 2 heures, je n'ai plus trop le temps de t'aider dsl.
Cependant, test ça vite fait:
CWnd * test=GetDlgItem(IDD_PROPPAGE5);
if(!test)
{
//message d'erreur, le pointeur est null
exit;
}
else
{
HDC hdc = GetDC(test->m_hWnd,IDC_Cadre);
}
voila, utilise win32 reference pour voir le type des parmatres des fonctions et ca devrait aller.
cs_Omeya
Messages postés28Date d'inscriptiondimanche 4 mai 2003StatutMembreDernière intervention10 août 2006 22 juil. 2006 à 23:59
Tiens, pour t'aider :)
/////////////////////////////////////////
//Ce bout de code simple mais très lent, permet d'afficher un point blanc en position (1,1)
//du cadre IDC_PICTURE de la boîte de dialogue MAINBOX :
HDC dc = GetDC(GetDlgItem(MAINBOX, IDC_PICTURE));
SetPixel(dc, 1, 1, 0xFFFFFF);
ReleaseDC( GetDlgItem(MAINBOX, IDC_PICTURE), dc );
/////////////////////////////////////////
Tu devrais pouvoir l'adapter sans problème à ton programme.
Toutefois, et j'insiste là-dessus, il est vraiment très lent à l'exécution. C'est à cause de l'instruction SetPixel.
Je te conseillerai de te pencher sur l'instruction SetDIBitsToDevice, apparemment bien plus performante.
cs_Omeya
Messages postés28Date d'inscriptiondimanche 4 mai 2003StatutMembreDernière intervention10 août 2006 23 juil. 2006 à 00:03
J'ai oublié de préciser que le point sera quasiment invisible si tu ne rafraichis pas l'affichage du cadre en permanence.
Une solution (mais ce n'est pas la meilleure) serait d'utiliser un thread qui afficherait le point blanc toutes les 10 millisecondes, par exemple.