| auteur : Farscape |
La technique:
On rajoute le style Notify dans la fonction PreSubclassWindow.
Sur le paint du static on laisse faire la classe de base mais on envoie un message privé pour terminer le dessin...
class CMyStatic : public CStatic
{
public :
CMyStatic ();
public :
public :
protected :
virtual void PreSubclassWindow ();
public :
virtual ~ CMyStatic ();
protected :
afx_msg void OnPaint ();
LRESULT AddPaint (UINT wParam,LONG lParam);
DECLARE_MESSAGE_MAP ()
} ;
|
# define WM_ADDPAINT WM_USER + 100
CMyStatic:: CMyStatic (){ }
CMyStatic:: ~ CMyStatic (){ }
BEGIN_MESSAGE_MAP (CMyStatic, CStatic)
ON_WM_PAINT ()
ON_MESSAGE (WM_ADDPAINT,AddPaint)
END_MESSAGE_MAP ()
void CMyStatic:: PreSubclassWindow ()
{
CStatic:: PreSubclassWindow ();
ModifyStyle (0 , SS_NOTIFY);
}
LRESULT CMyStatic:: AddPaint (UINT wParam, LONG lParam)
{
CDC * pTempDC= GetWindowDC ();
CRect rect;
GetWindowRect (& rect);
CPen Pen;
Pen.CreatePen (PS_SOLID, 2 , RGB (255 ,0 ,0 ));
CPen* OldPen = pTempDC- > SelectObject (& Pen);
pTempDC- > MoveTo (0 ,rect.Height ()/ 2 );
pTempDC- > LineTo (rect.Width (),rect.Height ()/ 2 );
pTempDC- > SelectObject (OldPen);
Pen.DeleteObject ();
ReleaseDC (pTempDC);
return 0 ;
}
void CMyStatic:: OnPaint ()
{
CStatic:: OnPaint ();
PostMessage (WM_ADDPAINT,0 ,0 );
}
|
|
| auteur : Farscape | Pour recevoir les notifications souris il faudra commencer par cocher l'option notify dans les ressources du static.
Dans le cas d'un static dynamique on rajoutera le style SS_NOTIFY dans le Create:
CStatic myStatic;
myStatic.Create (_T (" my static " ), WS_CHILD| WS_VISIBLE| SS_CENTER| SS_NOTIFY,
CRect (10 ,10 ,150 ,50 ), pParentWnd);
|
Après génération avec l'aide de classwizard d'une classe dérivée de CStatic,
il suffira d'intercepter le message reflected =BN_CLICKED pour un clic gauche ou le message WM_RBUTTONDOWN pour le clic droit .
|
Consultez les autres F.A.Q.
|
|