📄 muletoolbarctrl.cpp
字号:
{
if (GetKeyState(VK_CONTROL) & 0x8000)
{
if (!thePrefs.GetToolbarBitmapSettings().IsEmpty())
ChangeToolbarBitmap(thePrefs.GetToolbarBitmapSettings(), true);
if (!thePrefs.GetSkinProfile().IsEmpty())
theApp.ApplySkin(thePrefs.GetSkinProfile());
*pResult = TRUE;
return;
}
///////////////////////////////////////////////////////////////////////////
// "Toolbar Bitmap" sub menu
//
CMenu menuBitmaps;
menuBitmaps.CreateMenu();
menuBitmaps.AppendMenu(MF_STRING, MP_SELECTTOOLBARBITMAP, GetResString(IDS_SELECTTOOLBARBITMAP));
menuBitmaps.AppendMenu(MF_STRING, MP_SELECTTOOLBARBITMAPDIR, GetResString(IDS_SELECTTOOLBARBITMAPDIR));
menuBitmaps.AppendMenu(MF_SEPARATOR);
menuBitmaps.AppendMenu(MF_STRING, MP_TOOLBARBITMAP, GetResString(IDS_DEFAULT));
m_astrToolbarPaths.RemoveAll();
CString currentBitmapSettings = thePrefs.GetToolbarBitmapSettings();
bool checked = false;
if (currentBitmapSettings.IsEmpty())
{
menuBitmaps.CheckMenuItem(MP_TOOLBARBITMAP, MF_CHECKED);
menuBitmaps.EnableMenuItem(MP_TOOLBARBITMAP, MF_DISABLED);
checked = true;
}
m_astrToolbarPaths.Add(_T("")); // dummy entry for 'Default' menu item
int i = 1;
if (!thePrefs.GetToolbarBitmapFolderSettings().IsEmpty())
{
CStringArray astrToolbarFiles;
for (int f = 0; f < ARRSIZE(_apszTBFiles); f++)
{
WIN32_FIND_DATA FileData;
HANDLE hSearch = FindFirstFile(thePrefs.GetToolbarBitmapFolderSettings() + CString(_T("\\")) + _apszTBFiles[f], &FileData);
if (hSearch != INVALID_HANDLE_VALUE)
{
do {
astrToolbarFiles.Add(FileData.cFileName);
}
while (astrToolbarFiles.GetCount() < MAX_TOOLBAR_FILES && FindNextFile(hSearch, &FileData));
FindClose(hSearch);
}
}
if (astrToolbarFiles.GetCount() > 0)
{
Sort(astrToolbarFiles);
for (int f = 0; f < astrToolbarFiles.GetCount(); f++)
{
const CString& bitmapFileName = astrToolbarFiles.GetAt(f);
CString bitmapBaseName;
LPCTSTR pszTbBaseExt = stristr(bitmapFileName, EMULTB_BASEEXT);
if (pszTbBaseExt)
bitmapBaseName = bitmapFileName.Left(pszTbBaseExt - (LPCTSTR)bitmapFileName - 1);
else
bitmapBaseName = bitmapFileName;
menuBitmaps.AppendMenu(MF_STRING, MP_TOOLBARBITMAP + i, bitmapBaseName);
m_astrToolbarPaths.Add(thePrefs.GetToolbarBitmapFolderSettings() + CString(_T("\\")) + bitmapFileName);
if (!checked && currentBitmapSettings.CompareNoCase(m_astrToolbarPaths[i]) == 0)
{
menuBitmaps.CheckMenuItem(MP_TOOLBARBITMAP + i, MF_CHECKED);
menuBitmaps.EnableMenuItem(MP_TOOLBARBITMAP + i, MF_DISABLED);
checked = true;
}
i++;
}
}
ASSERT( i-1 == astrToolbarFiles.GetCount() );
}
if (!checked)
{
menuBitmaps.AppendMenu(MF_STRING, MP_TOOLBARBITMAP + i, currentBitmapSettings);
menuBitmaps.CheckMenuItem(MP_TOOLBARBITMAP + i, MF_CHECKED);
menuBitmaps.EnableMenuItem(MP_TOOLBARBITMAP + i, MF_DISABLED);
m_astrToolbarPaths.Add(currentBitmapSettings);
}
///////////////////////////////////////////////////////////////////////////
// "Skin Profile" sub menu
//
CMenu menuSkins;
menuSkins.CreateMenu();
menuSkins.AppendMenu(MF_STRING, MP_SELECT_SKIN_FILE, GetResString(IDS_SEL_SKIN));
menuSkins.AppendMenu(MF_STRING, MP_SELECT_SKIN_DIR, GetResString(IDS_SEL_SKINDIR));
menuSkins.AppendMenu(MF_SEPARATOR);
menuSkins.AppendMenu(MF_STRING, MP_SKIN_PROFILE,GetResString(IDS_DEFAULT));
m_astrSkinPaths.RemoveAll();
CString currentSkin = thePrefs.GetSkinProfile();
checked = false;
if (currentSkin.IsEmpty())
{
menuSkins.CheckMenuItem(MP_SKIN_PROFILE, MF_CHECKED);
menuSkins.EnableMenuItem(MP_SKIN_PROFILE, MF_DISABLED);
checked = true;
}
m_astrSkinPaths.Add(_T("")); // dummy entry for 'Default' menu item
i = 1;
if (!thePrefs.GetSkinProfileDir().IsEmpty())
{
CStringArray astrSkinFiles;
for (int f = 0; f < ARRSIZE(_apszSkinFiles); f++)
{
WIN32_FIND_DATA FileData;
HANDLE hSearch = FindFirstFile(thePrefs.GetSkinProfileDir() + CString(_T("\\")) + _apszSkinFiles[f], &FileData);
if (hSearch != INVALID_HANDLE_VALUE)
{
do {
astrSkinFiles.Add(FileData.cFileName);
}
while (astrSkinFiles.GetCount() < MAX_SKIN_FILES && FindNextFile(hSearch, &FileData));
FindClose(hSearch);
}
}
if (astrSkinFiles.GetCount() > 0)
{
Sort(astrSkinFiles);
for (int f = 0; f < astrSkinFiles.GetCount(); f++)
{
const CString& skinFileName = astrSkinFiles.GetAt(f);
CString skinBaseName;
LPCTSTR pszSkinBaseExt = stristr(skinFileName, _T(".") EMULSKIN_BASEEXT _T(".ini"));
if (pszSkinBaseExt)
skinBaseName = skinFileName.Left(pszSkinBaseExt - (LPCTSTR)skinFileName);
else
skinBaseName = skinFileName;
menuSkins.AppendMenu(MF_STRING, MP_SKIN_PROFILE + i, skinBaseName);
m_astrSkinPaths.Add(thePrefs.GetSkinProfileDir() + CString(_T("\\")) + skinFileName);
if (!checked && currentSkin.CompareNoCase(m_astrSkinPaths[i]) == 0)
{
menuSkins.CheckMenuItem(MP_SKIN_PROFILE + i, MF_CHECKED);
menuSkins.EnableMenuItem(MP_SKIN_PROFILE + i, MF_DISABLED);
checked = true;
}
i++;
}
}
ASSERT( i-1 == astrSkinFiles.GetCount() );
}
if (!checked)
{
menuSkins.AppendMenu(MF_STRING, MP_SKIN_PROFILE + i, currentSkin);
menuSkins.CheckMenuItem(MP_SKIN_PROFILE + i, MF_CHECKED);
menuSkins.EnableMenuItem(MP_SKIN_PROFILE + i, MF_DISABLED);
m_astrSkinPaths.Add(currentSkin);
}
///////////////////////////////////////////////////////////////////////////
// "Text Label" sub menu
//
CMenu menuTextLabels;
menuTextLabels.CreateMenu();
ASSERT( MP_NOTEXTLABELS == MP_TEXTLABELS-1 && MP_NOTEXTLABELS == MP_TEXTLABELSONRIGHT-2 );
ASSERT( MP_NOTEXTLABELS + (int)NoLabels == MP_NOTEXTLABELS );
ASSERT( MP_NOTEXTLABELS + (int)LabelsBelow == MP_TEXTLABELS );
ASSERT( MP_NOTEXTLABELS + (int)LabelsRight == MP_TEXTLABELSONRIGHT );
menuTextLabels.AppendMenu(MF_STRING | MF_ENABLED, MP_NOTEXTLABELS, GetResString(IDS_NOTEXTLABELS));
menuTextLabels.AppendMenu(MF_STRING | MF_ENABLED, MP_TEXTLABELS, GetResString(IDS_ENABLETEXTLABELS));
menuTextLabels.AppendMenu(MF_STRING | MF_ENABLED, MP_TEXTLABELSONRIGHT, GetResString(IDS_TEXTLABELSONRIGHT));
menuTextLabels.CheckMenuRadioItem(MP_NOTEXTLABELS, MP_TEXTLABELSONRIGHT, MP_NOTEXTLABELS + (int)thePrefs.GetToolbarLabelSettings(), MF_BYCOMMAND);
menuTextLabels.EnableMenuItem(MP_NOTEXTLABELS + (int)thePrefs.GetToolbarLabelSettings(), MF_BYCOMMAND | MF_DISABLED);
menuTextLabels.AppendMenu(MF_SEPARATOR);
menuTextLabels.AppendMenu(MF_STRING, MP_LARGEICONS, GetResString(IDS_LARGEICONS));
menuTextLabels.AppendMenu(MF_STRING, MP_SMALLICONS, GetResString(IDS_SMALLICONS));
ASSERT( MP_LARGEICONS == MP_SMALLICONS-1 );
menuTextLabels.CheckMenuRadioItem(MP_LARGEICONS, MP_SMALLICONS, m_sizBtnBmp.cx == 16 ? MP_SMALLICONS : MP_LARGEICONS, MF_BYCOMMAND);
menuTextLabels.EnableMenuItem(m_sizBtnBmp.cx == 16 ? MP_SMALLICONS : MP_LARGEICONS, MF_BYCOMMAND | MF_DISABLED);
///////////////////////////////////////////////////////////////////////////
// Toolbar context menu
//
CMenu menuToolbar;
menuToolbar.CreatePopupMenu();
menuToolbar.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)menuBitmaps.m_hMenu, GetResString(IDS_TOOLBARSKINS));
menuToolbar.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)menuSkins.m_hMenu, GetResString(IDS_SKIN_PROF));
menuToolbar.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)menuTextLabels.m_hMenu, GetResString(IDS_TEXTLABELS));
menuToolbar.AppendMenu(MF_STRING, MP_CUSTOMIZETOOLBAR, GetResString(IDS_CUSTOMIZETOOLBAR));
CPoint point;
GetCursorPos(&point);
menuToolbar.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
*pResult = TRUE;
}
void CMuleToolbarCtrl::OnTbnQueryDelete(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = TRUE;
}
void CMuleToolbarCtrl::OnTbnQueryInsert(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = TRUE;
}
void CMuleToolbarCtrl::OnTbnGetButtonInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTOOLBAR pNMTB = reinterpret_cast<LPNMTOOLBAR>(pNMHDR);
if (pNMTB->iItem >= ARRSIZE(TBButtons))
{
*pResult = FALSE;
}
else
{
CString strText = TBStrings[pNMTB->iItem];
strText.Remove(_T('&'));
_tcsncpy(pNMTB->pszText, strText, pNMTB->cchText - 1);
pNMTB->pszText[pNMTB->cchText - 1] = _T('\0');
pNMTB->tbButton = TBButtons[pNMTB->iItem];
if (m_eLabelType == LabelsRight)
pNMTB->tbButton.fsStyle |= TBSTYLE_AUTOSIZE;
*pResult = TRUE;
}
}
void CMuleToolbarCtrl::OnTbnToolbarChange(NMHDR *pNMHDR, LRESULT *pResult)
{
CString config;
for (int i = 0; i < GetButtonCount();i++)
{
TBBUTTON buttoninfo;
if (GetButton(i, &buttoninfo))
config.AppendFormat(_T("%02i"), (buttoninfo.idCommand != 0) ? buttoninfo.idCommand - IDC_TOOLBARBUTTON : 99);
}
thePrefs.SetToolbarSettings(config);
Localize();
theApp.emuledlg->ShowConnectionState();
SetAllButtonsWidth();
AutoSize();
*pResult = 0;
}
void CMuleToolbarCtrl::ChangeToolbarBitmap(const CString& path, bool bRefresh)
{
bool bResult = false;
CImageList ImageList;
CEnBitmap Bitmap;
if (!path.IsEmpty() && Bitmap.LoadImage(path))
{
BITMAP bm = {0};
Bitmap.GetObject(sizeof(bm), &bm);
if (bm.bmWidth == NUM_BUTTON_BITMAPS*m_sizBtnBmp.cx && bm.bmHeight == m_sizBtnBmp.cy)
{
bool bAlpha = bm.bmBitsPixel > 24;
if (ImageList.Create(m_sizBtnBmp.cx, bm.bmHeight, bAlpha ? ILC_COLOR32 : (theApp.m_iDfltImageListColorFlags | ILC_MASK), 0, 1))
{
ImageList.Add(&Bitmap, bAlpha ? 0xFF000000 : RGB(255, 0, 255));
CImageList* pimlOld = SetImageList(&ImageList);
ImageList.Detach();
if (pimlOld)
pimlOld->DeleteImageList();
bResult = true;
}
}
Bitmap.DeleteObject();
}
// if image file loading or image list creation failed, create default image list.
if (!bResult)
{
// load from icon ressources
ImageList.Create(m_sizBtnBmp.cx, m_sizBtnBmp.cy, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1);
ImageList.Add(CTempIconLoader(_T("CONNECT"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("DISCONNECT"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("STOPCONNECTING"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("KADEMLIA"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("SERVER"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("TRANSFER"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("SEARCH"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("SharedFiles"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("MESSAGES"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("IRC"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("STATISTICS"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("PREFERENCES"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("TOOLS"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ImageList.Add(CTempIconLoader(_T("HELP"), m_sizBtnBmp.cx, m_sizBtnBmp.cy));
ASSERT( ImageList.GetImageCount() == NUM_BUTTON_BITMAPS );
CImageList* pimlOld = SetImageList(&ImageList);
ImageList.Detach();
if (pimlOld)
pimlOld->DeleteImageList();
}
if (bRefresh)
{
UpdateBackground();
Invalidate();
Refresh();
}
}
BOOL CMuleToolbarCtrl::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case MP_SELECTTOOLBARBITMAPDIR:{
TCHAR buffer[MAX_PATH];
_sntprintf(buffer,ARRSIZE(buffer),_T("%s"), thePrefs.GetToolbarBitmapFolderSettings());
if(SelectDir(m_hWnd, buffer, GetResString(IDS_SELECTTOOLBARBITMAPDIR)))
thePrefs.SetToolbarBitmapFolderSettings(buffer);
break;
}
case MP_CUSTOMIZETOOLBAR:
Customize();
break;
case MP_SELECTTOOLBARBITMAP:
{
// we could also load "*.jpg" here, but because of the typical non solid background of JPGs this
// doesn't make sense here.
CString strFilter(_T("eMule Toolbar Bitmap Files ("));
for (int f = 0; f < ARRSIZE(_apszTBFiles); f++){
if (f > 0)
strFilter += _T(';');
strFilter += _apszTBFiles[f];
}
strFilter += _T(")|");
for (int f = 0; f < ARRSIZE(_apszTBFiles); f++){
if (f > 0)
strFilter += _T(';');
strFilter += _apszTBFiles[f];
}
strFilter += _T("||");
CFileDialog dialog(TRUE, EMULTB_BASEEXT _T(".bmp"), NULL, OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST, strFilter, NULL, 0);
if (IDOK == dialog.DoModal())
if(thePrefs.GetToolbarBitmapSettings()!=dialog.GetPathName())
{
ChangeToolbarBitmap(dialog.GetPathName(), true);
thePrefs.SetToolbarBitmapSettings(dialog.GetPathName());
}
break;
}
case MP_LARGEICONS:
m_sizBtnBmp.cx = m_sizBtnBmp.cy = 32;
ForceRecalcLayout();
ChangeToolbarBitmap(thePrefs.GetToolbarBitmapSettings(), true);
thePrefs.SetToolbarIconSize(m_sizBtnBmp);
break;
case MP_SMALLICONS:
m_sizBtnBmp.cx = m_sizBtnBmp.cy = 16;
ForceRecalcLayout();
ChangeToolbarBitmap(thePrefs.GetToolbarBitmapSettings(), true);
thePrefs.SetToolbarIconSize(m_sizBtnBmp);
break;
case MP_NOTEXTLABELS:
ForceRecalcLayout();
ChangeTextLabelStyle(NoLabels, true);
thePrefs.SetToolbarLabelSettings(NoLabels);
break;
case MP_TEXTLABELS:
ForceRecalcLayout();
ChangeTextLabelStyle(LabelsBelow, true);
thePrefs.SetToolbarLabelSettings(LabelsBelow);
break;
case MP_TEXTLABELSONRIGHT:
ForceRecalcLayout();
ChangeTextLabelStyle(LabelsRight, true);
thePrefs.SetToolbarLabelSettings(LabelsRight);
break;
case MP_SELECT_SKIN_DIR:{
TCHAR buffer[MAX_PATH];
_sntprintf(buffer,ARRSIZE(buffer),_T("%s"), thePrefs.GetSkinProfileDir());
if(SelectDir(m_hWnd, buffer, GetResString(IDS_SELSKINPROFILEDIR)))
thePrefs.SetSkinProfileDir(buffer);
break;
}
case MP_SELECT_SKIN_FILE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -