Title is No Title

not very good here!

导航

add cool toolbar 256corler is easy,only two file and onCreate func is needed also the MainFrame.toolbar must resize to what real need and also the load width is same to it.

1:func use it:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 {
  TRACE0("Failed to create toolbar\n");
  return -1;      // fail to create
 }

 if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,
    sizeof(indicators)/sizeof(UINT)))
 {
  TRACE0("Failed to create status bar\n");
  return -1;      // fail to create
 }

 // TODO: Delete these three lines if you don't want the toolbar to
 //  be dockable
 //m_wndToolBar.LoadTrueColorToolBar(44, IDB_BITMAP2,IDB_BITMAP4,IDB_BITMAP2);
 
 m_wndToolBar.LoadTrueColorToolBar(60, IDB_toolbarbmp,IDB_toolbarbmp,IDB_toolbarbmp);
 
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndToolBar);

 return 0;
}
2:
gloable var:
protected:  // control bar embedded members
 CStatusBar  m_wndStatusBar;
// CToolBar    m_wndToolBar;
   CTrueColorToolBar  m_wndToolBar;
3:
file 1:
/***=========================================================================
====                                                                     ====
====                          D C U t i l i t y                          ====
====                                                                     ====
=============================================================================
====                                                                     ====
====    File name           :  TrueColorToolBar.h                        ====
====    Project name        :  Tester                                    ====
====    Project number      :  ---                                       ====
====    Creation date       :  13/1/2003                                 ====
====    Author(s)           :  Dany Cantin                               ====
====                                                                     ====
====                  Copyright © DCUtility  2003                        ====
====                                                                     ====
=============================================================================
===========================================================================*/


#ifndef TRUECOLORTOOLBAR_H_
#define TRUECOLORTOOLBAR_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include <afxtempl.h>

/////////////////////////////////////////////////////////////////////////////
// CTrueColorToolBar

class CTrueColorToolBar : public CToolBar
{
// Construction
public:
 CTrueColorToolBar();

// Attributes
private:
 BOOL m_bDropDown;

 struct stDropDownInfo {
 public:
  UINT  uButtonID;
  UINT  uMenuID;
  CWnd* pParent;
 };
 
 CArray <stDropDownInfo, stDropDownInfo&> m_lstDropDownButton;
 
// Operations
public:
 BOOL LoadTrueColorToolBar(int  nBtnWidth,
         UINT uToolBar,
         UINT uToolBarHot  = 0,
         UINT uToolBarDisabled = 0);

 void AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID);

private:
 BOOL SetTrueColorToolBar(UINT uToolBarType,
                       UINT uToolBar,
           int  nBtnWidth);

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

// Implementation
public:
 virtual ~CTrueColorToolBar();

 // Generated message map functions
protected:
 //{{AFX_MSG(CTrueColorToolBar)
 afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};

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

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

#endif // TRUECOLORTOOLBAR_H_
file 2:
/***=========================================================================
====                                                                     ====
====                          D C U t i l i t y                          ====
====                                                                     ====
=============================================================================
====                                                                     ====
====    File name           :  TrueColorToolBar.cpp                      ====
====    Project name        :  Tester                                    ====
====    Project number      :  ---                                       ====
====    Creation date       :  13/1/2003                                 ====
====    Author(s)           :  Dany Cantin                               ====
====                                                                     ====
====                  Copyright © DCUtility  2003                        ====
====                                                                     ====
=============================================================================
===========================================================================*/

#include "stdafx.h"
#include "TrueColorToolBar.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTrueColorToolBar

CTrueColorToolBar::CTrueColorToolBar()
{
 m_bDropDown = FALSE;
}

CTrueColorToolBar::~CTrueColorToolBar()
{
}


BEGIN_MESSAGE_MAP(CTrueColorToolBar, CToolBar)
 //{{AFX_MSG_MAP(CTrueColorToolBar)
 ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTrueColorToolBar message handlers
BOOL CTrueColorToolBar::LoadTrueColorToolBar(int  nBtnWidth,
            UINT uToolBar,
            UINT uToolBarHot,
            UINT uToolBarDisabled)
{
 if (!SetTrueColorToolBar(TB_SETIMAGELIST, uToolBar, nBtnWidth))
  return FALSE;
 
 if (uToolBarHot) {
  if (!SetTrueColorToolBar(TB_SETHOTIMAGELIST, uToolBarHot, nBtnWidth))
   return FALSE;
 }

 if (uToolBarDisabled) {
  if (!SetTrueColorToolBar(TB_SETDISABLEDIMAGELIST, uToolBarDisabled, nBtnWidth))
   return FALSE;
 }

 return TRUE;
}


BOOL CTrueColorToolBar::SetTrueColorToolBar(UINT uToolBarType,
                     UINT uToolBar,
              int  nBtnWidth)
{
 CImageList cImageList;
 CBitmap  cBitmap;
 BITMAP  bmBitmap;
 
 if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(uToolBar),
          IMAGE_BITMAP, 0, 0,
          LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
     !cBitmap.GetBitmap(&bmBitmap))
  return FALSE;

 CSize  cSize(bmBitmap.bmWidth, bmBitmap.bmHeight);
 int   nNbBtn = cSize.cx/nBtnWidth;
 RGBTRIPLE* rgb  = (RGBTRIPLE*)(bmBitmap.bmBits);
 COLORREF rgbMask = RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);
 
 if (!cImageList.Create(nBtnWidth, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 0))
  return FALSE;
 
 if (cImageList.Add(&cBitmap, rgbMask) == -1)
  return FALSE;

 SendMessage(uToolBarType, 0, (LPARAM)cImageList.m_hImageList);
 cImageList.Detach();
 cBitmap.Detach();
 
 return TRUE;
}

void CTrueColorToolBar::AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID)
{
 if (!m_bDropDown) {
  GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);
  m_bDropDown = TRUE;
 }

 SetButtonStyle(CommandToIndex(uButtonID), TBSTYLE_DROPDOWN);

 stDropDownInfo DropDownInfo;
 DropDownInfo.pParent = pParent;
 DropDownInfo.uButtonID = uButtonID;
 DropDownInfo.uMenuID = uMenuID;
 m_lstDropDownButton.Add(DropDownInfo);
}

void CTrueColorToolBar::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
{
 for (int i = 0; i < m_lstDropDownButton.GetSize(); i++) {
  
  stDropDownInfo DropDownInfo = m_lstDropDownButton.GetAt(i);

  if (DropDownInfo.uButtonID == UINT(pnmtb->iItem)) {

   CMenu menu;
   menu.LoadMenu(DropDownInfo.uMenuID);
   CMenu* pPopup = menu.GetSubMenu(0);
   
   CRect rc;
   SendMessage(TB_GETRECT, (WPARAM)pnmtb->iItem, (LPARAM)&rc);
   ClientToScreen(&rc);
   
   pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
                       rc.left, rc.bottom, DropDownInfo.pParent, &rc);
   break;
  }
 }
}

posted on 2004-03-30 12:51  abraham  阅读(1400)  评论(0)    收藏  举报