⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 muletoolbarctrl.cpp

📁 另外一款开放源码的高质量p2p源码软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -