sur WM_PAINT i effectuer les opérations suivantes:GDI + pas effacer ma fenêtre sur repeindre pour vista
//RectF mNameRect;
//WCHAR* mName;
//HWND mWin; // this is the window handle
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(mWin, &ps);
Graphics g(hdc);
g.Clear(Color::White);
StringFormat stringForm;
stringForm.SetLineAlignment(StringAlignmentCenter);
stringForm.SetAlignment(StringAlignmentCenter);
// set the rectangle to the size of the whole window
mNameRect.Width = static_cast<float>(size.cx);
mNameRect.Height = static_cast<float>(size.cy);
g.DrawString(mName, -1, &mNameFont, mNameRect, &stringForm, &mNameBrush);
EndPaint(mWin, &ps);
}
Dans XP cela fonctionne très bien, le MNAME est affiché au milieu de la fenêtre. Cependant sur Vista le texte ne bouge pas, il reste dans son emplacement peu importe comment je redimensionne la fenêtre. le g.Clear(Color::White)
ne semble pas faire la moindre différence. Le texte ne change même pas de position lorsque la fenêtre est cachée derrière une autre fenêtre et que le focus doit être repeint.
Comment faire pour que mName change de position dans Vista?
Edit: Le code de peinture est appelée par WM_PAINT et par WM_SIZE de la manière suivante:
// WndProc function
switch (msg){
case WM_SIZE:
// intentionally call paint when WM_SIZE is triggered
case WM_PAINT:
paint();
break;
Avez-vous vérifié que 'size' valeur change sur Vista? – Thomas
@Thomas: J'ai ajouté le code qui appelle la peinture. La taille est collectée via GetWindowRect() au début de paint(). Donc oui - la taille change ..:/ – Default