cs_TeniX
Messages postés118Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention11 décembre 2011
-
26 avril 2011 à 19:07
cs_TeniX
Messages postés118Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention11 décembre 2011
-
27 avril 2011 à 17:04
Bonjour,
Je rencontre un problème d'affichage sur la barre de titre de mes fenêtres enfant MDI quand je suis en thème Office (Bleu,Noir,Argenté ou Cyan).
J'ai le bandeau inférieur qui se redessine mal (Sur quelques pixel). cf Screens
Quand je suis en thème XP sa semble Ok.
Voici la déclaration : (Fenêtre principale)
// crée la fenêtre frame MDI principale
pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
m_pMainWnd = pMainFrame;
J'ai laissé intact le code généré par VS2010 pour la gestion des thèmes
(Je n'ai pas c/c la fonction raison de longueur OnApplicationLook(theApp.m_nAppLook);)
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
OnApplicationLook(theApp.m_nAppLook);
Je crée ma fenêtre comme cela : (Child est la class dérivé de CMDIChildWndEx)
MainChild = new Child;
if (MainChild->Create("MDICLIENT",Network,
WS_CHILD|WS_OVERLAPPEDWINDOW,
CRect(0,0,800,400),((CMainFrame*)Parent))==0)
return false;
J'ai essayé plusieurs choses :
Dans le OnPaint() ou OnNcPaint()
J'ai utiliser InvalidateRect() , Invalidate() , DrawCaption()
Mais rien à faire !
Je n'utilise pas de CDocument , j'ai remarqué que les fenêtre MDI crée par un CDocument n'avait pas de genre de problème , mais je ne veux les utiliser
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 26 avril 2011 à 23:15
salut,
Peut-être une idée:
A la fin de ta fonction WndProc, rappelles-tu la fonction Windows par défaut ou retournes-tu en indiquant à Windows que le traitement est terminé.
cs_TeniX
Messages postés118Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention11 décembre 20112 27 avril 2011 à 15:09
J'ai trouvé une solution alternative , j'ai remarqué que par rapport à un thème classique le caption est un peu plus grand de 2 pixel , ce qui explique peut être le problème de dessin.
J'ai implémenté dans le NCPAINT ceci:
void Child::OnNcPaint()
{
// TODO: Add your message handler code here
// Do not call CMDIChildWndEx::OnNcPaint() for painting messages
CMDIChildWndEx::OnNcPaint();
CWindowDC dc(this);
CRect rect;
GetWindowRect(rect);
COLORREF c = GetPixel(dc,10,28);
CRect r = CRect(10,30,rect.Width()-10,32);
dc.FillSolidRect(r, c);
ReleaseDC(&dc);
}
Je dessine la ligne en prenant la couleur du pixel du dessus.