CStatic调用DrawItem (偶尔原创)

class CStaticEx :public CStatic
{
public:
CStaticEx(void);
~CStaticEx(void);
public:
virtual void PreSubclassWindow();
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

}

CStaticEx, .cpp

BEGIN_MESSAGE_MAP(CStaticEx, CStatic)
//{{AFX_MSG_MAP(CStaticEx)
ON_WM_MOUSEMOVE()
//ON_WM_DRAWITEM()                   //如果写了这个消息,DrawItem将不会被调用
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
        ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CStaticEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
        CDC dc;
   RECT rect;
   dc.Attach(lpDrawItemStruct ->hDC);   //
   rect = lpDrawItemStruct->rcItem;     //Store the Button rect to our local rect.
   //dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));
   dc.FillSolidRect(&rect,RGB(100,100,255));//
   UINT state=lpDrawItemStruct->itemState;
   if((state & ODS_SELECTED))
   {
    //dc.FillSolidRect(&rect,RGB(233,100,255));//
    //dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);

   }
   else
   {
    //dc.FillSolidRect(&rect,RGB(233,100,255));//
    //dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
   }
   dc.SetBkColor(RGB(100,100,255));   //Setting the Text Background color
        dc.SetTextColor(RGB(255,0,0));     //Setting the Text Color
   dc.SetBkColor(RGB(100,100,255));   //Setting the Text Background color
        dc.SetTextColor(RGB(255,0,0));     //Setting the Text Color

        TCHAR buffer[MAX_PATH];           //To store the Caption of the button.
        ZeroMemory(buffer,MAX_PATH );     //Intializing the buffer to zero
        ::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); //Get the Caption of Button Window
   
        dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);//Redraw the Caption of Button Window
        dc.Detach(); // Detach the Button DC
}

网上也查过了一些例子,有人说CStaitc无法调用到DrawItem,经过我3个小时的碰运气,发现时可以调用的。

转载于:https://www.cnblogs.com/yuzhould/archive/2010/06/29/4455018.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值