Forum Clubic

[C++] - redessiner une page?

Bonjour, j’ai un petit problème avec une de mes pages (modeless dialog).

J’ai une petit bout de code qui me permet de calculer un point x,y,z et mon but et l’afficher a chaque fois qu’il change, voici mon code:


// Boîte de dialogue CCalculatePoints

IMPLEMENT_DYNAMIC(CCalculatePoints, CDialog)

CCalculatePoints::CCalculatePoints(CWnd* pParent /*=NULL*/)
	: CDialog(CCalculatePoints::IDD, pParent)
{
	varXDot1 = 0;
	varYDot1 = 0;
	varXDot2 = 0;
	varYDot2 = 0;

}

void CCalculatePoints::CalculatePos()
{
	//calcule de nouveau x,y

        varXDot1 = varXDot1 *5;
	varYDot1 = varYDot1 *5;
	varXDot2 = varXDot2 *15;
	varYDot2 = varYDot2 *15;


        // J'ai testé toute les méthodes ci-dessous sans succès.
	//this->Invalidate();
	//OnPaint();
	//Repaint();
	/*InvalidateRect(
	Invalidate(

	HWND hWnd= (HWND)cvGetWindowHandle("window name");

                        ::SendMessage(hWnd,WM_PAINT,NULL,NULL);*/

}

void CCalculatePoints::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO : ajoutez ici le code de votre gestionnaire de messages
	// N'appelez pas CDialog::OnPaint() pour la peinture des messages

	CBrush brush(0x00FFFFFF);
	dc.SelectObject(&brush);
	dc.Ellipse(int(varXDot1)-10,int(varYDot1)-10,int(varXDot1)+10,int(varYDot1)+10);
}

CCalculatePoints::~CCalculatePoints()
{
}

void CCalculatePoints::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CCalculatePoints, CDialog)
	ON_WM_PAINT()
END_MESSAGE_MAP()

Lors du démarrage de mon prog, il affiche bien mon premier cercle, mais par la suite, je peux pas le redessiner avec les nouvelles valeurs…

Merci de me mettre sur la voie…

kiev333

Je n’utilise pas les MFC mais ce que je fait en WINAPI, c’est d’utiliser le double buffering : j’écris dans un buffer compatible bitmap (createcompatiblebitmap), une fois les opérations effectuées, je blit le tout sur la surface d’affichage.

ok, merci

j’ai trouvé, c’est tout simplement InvalidateRect(NULL, TRUE);

merci

Nickel mais si tu as un effet de scintillement lors de tes animations, pense au double buffering :wink: