首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

创建真彩位图工具栏的有关问题

2013-11-04 
创建真彩位图工具栏的问题[解决办法]参考一下这个类:#if !defined(AFX_TOOLBAREX_H__7F634227_9811_4C48_A

创建真彩位图工具栏的问题

[解决办法]
参考一下这个类:

#if !defined(AFX_TOOLBAREX_H__7F634227_9811_4C48_A18D_5D6C640DC6CB__INCLUDED_) 


#define AFX_TOOLBAREX_H__7F634227_9811_4C48_A18D_5D6C640DC6CB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ToolBarEx.h : header file
//
/////////////////////////////////////////////////////////////////////////////
//CToolBarEx: 真彩色工具栏
/////////////////////////////////////////////////////////////////////////////
// CToolBarEx window

class CToolBarEx : public CToolBar
{
// Construction
public:
CToolBarEx();
virtual ~CToolBarEx();

// Attributes
public:

// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CToolBarEx)
//}}AFX_VIRTUAL

// Implementation
public:
BOOL CreateHotToolBar(CWnd* pParentWnd,LPCTSTR lpszResName,LPCTSTR lpszHotResName);
void SetBlackMask(COLORREF   crMask);
BOOL LoadToolBar(LPCTSTR lpszResourceName);
BOOL LoadToolBar(UINT nIDResource);
void SetButtonText(const CStringArray& strArr);
void LoadBitmap(UINT *pnIDBmp,UINT nCount,CSize sizeBmp);
BOOL LoadBitmap(LPCTSTR lpszResourceName,BOOL bHot);
// Generated message map functions
protected:
BOOL LoadBitmap(LPCTSTR lpszResourceName);
//{{AFX_MSG(CToolBarEx)
//}}AFX_MSG

DECLARE_MESSAGE_MAP()
//
CSize m_nSizeImage;
CImageList m_cImageList;
COLORREF   m_crMask;//背景色

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TOOLBAREX_H__7F634227_9811_4C48_A18D_5D6C640DC6CB__INCLUDED_)


cpp:
// ToolBarEx.cpp : implementation file
//

#include "stdafx.h"

#include "ToolBarEx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CToolBarEx

CToolBarEx::CToolBarEx()
{
m_crMask = RGB(255,0,255);
}

CToolBarEx::~CToolBarEx()
{
}


BEGIN_MESSAGE_MAP(CToolBarEx, CToolBar)
//{{AFX_MSG_MAP(CToolBarEx)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CToolBarEx message handlers

void CToolBarEx::LoadBitmap(UINT *pnIDBmp, UINT nCount,CSize sizeBmp)
{
CImageList imgBmp;

//设定位图
imgBmp.Create(sizeBmp.cx ,sizeBmp.cy,ILC_COLORDDB,4,4);
for(UINT n=0;n<nCount;n++)
{
CBitmap Bitmap;
Bitmap.LoadBitmap (pnIDBmp[n]);
imgBmp.Add (&Bitmap,RGB(0,0,0));
}
GetToolBarCtrl( ).SetImageList ( &imgBmp ) ;
imgBmp.Detach( ) ;

}

void CToolBarEx::SetButtonText(const CStringArray& strArr)
{
int nCount = GetToolBarCtrl( ).GetButtonCount();

ASSERT(nCount>strArr.GetUpperBound());
int nItem = 0;
for(int n = 0; n < nCount; n++)
{
ASSERT(nItem <= strArr.GetUpperBound());
UINT unStyle = GetButtonStyle(n);
if(unStyle != TBBS_SEPARATOR)
CToolBar::SetButtonText (n, strArr.GetAt (nItem++) ) ;
}
//
CRect rt ;
GetItemRect ( 0, &rt ) ;
CSize sizeItem = rt.Size ();
//sizeItem.cy +=3;
SetSizes ( sizeItem, m_nSizeImage ) ;

}

BOOL CToolBarEx::LoadToolBar(UINT nIDResource)
{

BOOL bResult = CToolBar::LoadToolBar(nIDResource);
if(!bResult)
return bResult;

return LoadToolBar(MAKEINTRESOURCE(nIDResource));
return bResult;
}

BOOL CToolBarEx::LoadToolBar(LPCTSTR lpszResourceName)
{
ASSERT_VALID(this);
ASSERT(lpszResourceName != NULL);


BOOL bResult = CToolBar::LoadToolBar (lpszResourceName);
if(!bResult)
return bResult;

CRect Rect;
//CToolBar::GetToolBarCtrl().GetItemRect(0,&Rect);
//DWORD dsBtnSize=GetToolBarCtrl().GetButtonSize();
//int nWidth=LOWORD(dsBtnSize);//按钮外型尺寸
//int nHeight=HIWORD(dsBtnSize);
int nImageCount = CToolBar::GetToolBarCtrl().GetImageList ()->GetImageCount ();
VERIFY(nImageCount > 0);
//位图大小
IMAGEINFO ImageInfo;
CToolBar::GetToolBarCtrl().GetImageList ()->GetImageInfo (0,&ImageInfo);
int nWidth  = ImageInfo.rcImage .right - ImageInfo.rcImage.left ;
int nHeight = ImageInfo.rcImage .bottom - ImageInfo.rcImage.top ;
m_nSizeImage.cx = nWidth;
m_nSizeImage.cy = nHeight;




//*
    // 加载工具栏位图 - 必须使用::LoadImage映射颜色
    // 将(192,192,192) 映射到 COLOR_3DFACE.
    //
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
lpszResourceName,
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION 
[解决办法]
 LR_LOADMAP3DCOLORS );

CBitmap Bitmap;
Bitmap.Attach(hbm);

// Create image list and set in toolbar.
// Must use ILC_COLOR24 for 256-color images!
    // 创建图像清单并设置工具栏
    // 256色图像必须使用ILC_COLOR8!

//方法:
CImageList cImage;//
//1
cImage.Create(nWidth,nHeight, TRUE
[解决办法]
ILC_COLOR24, 4, 4);//TRUE
[解决办法]
ILC_COLOR24 ILC_COLOR8//TRUE-----透明模式
cImage.Add(&Bitmap,m_crMask);
//2
GetToolBarCtrl().SetImageList(&cImage);
//3
Bitmap.Detach ();
cImage.Detach ();
//*/
return bResult;
}

BOOL CToolBarEx::LoadBitmap(LPCTSTR lpszResourceName)
{
//*
CBitmap Bitmap;
BOOL bResult = Bitmap.LoadBitmap (lpszResourceName);
if(bResult)
SetBitmap (Bitmap.operator HBITMAP());
Bitmap.Detach();
//*/
/*
    // 加载工具栏位图 - 必须使用::LoadImage映射颜色
    // 将(192,192,192) 映射到 COLOR_3DFACE.
    //
    HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
//        MAKEINTRESOURCE(nIDResource),
lpszResourceName,
        IMAGE_BITMAP,
        0,0, // cx,cy
        LR_CREATEDIBSECTION 
[解决办法]
 LR_LOADMAP3DCOLORS );//Gray, RGB(192,192,192) COLOR_3DFACE 
    CBitmap Bitmap;
    Bitmap.Attach(hbm);
SetBitmap (Bitmap.operator HBITMAP());
Bitmap.Detach();
BOOL bResult=TRUE;

    // 创建图像清单并设置工具栏
    // 256色图像必须使用ILC_COLOR8!
    //
//    m_cImageList.Create(20,20, ILC_COLOR8, 4, 4);
//    m_cImageList.Create(20,20, ILC_COLOR24, 4, 4);
//    bResult=m_cImageList.Add(&bm,(CBitmap*)NULL);
//    GetToolBarCtrl().SetImageList(&m_cImageList);

//*/

return bResult;
}

void CToolBarEx::SetBlackMask(COLORREF   crMask)
{
m_crMask = crMask;
}

BOOL CToolBarEx::CreateHotToolBar(CWnd* pParentWnd,LPCTSTR lpszResName,LPCTSTR lpszHotResName)
{
BOOL bResult = FALSE;

CToolBar cToolBar;
cToolBar.CreateEx (pParentWnd);
cToolBar.LoadToolBar (lpszResName);
//位图大小
IMAGEINFO ImageInfo;
cToolBar.GetToolBarCtrl().GetImageList ()->GetImageInfo (0,&ImageInfo);
int nWidth = ImageInfo.rcImage .right - ImageInfo.rcImage.left ;
int nHeight = ImageInfo.rcImage .bottom - ImageInfo.rcImage.top ;
m_nSizeImage.cx = nWidth;
m_nSizeImage.cy = nHeight;

//
CreateEx (pParentWnd);
LoadBitmap(lpszResName,FALSE);
LoadBitmap(lpszHotResName,TRUE);

//
ModifyStyle ( 0, TBSTYLE_FLAT 
[解决办法]
 TBSTYLE_TRANSPARENT ) ;

int nCount = cToolBar.GetCount ();
SetButtons ( NULL,nCount ) ;
for(int i = 0; i < nCount; i++)
{
UINT nID;
UINT nStyle;
int iImage;
cToolBar.GetButtonInfo(i,nID,nStyle,iImage);
SetButtonInfo ( i, nID, nStyle, iImage ) ;
}
//设定按钮尺寸
CRect rt ;
GetItemRect ( 0, &rt ) ;
SetSizes( rt.Size( ), m_nSizeImage ) ;

return bResult;
}

BOOL CToolBarEx::LoadBitmap(LPCTSTR lpszResourceName,BOOL bHot)
{
BOOL bResult = TRUE;
//
    // 加载工具栏位图 - 必须使用::LoadImage映射颜色
    // 将(192,192,192) 映射到 COLOR_3DFACE.
    //
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
lpszResourceName,
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION 
[解决办法]
 LR_LOADMAP3DCOLORS );

CBitmap Bitmap;
Bitmap.Attach(hbm);

// Create image list and set in toolbar.
// Must use ILC_COLOR24 for 256-color images!
    // 创建图像清单并设置工具栏
    // 256色图像必须使用ILC_COLOR8!

//方法:


CImageList cImage;//
//1
cImage.Create(m_nSizeImage.cx ,m_nSizeImage.cy , TRUE
[解决办法]
ILC_COLOR24, 4, 4);//TRUE
[解决办法]
ILC_COLOR24 ILC_COLOR8//TRUE-----透明模式
cImage.Add(&Bitmap,m_crMask);
//2
if(!bHot)
GetToolBarCtrl().SetImageList(&cImage);
else
GetToolBarCtrl().SetHotImageList(&cImage);

//3
Bitmap.Detach ();
cImage.Detach ();
//*/
return bResult;

}


热点排行