不要网上自编的封装类库能给出实际代码吗?  谢谢

解决方案 »

  1.   

    OnCtlColor可以设置Button的背景颜色,在网上找找,很多的
      

  2.   

    汗! OnCtlColor不可以可以设置按键Button的背景颜色哦
      

  3.   

    OnCtlColor不可以可以设置按键Button的背景颜色
    自画吧
    CBitmapButton可以加载图片
      

  4.   

    如何设置Button1的背景颜色、和加载图片作为背景
    -----------两个要求都可以自己封装 CMyButton实现 自画 实现。
      

  5.   


    我感觉很奇怪的是,采用这个帖子里“wangpanli(红尘有爱) ”的方法,能编译0错,可是自从第三步开始,就编译无误后,却显示不出来运行的对话框界面,郁闷:-------------------------------------------------------------------------------------
    http://community.csdn.net/Expert/topic/5036/5036903.xml?temp=.9795648使用CBitmapButton实现如下(假如按钮在对话框中,ID为IDC_BUTTON1):
    1、插入两个位图资源IDB_RED和IDB_BLUE。2、在按钮的属性中将Owner Draw 和Bitmap选上。3、在按钮所在对话框类加入CBitmapButton类型成员变量m_btn如下:
    CBitmapButton m_btn;4、初始化时(OnInitDialog函数),调用AutoLoad()函数将按钮与CBitmapButton类对象关联:
    m_btn.AutoLoad(IDC_BUTTON1, this);5、在你需要修改位图的地方如下调用:m_btn.LoadBitmaps(IDB_RED);
    m_btn.RedrawWindow();

    m_btn.LoadBitmaps(IDB_BLUE);
    m_btn.RedrawWindow();
    来实现更换位图显示。
      

  6.   

    重装vc 实现了“wangpanli(红尘有爱) ”的方法
    可是这样的图片按钮比较呆板,怎样捕捉鼠标moveover/按下/松开/moveout这些事件 得到比较弹性的变化呢?看了类向导里面 对按钮却只有单击/双击两个事件.
      

  7.   

    #pragma once
    // CMENU_WndItem
    class CMENU_WndItem : public CButton
    {
    DECLARE_DYNAMIC(CMENU_WndItem)public:
    CMENU_WndItem();
    virtual ~CMENU_WndItem();
    private:
    CString m_szCaption;
    CBitmap m_bitmap1;
    CBitmap m_bitmap2;
    bool m_bHiLight; //Hight Light the Item
    CFont font;
    CDC memDC;
    bool m_bSavedDC;
    bool m_bLBOK;
    protected:
    DECLARE_MESSAGE_MAP()
    public:
    // 创建按钮控件
    virtual BOOL Create(LPCTSTR szCaption, CWnd* pParent, CRect& rect, UINT uID);
    virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
    afx_msg void OnTimer(UINT nIDEvent);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    };
      

  8.   

    // MENU_WndItem.cpp : 实现文件
    //#include "stdafx.h"
    #include "SYS_HYVDSAPP.h"
    #include "MENU_WndItem.h"
    #include ".\menu_wnditem.h"// CMENU_WndItem
    IMPLEMENT_DYNAMIC(CMENU_WndItem, CButton)
    CMENU_WndItem::CMENU_WndItem()
    {
    m_bitmap1.LoadBitmap(IDB_MENUITEM_01);
    m_bitmap2.LoadBitmap(IDB_MENUITEM_02);
    m_bHiLight = false;
    font.CreateFont(20,0,0,0,FW_BOLD,0,0,0,0,0,0,0,0,_T("宋体"));
    m_bSavedDC = false;
    m_bLBOK = false;
    }CMENU_WndItem::~CMENU_WndItem()
    {
    if (m_bitmap1.m_hObject != NULL)
    m_bitmap1.DeleteObject();
    if (m_bitmap2.m_hObject != NULL)
    m_bitmap2.DeleteObject();
    font.DeleteObject();
    }
    BEGIN_MESSAGE_MAP(CMENU_WndItem, CButton)
    ON_WM_TIMER()
    ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONUP()
    ON_WM_ERASEBKGND()
    ON_WM_LBUTTONDOWN()
    END_MESSAGE_MAP()// 创建按钮控件
    BOOL CMENU_WndItem::Create(LPCTSTR szCaption, CWnd* pParent, CRect& rect, UINT uID)
    {
    DWORD dwStyle = BS_PUSHBUTTON | BS_OWNERDRAW | WS_TABSTOP;
    m_szCaption = szCaption;
    BOOL m_bRet = CButton::Create(szCaption,dwStyle,rect,pParent,uID);
    return m_bRet;
    }void CMENU_WndItem::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    if (lpDrawItemStruct->CtlType == ODT_BUTTON)
    {
    CDC dc;
    CRect rcClient(lpDrawItemStruct->rcItem);
    UINT uState = lpDrawItemStruct->itemState;
    UINT uAction = lpDrawItemStruct->itemAction;
    BITMAP bm;

    dc.Attach(lpDrawItemStruct->hDC);
    CRect rcText(rcClient);
    ASSERT(font.m_hObject != NULL);
    CFont* pOldFont =(CFont*)dc.SelectObject(&font); dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&memDC,0,0,SRCCOPY);
    dc.SetBkMode(TRANSPARENT);
    if (uState & ODS_SELECTED) //选中
    {
    rcClient.DeflateRect(2,2,0,0);
    rcText.DeflateRect(2,2,0,0);
    m_bitmap2.GetBitmap(&bm);
    if (rcClient.Height()>= bm.bmHeight)
    {
    CSYS_PublicFun::GUI_DrawTransparentBitmap(dc.GetSafeHdc(),(HBITMAP)m_bitmap2,0,(rcClient.Height() - bm.bmHeight)/2,RGB(255,0,255));
    rcText.DeflateRect(bm.bmWidth,0,0,0);
    }
    rcText.DeflateRect(10,0,0,0);
    dc.SetTextColor(RGB(65,156,232));
    dc.DrawText(m_szCaption,&rcText,DT_SINGLELINE | DT_VCENTER | DT_LEFT);
    rcText.DeflateRect(2,0,0,0);
    dc.SetTextColor(RGB(48,132,222));
    dc.DrawText(m_szCaption,&rcText,DT_SINGLELINE | DT_VCENTER | DT_LEFT);
    }
    else
    {
    if (m_bHiLight)
    {
    m_bitmap2.GetBitmap(&bm);
    if (rcClient.Height()>= bm.bmHeight)
    {
    CSYS_PublicFun::GUI_DrawTransparentBitmap(dc.GetSafeHdc(),(HBITMAP)m_bitmap2,0,(rcClient.Height() - bm.bmHeight)/2,RGB(255,0,255));
    rcText.DeflateRect(bm.bmWidth,0,0,0);
    }
    rcText.DeflateRect(10,0,0,0);
    dc.SetTextColor(RGB(65,156,232));
    dc.DrawText(m_szCaption,&rcText,DT_SINGLELINE | DT_VCENTER | DT_LEFT);
    rcText.DeflateRect(2,0,0,0);
    dc.SetTextColor(RGB(48,132,222));
    dc.DrawText(m_szCaption,&rcText,DT_SINGLELINE | DT_VCENTER | DT_LEFT);
    }
    else
    {
    m_bitmap1.GetBitmap(&bm);
    if (rcClient.Height()>= bm.bmHeight)
    {
    CSYS_PublicFun::GUI_DrawTransparentBitmap(dc.GetSafeHdc(),(HBITMAP)m_bitmap1,0,(rcClient.Height() - bm.bmHeight)/2,RGB(255,0,255));
    rcText.DeflateRect(bm.bmWidth,0,0,0);
    }
    rcText.DeflateRect(10,0,0,0);
    dc.SetTextColor(RGB(208,193,193));
    dc.DrawText(m_szCaption,&rcText,DT_SINGLELINE | DT_VCENTER | DT_LEFT);
    rcText.DeflateRect(3,3,0,0);
    dc.SetTextColor(RGB(90,89,90));
    dc.DrawText(m_szCaption,&rcText,DT_SINGLELINE | DT_VCENTER | DT_LEFT);
    }
    }
    dc.SelectObject(pOldFont);
    }
    }
    void CMENU_WndItem::OnTimer(UINT nIDEvent)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (nIDEvent == 1001)
    {
    CRect rcClient;
    CPoint pt;
    GetWindowRect(&rcClient);
    GetCursorPos(&pt);
    if (rcClient.PtInRect(pt))
    {
    if (!m_bHiLight)
    {
    m_bHiLight = true;
    Invalidate(true);
    SetCapture();
    }
    }
    else
    {
    m_bHiLight = false;
    Invalidate(true);
    ReleaseCapture();
    KillTimer(1001);
    } }
    CButton::OnTimer(nIDEvent);
    }void CMENU_WndItem::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (GetActiveWindow()->GetSafeHwnd() == GetParent()->m_hWnd)
    {
    SetTimer(1001,10,NULL);
    }
    CButton::OnMouseMove(nFlags, point);
    }void CMENU_WndItem::OnLButtonUp(UINT nFlags, CPoint point)
    {
    CRect rcClient;
    GetWindowRect(&rcClient);
    if (rcClient.PtInRect(point))
    {
    if (m_bLBOK)
    {
    m_bLBOK = false;
    m_bHiLight = false;
    ReleaseCapture();
    }
    Invalidate(true);
    }
    CButton::OnLButtonUp(nFlags, point);
    }
    BOOL CMENU_WndItem::OnEraseBkgnd(CDC* pDC)
    {
    if (!m_bSavedDC)
    {
    CWnd* pParent = GetParent();
    CRect  clientRect;
    GetClientRect(&clientRect);
    CRect rc;
    GetWindowRect(&rc);
    pParent->ScreenToClient(&rc);
    int cx=clientRect.Width ();
    int cy=clientRect.Height ();
    // 保存DC
    CBitmap bitmap;
    memDC.CreateCompatibleDC (pDC);
    bitmap.CreateCompatibleBitmap (pDC,cx,cy);
    memDC.SelectObject(&bitmap);
    memDC.BitBlt (0,0,cx,cy,pDC,0,0,SRCCOPY);
    m_bSavedDC = true;
    }
    return TRUE;
    }void CMENU_WndItem::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rcClient;
    GetWindowRect(&rcClient);
    if (rcClient.PtInRect(point))
    {
    Invalidate(true);
    m_bLBOK = true;
    }
    else
    m_bLBOK = false;
    CButton::OnLButtonDown(nFlags, point);
    }