2008-09-19 6 views

Répondre

12

Charlie a frappé la réponse avec WM_NCPAINT. Si vous utilisez MFC, le code ressemblerait à ceci:

// in the message map 
ON_WM_NCPAINT() 

// ... 

void CMainFrame::OnNcPaint() 
{ 
    // still want the menu to be drawn, so trigger default handler first 
    Default(); 

    // get menu bar bounds 
    MENUBARINFO menuInfo = {sizeof(MENUBARINFO)}; 
    if (GetMenuBarInfo(OBJID_MENU, 0, &menuInfo)) 
    { 
     CRect windowBounds; 
     GetWindowRect(&windowBounds); 
     CRect menuBounds(menuInfo.rcBar); 
     menuBounds.OffsetRect(-windowBounds.TopLeft()); 

     // horrible, horrible icon-drawing code. Don't use this. Seriously. 
     CWindowDC dc(this); 
     HICON appIcon = (HICON)::LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); 
     ::DrawIconEx(dc, menuBounds.right-18, menuBounds.top+2, appIcon, 0,0, 0, NULL, DI_NORMAL); 
     ::DestroyIcon(appIcon); 
    } 
} 
3

Afin de dessiner dans la zone non-client, vous devez obtenir le DC "fenêtre" (plutôt que DC "client"), et dessiner dans la "fenêtre" DC.

3

Si vous voulez simplement quelque chose dans la barre de menu, il est peut-être plus facile/plus propre de l'ajouter comme élément de menu aligné à droite. De cette façon, il fonctionnera également avec différents thèmes Windows, etc.

4

Vous devriez essayer de gérer WM_NCPAINT. Ceci est similaire à un message WM_PAINT normal, mais concerne la totalité de la fenêtre plutôt que la zone cliente. Les documents MSDN sur WM_NCPAINT fournissent le code suivant exemple:

case WM_NCPAINT: 
{ 
HDC hdc; 
hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN); 
// Paint into this DC 
ReleaseDC(hwnd, hdc); 
} 

Ce code est destiné à être utilisé dans la boucle de message de votre applicaton, qui est canoniquement organisé en utilisant une grande instruction « switch ».

Comme indiqué dans l'exemple MFC de Shog, veillez à appeler la version par défaut, qui, dans cet exemple, signifierait un appel à DefWindowProc.

Questions connexes