2 votes

Comment gérer l'événement du bouton poussoir sur la zone non client

EDIT : J'ai utilisé le code suivant pour dessiner un bouton poussoir dans la zone non cliente (la barre de titre) de ma fenêtre. Ma question est donc : est-il possible de gérer l'événement de clic de souris à partir de ce bouton ?

bool MainWindow::winEvent(MSG *pMessage, long *result)
{
    UINT m = pMessage->message;
    if(m == WM_NCPAINT || m == WM_ACTIVATE)
    {
        HWND id = winId();
        HDC hDeviceContext = GetWindowDC(id);
        RECT rc = {10, 10, 65, 25};
        DrawFrameControl(hDeviceContext, &rc, DFC_BUTTON, DFCS_BUTTONPUSH);
        ReleaseDC(id, hDeviceContext);
        return true;
    }
    return QWidget::winEvent(pMessage, result);
}

2voto

Captain Obvlious Points 11144

Oui, c'est assez facile à faire. Windows fournit plusieurs messages spécifiquement pour la zone non cliente. Par exemple, vous avez WM_NCMOUSEMOVE qui peut être géré de la même manière que WM_MOUSEMOVE mais spécifiquement pour la zone non cliente. La plupart des messages fonctionnent comme leurs homologues de la zone cliente et généralement avec les mêmes structures de données. Ci-dessous se trouve une liste des messages de la zone non cliente.

WM_NCCREATE
WM_NCDESTROY 
WM_NCCALCSIZE
WM_NCHITTEST 
WM_NCPAINT 
WM_NCACTIVATE

WM_NCMOUSEMOVE
WM_NCLBUTTONDOWN
WM_NCLBUTTONUP
WM_NCLBUTTONDBLCLK
WM_NCRBUTTONDOWN
WM_NCRBUTTONUP
WM_NCRBUTTONDBLCLK
WM_NCMBUTTONDOWN
WM_NCMBUTTONUP
WM_NCMBUTTONDBLCLK

WM_NCXBUTTONDOWN
WM_NCXBUTTONUP
WM_NCXBUTTONDBLCLK

WM_NCMOUSEHOVER
WM_NCMOUSELEAVE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X