📄 muletoolbarctrl.cpp
字号:
checked=true;
}
aSkinPaths.Add(_T(""));
i = 1;
if (!thePrefs.GetSkinProfileDir().IsEmpty())
{
for (int f = 0; f < ARRSIZE(_apszSkinFiles); f++)
{
bool bFinished = false;
WIN32_FIND_DATA FileData;
HANDLE hSearch = FindFirstFile(thePrefs.GetSkinProfileDir() + CString(_T("\\")) + _apszSkinFiles[f], &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
bFinished = true;
for (/**/; !bFinished && i < 50; i++)
{
CString skinFileName = FileData.cFileName;
CString skinBaseName;
int iExt = skinFileName.Find(_T(".") EMULSKIN_BASEEXT _T(".ini"));
if (iExt > 0)
skinBaseName = skinFileName.Left(iExt);
else
skinBaseName = skinFileName;
m_SkinsMenu.AppendMenu(MF_STRING, MP_SKIN_PROFILE + i, skinBaseName);
aSkinPaths.Add(thePrefs.GetSkinProfileDir() + CString(_T("\\")) + skinFileName);
if (!checked && currentSkin == aSkinPaths[i])
{
m_SkinsMenu.CheckMenuItem(MP_SKIN_PROFILE + i, MF_CHECKED);
m_SkinsMenu.EnableMenuItem(MP_SKIN_PROFILE + i, MF_DISABLED);
checked = true;
}
if (!FindNextFile(hSearch, &FileData))
bFinished = true;
}
FindClose(hSearch);
}
}
if(!checked)
{
m_SkinsMenu.AppendMenu(MF_STRING, MP_SKIN_PROFILE + i, currentSkin);
m_SkinsMenu.CheckMenuItem(MP_SKIN_PROFILE + i, MF_CHECKED);
m_SkinsMenu.EnableMenuItem(MP_SKIN_PROFILE + i, MF_DISABLED);
aSkinPaths.Add(currentSkin);
}
m_ToolbarMenu.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)m_SkinsMenu.m_hMenu, GetResString(IDS_SKIN_PROF));
CMenu m_TextLabelsMenu;
m_TextLabelsMenu.CreateMenu();
m_TextLabelsMenu.AppendMenu(MF_STRING,MP_NOTEXTLABELS, GetResString(IDS_NOTEXTLABELS));
m_TextLabelsMenu.AppendMenu(MF_STRING,MP_TEXTLABELS,GetResString(IDS_ENABLETEXTLABELS));
m_TextLabelsMenu.AppendMenu(MF_STRING,MP_TEXTLABELSONRIGHT,GetResString(IDS_TEXTLABELSONRIGHT));
m_TextLabelsMenu.CheckMenuItem(thePrefs.GetToolbarLabelSettings(),MF_BYPOSITION|MF_CHECKED);
m_TextLabelsMenu.EnableMenuItem(thePrefs.GetToolbarLabelSettings(),MF_BYPOSITION|MF_DISABLED);
m_ToolbarMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT_PTR)m_TextLabelsMenu.m_hMenu, GetResString(IDS_TEXTLABELS));
m_ToolbarMenu.AppendMenu(MF_STRING,MP_CUSTOMIZETOOLBAR, GetResString(IDS_CUSTOMIZETOOLBAR));
m_ToolbarMenu.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];
*pResult = TRUE;
}
}
void CMuleToolbarCtrl::OnTbnToolbarChange(NMHDR *pNMHDR, LRESULT *pResult)
{
TBBUTTON buttoninfo;
CString config;
CString buffer;
for(int i=0;i<GetButtonCount();i++)
if(GetButton(i, &buttoninfo))
{
buffer.Format(_T("%02i"), (buttoninfo.idCommand!=0)?buttoninfo.idCommand-IDC_TOOLBARBUTTON:99);
config.Append(buffer);
}
thePrefs.SetToolbarSettings(config);
Localize();
theApp.emuledlg->ShowConnectionState();
SetBtnWidth();
AutoSize();
*pResult = 0;
}
void CMuleToolbarCtrl::ChangeToolbarBitmap(CString path, bool refresh)
{
bool bResult = false;
CImageList ImageList;
CEnBitmap Bitmap;
if (!path.IsEmpty() && Bitmap.LoadImage(path))
{
BITMAP bm = {0};
Bitmap.GetObject(sizeof(bm), &bm);
bool bAlpha = bm.bmBitsPixel > 24;
if (ImageList.Create(32, 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(32, 32, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1);
ImageList.Add(CTempIconLoader(_T("BN_CONNECT"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_DISCONNECT"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_STOPCONNECTING"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_KADEMLIA"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_SERVER"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_DOWNLOAD"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_SEARCH"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_FILES"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_MESSAGES"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_IRC"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_STATISTICS"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_PREFERENCES"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_TOOLS"), 32, 32));
ImageList.Add(CTempIconLoader(_T("BN_HELP"), 32, 32));
CImageList* pimlOld = SetImageList(&ImageList);
ImageList.Detach();
if (pimlOld)
pimlOld->DeleteImageList();
}
if (refresh)
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_NOTEXTLABELS:
ChangeTextLabelStyle(0,TRUE);
thePrefs.SetToolbarLabelSettings(0);
break;
case MP_TEXTLABELS:
ChangeTextLabelStyle(1,TRUE);
thePrefs.SetToolbarLabelSettings(1);
break;
case MP_TEXTLABELSONRIGHT:
ChangeTextLabelStyle(2,TRUE);
thePrefs.SetToolbarLabelSettings(2);
break;
case MP_SELECT_SKIN_DIR:{
TCHAR buffer[MAX_PATH];
_sntprintf(buffer,ARRSIZE(buffer),_T("%s"), thePrefs.GetSkinProfileDir());
if(SelectDir(m_hWnd, buffer, _T("Select skin profile directory")))
thePrefs.SetSkinProfileDir(buffer);
break;
}
case MP_SELECT_SKIN_FILE:
{
CString strFilter(_T("eMule Skin Files ("));
for (int f = 0; f < ARRSIZE(_apszSkinFiles); f++){
if (f > 0)
strFilter += _T(';');
strFilter += _apszSkinFiles[f];
}
strFilter += _T(")|");
for (int f = 0; f < ARRSIZE(_apszSkinFiles); f++){
if (f > 0)
strFilter += _T(';');
strFilter += _apszSkinFiles[f];
}
strFilter += _T("||");
CFileDialog dialog(TRUE, EMULSKIN_BASEEXT _T(".ini"), NULL, OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST, strFilter, NULL, 0);
if (IDOK == dialog.DoModal())
{
if(thePrefs.GetSkinProfile()!=dialog.GetPathName())
theApp.ApplySkin(dialog.GetPathName());
}
break;
}
default:
if(wParam >= MP_TOOLBARBITMAP && wParam < MP_TOOLBARBITMAP + 50)
{
if(thePrefs.GetToolbarBitmapSettings()!=bitmappaths[wParam-MP_TOOLBARBITMAP])
{
ChangeToolbarBitmap(bitmappaths[wParam-MP_TOOLBARBITMAP], true);
thePrefs.SetToolbarBitmapSettings(bitmappaths[wParam-MP_TOOLBARBITMAP]);
}
}
else if (wParam >= MP_SKIN_PROFILE && wParam < MP_SKIN_PROFILE + 50)
{
if (thePrefs.GetSkinProfile() != aSkinPaths[wParam - MP_SKIN_PROFILE])
theApp.ApplySkin(aSkinPaths[wParam - MP_SKIN_PROFILE]);
}
}
return true;
}
void CMuleToolbarCtrl::ChangeTextLabelStyle(int settings, bool refresh)
{
if(m_iToolbarLabelSettings!=settings)
{
switch(settings)
{
case 0:
SetStyle(GetStyle() & ~TBSTYLE_LIST);
SetMaxTextRows(0);
break;
case 1:
SetStyle(GetStyle() & ~TBSTYLE_LIST);
SetMaxTextRows(1);
break;
case 2:
SetStyle(GetStyle() | TBSTYLE_LIST);
SetMaxTextRows(1);
break;
}
if((m_iToolbarLabelSettings+settings)!=2) //if not changing between no labels and labels on right
{
for(int i = 0; i < m_buttoncount; i++)
{
TBBUTTONINFO buttonInfo;
buttonInfo.cbSize=sizeof(buttonInfo);
buttonInfo.dwMask=TBIF_STYLE;
GetButtonInfo(IDC_TOOLBARBUTTON + i, &buttonInfo);
if(settings==1)
buttonInfo.fsStyle &= ~TBSTYLE_AUTOSIZE;
else
buttonInfo.fsStyle |= TBSTYLE_AUTOSIZE;
SetButtonInfo(IDC_TOOLBARBUTTON + i, &buttonInfo);
}
}
m_iToolbarLabelSettings=settings;
if(refresh)
Refresh();
}
}
void CMuleToolbarCtrl::Refresh()
{
SetBtnWidth();
AutoSize();
CRect rToolbarRect;
GetWindowRect(&rToolbarRect);
if (_iPreviousHeight == rToolbarRect.Height())
{
Invalidate();
RedrawWindow();
}
else
{
_iPreviousHeight = rToolbarRect.Height();
CRect rClientRect;
theApp.emuledlg->GetClientRect(&rClientRect);
CRect rStatusbarRect;
theApp.emuledlg->statusbar->GetWindowRect(&rStatusbarRect);
rClientRect.top += rToolbarRect.Height();
rClientRect.bottom -= rStatusbarRect.Height();
CWnd* wnds[] =
{
theApp.emuledlg->serverwnd,
theApp.emuledlg->kademliawnd,
theApp.emuledlg->transferwnd,
theApp.emuledlg->sharedfileswnd,
theApp.emuledlg->searchwnd,
theApp.emuledlg->chatwnd,
theApp.emuledlg->ircwnd,
theApp.emuledlg->statisticswnd
};
for (int i = 0; i < ARRSIZE(wnds); i++)
{
wnds[i]->SetWindowPos(NULL, rClientRect.left, rClientRect.top, rClientRect.Width(), rClientRect.Height(), SWP_NOZORDER);
theApp.emuledlg->RemoveAnchor(wnds[i]->m_hWnd);
theApp.emuledlg->AddAnchor(wnds[i]->m_hWnd, TOP_LEFT, BOTTOM_RIGHT);
}
theApp.emuledlg->Invalidate();
theApp.emuledlg->RedrawWindow();
}
}
void CMuleToolbarCtrl::OnTbnReset(NMHDR *pNMHDR, LRESULT *pResult)
{
// First get rid of old buttons
// while saving their states
for ( int i = GetButtonCount()-1; i >= 0 ; i-- )
{
TBBUTTON Button;
GetButton(i,&Button);
for ( int j= 0; j <m_buttoncount ; j++ )
{
if ( TBButtons[j].idCommand == Button.idCommand )
{
TBButtons[j].fsState = Button.fsState;
TBButtons[j].fsStyle = Button.fsStyle;
TBButtons[j].iString = Button.iString;
}
}
DeleteButton(i);
}
TBBUTTON sepButton;
sepButton.idCommand = 0;
sepButton.fsStyle = TBSTYLE_SEP;
sepButton.fsState = TBSTATE_ENABLED;
sepButton.iString = -1;
sepButton.iBitmap = -1;
// set default configuration
CString config = strDefaultToolbar;
for(i=0;i<config.GetLength();i+=2)
{
int index = _tstoi(config.Mid(i,2));
if(index==99)
{
AddButtons(1,&sepButton);
continue;
}
AddButtons(1,&TBButtons[index]);
}
// save new (default) configuration
thePrefs.SetToolbarSettings(config.GetBuffer(256));
config.ReleaseBuffer();
Localize(); // we have to localize the button-text
theApp.emuledlg->ShowConnectionState();
m_iToolbarLabelSettings=4;
ChangeTextLabelStyle(thePrefs.GetToolbarLabelSettings(), false);
SetBtnWidth(); // then calc and set the button width
AutoSize();
}
void CMuleToolbarCtrl::OnTbnInitCustomize(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = TBNRF_HIDEHELP;
}
void CMuleToolbarCtrl::OnSysColorChange()
{
CToolBarCtrl::OnSysColorChange();
ChangeToolbarBitmap(thePrefs.GetToolbarBitmapSettings(), true);
}
void CMuleToolbarCtrl::ReloadConfig(){
while (GetButtonCount() != 0)
DeleteButton(0);
Init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -