要工程源码,原理看多了,似乎没有满意的回答

解决方案 »

  1.   

    void SetBkBmp(LPCSTR lpszBmp)
    {
    ::lstrcpy(m_tcFileName,lpszBmp);

    if (m_hBmpBK) 
    {
    DeleteObject(m_hBmpBK);
    m_hBmpBK = NULL;
    }
    TCHAR szDisk[64]={0};
    TCHAR szPath[512]={0};
    TCHAR szName[_MAX_FNAME]={0};
    TCHAR szExt[_MAX_EXT]={0};
    _splitpath(lpszBmp,szDisk,szPath,szName,szExt);
    if (lstrcmpi(szExt,".bmp") == 0)
    {
    m_hBmpBK = (HBITMAP)LoadImage(AfxGetInstanceHandle(), m_tcFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
    if (m_hBmpBK)
    {
    m_bBitmap = TRUE;
    BITMAP bm = { 0 };
    ::GetObject(m_hBmpBK, sizeof(BITMAP), &bm);  
    m_nWidth = bm.bmWidth;
    m_nHeight = bm.bmHeight;
    }
    }
    else 
    {
    m_hIcon = (HICON)LoadImage(NULL,m_tcFileName,IMAGE_ICON,0, 0, LR_LOADFROMFILE);
    if (m_hIcon)
    {
    m_bBitmap = FALSE;
    ICONINFO info = { 0 };
    GetIconInfo(m_hIcon,&info);
    BITMAP bp = { 0 };
    GetObject((HGDIOBJ)info.hbmColor,sizeof(bp),&bp);
    m_nWidth = bp.bmWidth*4;
    m_nHeight = bp.bmHeight;
    if (info.hbmColor)
    ::DeleteObject(info.hbmColor);
    if (info.hbmMask)
    ::DeleteObject(info.hbmMask);
    }


    }

    }
      

  2.   

    CBitmapButton...
    现在的,
    按钮的属性要设成OwnerDraw...CBitmapButton myButton;// Create the bitmap button (must include the BS_OWNERDRAW style).
    myButton.Create(NULL, WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, 
       CRect(10,10,100,100), pParentWnd, 1);// Load the bitmaps for this button.
    myButton.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS, IDB_DISABLE);
      

  3.   

    http://www.codeproject.com/buttonctrl/cxskinbutton.asp