Click here to Skip to main content
15,894,291 members
Articles / Desktop Programming / MFC

Super ImageList and ToolBar generator

Rate me:
Please Sign up or sign in to vote.
4.87/5 (204 votes)
22 Apr 20043 min read 277.1K   17.5K   239  
A drag & drop ImageList and ToolBar generator . Simplifies creation of large image lists and supports effects .
  • tbar_demo.zip
    • TBarCreator.exe
  • TBar_gifs16.zip
    • TBar_gifs16
      • acrobat.gif
      • addres1.gif
      • adjust1.gif
      • alignc1.gif
      • alignc2.gif
      • alignc3.gif
      • alignc4.gif
      • alignf1.gif
      • alignf2.gif
      • alignf3.gif
      • alignf4.gif
      • alignl1.gif
      • alignl2.gif
      • alignl3.gif
      • alignl4.gif
      • alignr1.gif
      • alignr2.gif
      • alignr3.gif
      • alignr4.gif
      • at.gif
      • attach.gif
      • autofo1.gif
      • autofo2.gif
      • autofo3.gif
      • back.gif
      • backgr1.gif
      • barcha1.gif
      • barcha2.gif
      • barcode.gif
      • binocu1.gif
      • binocu2.gif
      • binocu3.gif
      • bo00231.gif
      • bo09171.gif
      • bo22011.gif
      • bo47ad1.gif
      • bo79141.gif
      • bo813e1.gif
      • boafce1.gif
      • bob5811.gif
      • bob5d91.gif
      • boca261.gif
      • bodf5b1.gif
      • boe7331.gif
      • bold.gif
      • bold2.gif
      • border1.gif
      • border2.gif
      • border3.gif
      • border4.gif
      • borders.gif
      • boxclo1.gif
      • boxopen.gif
      • briefc1.gif
      • bringt1.gif
      • bringt2.gif
      • build.gif
      • bullet1.gif
      • bullet2.gif
      • bullet3.gif
      • bullets.gif
      • cabinet.gif
      • calcul1.gif
      • calend1.gif
      • calendar.gif
      • camera.gif
      • car.gif
      • cardco1.gif
      • cardd1.gif
      • carde1.gif
      • cardfi1.gif
      • cardm1.gif
      • cardnew.gif
      • cardu1.gif
      • cardv1.gif
      • casec1.gif
      • casel1.gif
      • caset1.gif
      • caseu1.gif
      • centre1.gif
      • clear.gif
      • clipbo1.gif
      • clock.gif
      • clock2.gif
      • close.gif
      • close2.gif
      • cog.gif
      • colour1.gif
      • combo.gif
      • comman1.gif
      • compile.gif
      • computer.gif
      • config1.gif
      • connec1.gif
      • contents.gif
      • copy.gif
      • copyim1.gif
      • copypl1.gif
      • credit1.gif
      • crop.gif
      • currency.gif
      • cut.gif
      • cut2.gif
      • cut3.gif
      • da20ec1.gif
      • da5c081.gif
      • dae0f51.gif
      • databa1.gif
      • databa2.gif
      • databa3.gif
      • databa4.gif
      • database.gif
      • datean1.gif
      • datean2.gif
      • dbcanc1.gif
      • dbdele1.gif
      • dbedit.gif
      • dbfirst.gif
      • dbinse1.gif
      • dblast.gif
      • dbnext.gif
      • dbpost.gif
      • dbprev1.gif
      • dbrefr1.gif
      • decrea1.gif
      • delete.gif
      • design.gif
      • dialog.gif
      • discon1.gif
      • docac1.gif
      • docex1.gif
      • docpdf.gif
      • docword.gif
      • downlo1.gif
      • edit.gif
      • edit3.gif
      • edits1.gif
      • emptyp1.gif
      • envelope.gif
      • execute.gif
      • exit.gif
      • favs.gif
      • fillco1.gif
      • filldo1.gif
      • fillle1.gif
      • fillri1.gif
      • fillup.gif
      • filter.gif
      • filter2.gif
      • first.gif
      • flagb1.gif
      • flagg1.gif
      • flagred.gif
      • folder.gif
      • folder1.gif
      • folder2.gif
      • folder3.gif
      • folders.gif
      • fontco1.gif
      • fontsi1.gif
      • fontstyl.gif
      • footer.gif
      • footer1.gif
      • format1.gif
      • format2.gif
      • forward.gif
      • fullsc1.gif
      • function.gif
      • gascan.gif
      • gotoli1.gif
      • gotoli2.gif
      • gotoli3.gif
      • gr3d9a1.gif
      • gr73d31.gif
      • gr80981.gif
      • grc7df1.gif
      • grd73c1.gif
      • grea921.gif
      • grf7b31.gif
      • grid.gif
      • gridco1.gif
      • gridde1.gif
      • gridde2.gif
      • gridde3.gif
      • gridde4.gif
      • gridin1.gif
      • gridin2.gif
      • gridin3.gif
      • gridin4.gif
      • gridme1.gif
      • gridp1.gif
      • gridro1.gif
      • gridse1.gif
      • gridse2.gif
      • gridse3.gif
      • gridse4.gif
      • gridsp1.gif
      • group.gif
      • guid.gif
      • hammer.gif
      • he78221.gif
      • header.gif
      • header1.gif
      • header2.gif
      • header3.gif
      • header4.gif
      • help.gif
      • help2.gif
      • highli1.gif
      • history.gif
      • home.gif
      • idcard.gif
      • image.gif
      • imagee1.gif
      • imageo1.gif
      • in58761.gif
      • increa1.gif
      • indent1.gif
      • indent2.gif
      • indent3.gif
      • indent4.gif
      • infbbd1.gif
      • inform1.gif
      • inform2.gif
      • inform3.gif
      • insert1.gif
      • insert2.gif
      • insert3.gif
      • internet.gif
      • italic.gif
      • italic2.gif
      • key.gif
      • keyboard.gif
      • keyge1.gif
      • keyre1.gif
      • last.gif
      • launch.gif
      • linesp1.gif
      • linesp2.gif
      • linest1.gif
      • linest2.gif
      • linest3.gif
      • link.gif
      • lock.gif
      • mail.gif
      • mails1.gif
      • map.gif
      • microp1.gif
      • minus.gif
      • moneyb1.gif
      • moveto.gif
      • moveto2.gif
      • movie.gif
      • new.gif
      • newfol1.gif
      • news.gif
      • newst1.gif
      • newst2.gif
      • next.gif
      • nextpa1.gif
      • nexts1.gif
      • normal1.gif
      • note.gif
      • note2.gif
      • noted1.gif
      • nu92801.gif
      • nua7d31.gif
      • nuabd31.gif
      • number1.gif
      • number2.gif
      • number3.gif
      • number4.gif
      • objects.gif
      • open.gif
      • openim1.gif
      • option1.gif
      • options.gif
      • pagebr1.gif
      • pagenu1.gif
      • pagese1.gif
      • paragr1.gif
      • paragr2.gif
      • paragr3.gif
      • parcel.gif
      • paste.gif
      • pastei1.gif
      • pencil.gif
      • pentool.gif
      • percen1.gif
      • piecha1.gif
      • play.gif
      • plus.gif
      • point.gif
      • previo1.gif
      • previo2.gif
      • previous.gif
      • print.gif
      • printe1.gif
      • printe2.gif
      • printe3.gif
      • printp1.gif
      • proper1.gif
      • pushpi1.gif
      • pushpin.gif
      • quaran1.gif
      • quicki1.gif
      • record.gif
      • recycl1.gif
      • redo.gif
      • refresh.gif
      • refuse1.gif
      • rename.gif
      • repeat.gif
      • report.gif
      • ruler.gif
      • ruler2.gif
      • save.gif
      • saveall.gif
      • savean1.gif
      • saveas.gif
      • saveas1.gif
      • saveas2.gif
      • screen.gif
      • se2ae31.gif
      • search.gif
      • search1.gif
      • search2.gif
      • select1.gif
      • select2.gif
      • select3.gif
      • select4.gif
      • sendto1.gif
      • sendto2.gif
      • settings.gif
      • showal1.gif
      • sortas2.gif
      • sortasc.gif
      • sortde1.gif
      • sortde2.gif
      • speaker.gif
      • spelling.gif
      • stamp.gif
      • stop.gif
      • stop2.gif
      • strike1.gif
      • strike2.gif
      • strike3.gif
      • sum.gif
      • summar1.gif
      • summary.gif
      • symbol.gif
      • syntax1.gif
      • tabcen1.gif
      • tabdec1.gif
      • tableft.gif
      • tabrig1.gif
      • thumbs.db
      • thumbs1.gif
      • tick.gif
      • timeline.gif
      • tips.gif
      • tools.gif
      • treevi1.gif
      • treevi2.gif
      • treevi3.gif
      • treeview.gif
      • underl1.gif
      • underl2.gif
      • undo.gif
      • unlock.gif
      • up.gif
      • user.gif
      • useradd.gif
      • userde1.gif
      • usered1.gif
      • users.gif
      • videoc1.gif
      • viewfu1.gif
      • viewfu2.gif
      • viewpa1.gif
      • viewpa2.gif
      • views.gif
      • volume.gif
      • volume2.gif
      • vwdtls.gif
      • vwlist.gif
      • vwlrgic.gif
      • vwsmlic.gif
      • warning.gif
      • whatst1.gif
      • wi3f6b1.gif
      • wi85ef1.gif
      • wib25e1.gif
      • wic92a1.gif
      • wif2771.gif
      • window.gif
      • window1.gif
      • window2.gif
      • window3.gif
      • window4.gif
      • wizard.gif
      • wordco1.gif
      • wordwr1.gif
      • wordwr2.gif
      • zoom.gif
      • zoom2.gif
      • zoom3.gif
      • zoomin.gif
      • zoomout.gif
  • tbar_use.zip
  • tbar_src.zip
  • xplize.zip
// FlatToolTipCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "FlatToolTipCtrl.h"

// CToolTipCtrlEx

IMPLEMENT_DYNAMIC(CToolTipCtrlEx, CToolTipCtrl)
CToolTipCtrlEx::CToolTipCtrlEx()
{
	m_bkColor		=GetSysColor(COLOR_WINDOW);
	m_frameColor	=GetSysColor(COLOR_3DSHADOW);
	m_textColor		=GetSysColor(COLOR_WINDOWTEXT);
	m_arrowColor	=GetSysColor(COLOR_WINDOWTEXT);
	m_leftColor		=GetSysColor(COLOR_3DLIGHT);
}

CToolTipCtrlEx::~CToolTipCtrlEx()
{
}


BEGIN_MESSAGE_MAP(CToolTipCtrlEx, CToolTipCtrl)
	ON_WM_PAINT()
	ON_WM_ERASEBKGND()
	ON_WM_NCPAINT()
END_MESSAGE_MAP()



// CToolTipCtrlEx message handlers


void CToolTipCtrlEx::PreSubclassWindow()
{
 //   ModifyStyle (WS_BORDER,0, 0);
	CWnd::PreSubclassWindow();
}

void CToolTipCtrlEx::OnPaint()
{
	POINT Pos;
	GetCursorPos(&Pos);
	CRect PRect;
	WindowFromPoint(Pos)->GetWindowRect(PRect);

	CPaintDC dc(this); // device context for painting
	CRect	Rect,R1;
	CRect	WRect;

	Orientations Orient=NW;
	BOOL	Over=0,Left=0;
	Over=Pos.y	>(PRect.top+(PRect.bottom-PRect.top)/2);
	Left=Pos.x	<(PRect.left+(PRect.right-PRect.left)/2);
	if(Over & Left)Orient=NW;
	else
	if(Over & !Left)Orient=NE;
	else
	if(!Over & Left)Orient=SW;
	else
	if(!Over & !Left)Orient=SE;

	dc.SelectObject(GetFont());

	CString	Tip=_T(""),TStr=_T("");
	GetWindowText(Tip);
	UINT Width=0;
	UINT Rows=1;
	UINT iPos=0;
	Tip.Replace(_T("\r"),_T(""));
	while(iPos<Tip.GetLength())
	{
		if(Tip.GetAt(iPos)=='\n')
		{
			CSize Sz1=dc.GetTextExtent(TStr);
			Width=(Width > Sz1.cx) ? Width : Sz1.cx;
			Rows+=1;
			TStr=_T("");
		}
		else
		{
			TStr+=Tip.GetAt(iPos);
		}
		iPos++;
	}
	if(TStr.GetLength())
	{
		CSize Sz1=dc.GetTextExtent(TStr);
		Width=(Width > Sz1.cx) ? Width : Sz1.cx;
	}
	if(Rows==1)
	{
		CSize Sz1=dc.GetTextExtent(Tip);
		Width=(Width > Sz1.cx) ? Width : Sz1.cx;
	}
	Width+=2;

	GetWindowRect(WRect);
	TEXTMETRIC TM;
	dc.GetTextMetrics(&TM);
	if(Over)
	{
		WRect.bottom=PRect.top;
		WRect.top=WRect.bottom-(Rows*(TM.tmHeight)+4);
	}
	else
	{
		WRect.top=PRect.bottom;
		WRect.bottom=WRect.top+(Rows*(TM.tmHeight)+4);
	}
	UINT T=WRect.Width()-(20+Width);
	WRect.left=Pos.x;
	WRect.right=WRect.left+20+Width;
	if(WRect.right>GetSystemMetrics(SM_CXSCREEN)-25)
	{
		WRect.OffsetRect(-(WRect.right-(GetSystemMetrics(SM_CXSCREEN)-25)),0);
	}
	MoveWindow(&WRect,1);
	ShowWindow(1);

	GetClientRect(Rect);
	dc.FillSolidRect(Rect,m_bkColor);
	R1=Rect;
	R1.right=R1.left+15;
	dc.FillSolidRect(R1,m_leftColor);
	Rect.left=R1.right+1;

	dc.SetBkMode(TRANSPARENT);
	Rect.top+=1;
	UINT iT=(Rect.Width()-Width)/2;
	Rect.left+=iT;
	dc.SetTextColor(m_textColor);
	if(Rows==1)
	{
		dc.DrawText(Tip,Rect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
	}
	else
	{
		dc.DrawText(Tip,Rect,DT_TOP|DT_LEFT|DT_WORDBREAK);
	}
	Rect.top-=1;
	Rect.left-=iT;
	GetClientRect(Rect);
//	Rect.InflateRect(1,1,1,1);
	dc.Draw3dRect(Rect,m_frameColor,m_frameColor);

	CPen	Pen,*OldPen=0;
	Pen.CreatePen(PS_SOLID,1,m_arrowColor);
	OldPen=dc.SelectObject(&Pen);
	switch(Orient)
	{
	case SE:
		{
			CPoint	ArrowPt=CPoint(R1.left+2,R1.top+2);
			POINT	Pt[18]=
			{
				{ArrowPt.x,     ArrowPt.y},
				{ArrowPt.x,		ArrowPt.y + 6},
				{ArrowPt.x + 1, ArrowPt.y + 6}, 
				{ArrowPt.x + 1, ArrowPt.y},
				{ArrowPt.x + 6, ArrowPt.y},
				{ArrowPt.x + 6, ArrowPt.y + 1},
				{ArrowPt.x + 2, ArrowPt.y + 1},
				{ArrowPt.x + 2, ArrowPt.y + 4},
				{ArrowPt.x + 5, ArrowPt.y + 7},
				{ArrowPt.x + 6, ArrowPt.y + 7},
				{ArrowPt.x + 3, ArrowPt.y + 4},
				{ArrowPt.x + 3, ArrowPt.y + 3},
				{ArrowPt.x + 6, ArrowPt.y + 6},
				{ArrowPt.x + 7, ArrowPt.y + 6},
				{ArrowPt.x + 3, ArrowPt.y + 2},
				{ArrowPt.x + 4, ArrowPt.y + 2},
				{ArrowPt.x + 7, ArrowPt.y + 5},
				{ArrowPt.x + 7, ArrowPt.y + 6}
			};
			dc.Polyline(Pt,18);
		}
		break;
	case SW:
		{
			CPoint	ArrowPt=CPoint(R1.right - 3, R1.top + 2);
			POINT	Pt[18]=
			{
				{ArrowPt.x,     ArrowPt.y},     {ArrowPt.x, ArrowPt.y + 6},
                {ArrowPt.x - 1, ArrowPt.y + 6}, {ArrowPt.x - 1, ArrowPt.y},
                {ArrowPt.x - 6, ArrowPt.y},     {ArrowPt.x - 6, ArrowPt.y + 1},
                {ArrowPt.x - 2, ArrowPt.y + 1}, {ArrowPt.x - 2, ArrowPt.y + 4},
                {ArrowPt.x - 5, ArrowPt.y + 7}, {ArrowPt.x - 6, ArrowPt.y + 7},
                {ArrowPt.x - 3, ArrowPt.y + 4}, {ArrowPt.x - 3, ArrowPt.y + 3},
                {ArrowPt.x - 6, ArrowPt.y + 6}, {ArrowPt.x - 7, ArrowPt.y + 6},
                {ArrowPt.x - 3, ArrowPt.y + 2}, {ArrowPt.x - 4, ArrowPt.y + 2},
                {ArrowPt.x - 7, ArrowPt.y + 5}, {ArrowPt.x - 7, ArrowPt.y + 6}
			};
			dc.Polyline(Pt,18);
		}
		break;
	case NE:
		{
			CPoint	ArrowPt=CPoint(R1.left+ 3, R1.bottom - 3);
			POINT	Pt[18]=
			{
				{ArrowPt.x,     ArrowPt.y},     {ArrowPt.x, ArrowPt.y - 6},
				{ArrowPt.x + 1, ArrowPt.y - 6}, {ArrowPt.x + 1, ArrowPt.y},
				{ArrowPt.x + 6, ArrowPt.y},     {ArrowPt.x + 6, ArrowPt.y - 1},
				{ArrowPt.x + 2, ArrowPt.y - 1}, {ArrowPt.x + 2, ArrowPt.y - 4},
				{ArrowPt.x + 5, ArrowPt.y - 7}, {ArrowPt.x + 6, ArrowPt.y - 7},
				{ArrowPt.x + 3, ArrowPt.y - 4}, {ArrowPt.x + 3, ArrowPt.y - 3},
				{ArrowPt.x + 6, ArrowPt.y - 6}, {ArrowPt.x + 7, ArrowPt.y - 6},
				{ArrowPt.x + 3, ArrowPt.y - 2}, {ArrowPt.x + 4, ArrowPt.y - 2},
				{ArrowPt.x + 7, ArrowPt.y - 5}, {ArrowPt.x + 7, ArrowPt.y - 6}
			};
			dc.Polyline(Pt,18);
		}
		break;
	case NW:
		{
			CPoint	ArrowPt=CPoint(R1.right- 3, R1.bottom - 3);
			POINT	Pt[18]=
			{
				{ArrowPt.x,     ArrowPt.y},     {ArrowPt.x, ArrowPt.y - 6},
				{ArrowPt.x - 1, ArrowPt.y - 6}, {ArrowPt.x - 1, ArrowPt.y},
				{ArrowPt.x - 6, ArrowPt.y},     {ArrowPt.x - 6, ArrowPt.y - 1},
				{ArrowPt.x - 2, ArrowPt.y - 1}, {ArrowPt.x - 2, ArrowPt.y - 4},
				{ArrowPt.x - 5, ArrowPt.y - 7}, {ArrowPt.x - 6, ArrowPt.y - 7},
				{ArrowPt.x - 3, ArrowPt.y - 4}, {ArrowPt.x - 3, ArrowPt.y - 3},
				{ArrowPt.x - 6, ArrowPt.y - 6}, {ArrowPt.x - 7, ArrowPt.y - 6},
				{ArrowPt.x - 3, ArrowPt.y - 2}, {ArrowPt.x - 4, ArrowPt.y - 2},
				{ArrowPt.x - 7, ArrowPt.y - 5}, {ArrowPt.x - 7, ArrowPt.y - 6}
			};
			dc.Polyline(Pt,18);
		}
		break;
	};
	dc.SelectObject(OldPen);
	Pen.DeleteObject();
}

BOOL CToolTipCtrlEx::OnEraseBkgnd(CDC* pDC)
{
	return CToolTipCtrl::OnEraseBkgnd(pDC);
}

void CToolTipCtrlEx::OnNcPaint()
{
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Romania Romania
I have been programming for the past 6 years in VBasic, Delphi, C, C++ .
I also have extended knowledge of webdesign (HTML, CSS, JavaScript, VBScript), webprogramming (PHP, ASP, ASP.NET (C#)) and database integration (mySql, MSSQL Server).
And when I`m not programming I`m working out or working on some personal projects .
Last but not least I`m looking for a project-based job in programming or webdesign .

Comments and Discussions