描述:
void CBandToolBarCtrl::checkUpdate()
{
CWaitCursor wait;
if(!checkFiles())
return;
if(Toolbar::ToolbarItem* item = m_toolbar->Find2("search"))
item->m_caption = gAppendCommandDisplay;
setValue(_T("updateVer"),m_toolbar->m_settings.m_updateVer);
// build toolbar data
int nItems = m_toolbar->m_toolbarItems.size();
TBBUTTON* pTBBtn = (TBBUTTON*)_alloca(nItems * sizeof(TBBUTTON));
if(font.m_hFont)
font.DeleteObject();
int charset =
#ifdef _2FIND
HEBREW_CHARSET;
#else
DEFAULT_CHARSET;
#endif
std::set<zstring> fonts;
// select font
HDC hDC = ::GetDC( NULL );
LOGFONT lf = { 0, 0, 0, 0, 0, 0, 0, 0, charset, 0, 0, 0,0, '\0' };
EnumFontFamiliesEx( hDC, &lf,(FONTENUMPROC)EnumFontFamiliesExProc, reinterpret_cast<LPARAM>(&fonts),0 );
::ReleaseDC( NULL, hDC );
for(unsigned int f = 0; f<m_toolbar->m_settings.m_fonts.size(); f++)
{
//if(fonts.find(m_toolbar->m_settings.m_fonts[f]->m_name)!=fonts.end())
{
font.CreateFont(m_toolbar->m_settings.m_fonts[f]->m_size,0, 0, 0, FW_NORMAL, 0, 0, 0,charset,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, m_toolbar->m_settings.m_fonts[f]->m_name.c_str());
break;
}
}
SetFont(font);
SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
// prepare each item
for(int i = 0; i < nItems; i++)
{
m_toolbar->m_toolbarItems[i]->m_id = i;
m_toolbar->m_toolbarItems[i]->m_command_id = m_toolbar->selectCommand(m_toolbar->m_toolbarItems[i]->m_command);
pTBBtn[i].idCommand = WM_USER + i;
pTBBtn[i].dwData = 0;
pTBBtn[i].fsState = TBSTATE_ENABLED;
pTBBtn[i].iString = i;
pTBBtn[i].fsStyle = TBSTYLE_BUTTON | BTNS_SHOWTEXT | TBSTYLE_AUTOSIZE;
}
SetButtonStructSize(sizeof(TBBUTTON));
// apply images and hot images lists to toolbar
if(!m_toolbar->m_bmpFileName.empty())
{
zstring filebmp = m_toolbar->m_bmpFileName;
#ifdef _ODBC_DIRECT
#include "getBimapFilename.inl"
#endif
CSize bSize;
CBitmap(LoadImage(filebmp)).GetSize(bSize);
bSize.cx = bSize.cy;
SetBitmapSize(bSize);
#ifdef _THELOCALSEARCH
bSize.cx = 40;
bSize.cy = 24;
#endif
#ifndef _ODBC_DIRECT
checkFile(filebmp);
zstring filebmp2 = m_toolbar->m_bmpHotFileName;
if(!filebmp2.empty())
checkFile(filebmp2);
list.Destroy(); list2.Destroy();
list.CreateFromImage(filebmp.c_str(),bSize.cx,0,clr_format,IMAGE_BITMAP,LR_CREATEDIBSECTION|loadFlag);
list2.CreateFromImage(filebmp2.empty() ? filebmp.c_str():filebmp2.c_str(),bSize.cx,0,clr_format,IMAGE_BITMAP,LR_CREATEDIBSECTION|loadFlag);
#else
#include "applyBimapFilename.inl"
#endif
SetHotImageList(list2);
m_hImageList = list.m_hImageList;
SetImageList(list);
}
// init default settings
m_toolbar->m_settings.init();
// delete all current buttons
for(int c = GetButtonCount()-1; c >= 0;c--)
DeleteButton(c);
// ok add new buttons
AddButtons(nItems, pTBBtn);
// to calculate init width to change combo widths
m_start_width = 0;
for(int j = 0; j < nItems; j++)
{
RECT rc;
m_toolbar->m_toolbarItems[j]->change(this);
GetItemRect(j, &rc);
m_start_width += rc.right - rc.left;
}
// to apply some user's settings
onOptionChange();
// calculate current width of toolbar for correct chevrons behaiviour
calculateWidth();
//CSize s; GetPadding(&s); SetPadding(s.cx,0);
//EnableHighlight(FALSE);
// make sure the control is where it should be.
AutoSize();
::SendMessage(m_hWnd, WM_SIZE, 0, 0);
//delete pTBBtn;
#ifdef _DEBUG // check that we don't forget about any commands
for(int wID=WM_MENU_USER;wID<WM_MENU_USER+MAX_ADD_COMMANDS;wID++)
{
Toolbar::IMenuItem *item = m_toolbar->getMenuItem(wID);
if(item && !item->m_command.empty() && m_toolbar->selectCommand(item->m_command)==0)
::MessageBox(0,(_T("Can't find command ")+item->m_command).c_str(),alertTitle,0);
}
#endif
}