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

📄 emuledlg.cpp

📁 非常出名开源客户端下载的程序emule
💻 CPP
📖 第 1 页 / 共 4 页
字号:
}

void CemuleDlg::OnPaint() {

	if (!startUpMinimized) {
		startUpMinimized=true;
		if (theApp.glob_prefs->GetStartMinimized()) OnCancel();
	}

	if (IsIconic()){
		CPaintDC dc(this);

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x, y, m_hIcon);
	}
	else{
		CTrayDialog::OnPaint();
	}
}


HCURSOR CemuleDlg::OnQueryDragIcon(){
	return static_cast<HCURSOR>(m_hIcon);
}

void CemuleDlg::OnBnClickedButton2(){
  if (!theApp.serverconnect->IsConnected()) 
    //connect if not currently connected
	if (!theApp.serverconnect->IsConnecting()  ) StartConnection(); else {
		theApp.serverconnect->StopConnectionTry();
		ShowConnectionState(false);
	}
  else
    //disconnect if currently connected
    CloseConnection();
}

void CemuleDlg::ResetLog(){
	logtext="";
	serverwnd.logbox.SetWindowText(logtext);
}

void CemuleDlg::ResetDebugLog(){
	debuglog="";
	serverwnd.debuglog.SetWindowText(debuglog);
}

void CemuleDlg::AddLogLine(bool addtostatusbar,CString line,...){
	char osDate[30],osTime[30]; //<<--9/21/02
	char temp[1060]; //<<--9/21/02
	char bufferline[1000];

	va_list argptr;
	va_start(argptr, line);
	_vsnprintf(bufferline, 1000, line, argptr);
	va_end(argptr);
	if (addtostatusbar)
		if (statusbar.m_hWnd)
			statusbar.SetText(bufferline,0,0);
		else
			AfxMessageBox(bufferline);
	
	_strtime( osTime ); //<<--9/21/02
	_strdate( osDate ); //<<--9/21/02
	sprintf(temp,"%s %s: %s",osDate,osTime,bufferline);//<<--9/21/02 
	logtext += temp; //<<--9/21/02
	logtext += "\r\n";
	if (ready){
		serverwnd.logbox.SetWindowText(logtext);
		serverwnd.logbox.LineScroll(serverwnd.logbox.GetLineCount());
		ShowNotifier(bufferline, TBN_LOG, false);
	}

	if (theApp.glob_prefs->Log2Disk()) {
		CString logfile = theApp.glob_prefs->GetAppDir() + CString("eMule.log");
		FILE* file = fopen(logfile , "a");
		fprintf(file, temp);
		fprintf(file, "\n");
		fclose(file);
	}
}

void CemuleDlg::AddDebugLogLine(bool addtostatusbar,CString line,...){
	if( !theApp.glob_prefs->GetVerbose() && !theApp.glob_prefs->Debug2Disk() )
		return;

	char osDate[30],osTime[30]; //<<--9/21/02
	char temp[1060]; //<<--9/21/02
	char bufferline[1000];

	va_list argptr;
	va_start(argptr, line);
	_vsnprintf(bufferline, 1000, line, argptr);
	va_end(argptr);
	if (theApp.glob_prefs->GetVerbose() && addtostatusbar)
		if (statusbar.m_hWnd)
			statusbar.SetText(bufferline,0,0);
		else
			AfxMessageBox(bufferline);
	
	_strtime( osTime ); //<<--9/21/02
	_strdate( osDate ); //<<--9/21/02
	sprintf(temp,"%s %s: %s",osDate,osTime,bufferline);//<<--9/21/02 
	debuglog += temp; //<<--9/21/02
	debuglog += "\r\n";
	if (ready && theApp.glob_prefs->GetVerbose()){
		serverwnd.debuglog.SetWindowText(debuglog);
		serverwnd.debuglog.LineScroll(serverwnd.debuglog.GetLineCount());
	}
	
	if (theApp.glob_prefs->Debug2Disk()) {
		CString msg=temp;
//		msg.MakeLower();
		if (msg.Find("Send:Source Request")==-1 &&
			msg.Find("RCV:")==-1) {

			CString logfile = theApp.glob_prefs->GetAppDir() + CString("eMule_Verbose.log");
			FILE* file = fopen(logfile , "a");
			fprintf(file, temp);
			fprintf(file, "\n");
			fclose(file);
		}
	}
}

void CemuleDlg::AddServerMessageLine(char* line,...){
	CString content;
	va_list argptr;
	char bufferline[500];
	va_start(argptr, line);
	_vsnprintf(bufferline, 500, line, argptr);
	va_end(argptr);
	serverwnd.servermsgbox.AppendText(CString(bufferline)+CString("\n"));
}

void CemuleDlg::ShowConnectionState(){ShowConnectionState( theApp.serverconnect->IsConnected() ,"");}

void CemuleDlg::ShowConnectionState(bool connected){ShowConnectionState(connected,"");}

void CemuleDlg::ShowConnectionState(bool connected, CString server,bool iconOnly){
	theApp.emuledlg->serverwnd.UpdateMyInfo();
	if (connected)
	{
		char szBuf[200];
		sprintf(szBuf, "%s", GetResString(IDS_MAIN_BTN_DISCONNECT));
		LPSTR pszBuf;
		TBBUTTONINFO tbi;
		LPTBBUTTONINFO lptbbi;
		pszBuf = szBuf;
		lptbbi = &tbi;
		tbi.dwMask = TBIF_IMAGE | TBIF_TEXT;
		tbi.cbSize = sizeof (TBBUTTONINFO);
		tbi.iImage = 9;
		tbi.pszText = pszBuf;
		tbi.cchText = sizeof (szBuf);
		toolbar.SetButtonInfo(IDC_TOOLBARBUTTON+0, lptbbi);
		//TOOLTIP: GetResString(IDS_MAIN_BTN_DISCONNECT_TOOLTIP)
				
		if (theApp.serverconnect->IsLowID()) 
			statusbar.SetIcon(3,connicons[1]);
		 else 
			statusbar.SetIcon(3,connicons[2]);
		
		if (!iconOnly) {
			statusbar.SetText(GetResString(IDS_MAIN_CONNECTEDTO) +CString(server),0,0);
			statusbar.SetTipText(3,server);
			statusbar.SetText(server,3,0);
		}
	}
	else
	{
		if (theApp.serverconnect->IsConnecting()) 
		{
			char szBuf[200];
			sprintf(szBuf, "%s", GetResString(IDS_MAIN_BTN_CANCEL));
			LPSTR pszBuf;
			TBBUTTONINFO tbi;
			LPTBBUTTONINFO lptbbi;
			pszBuf = szBuf;
			lptbbi = &tbi;
			tbi.dwMask = TBIF_IMAGE | TBIF_TEXT;
			tbi.cbSize = sizeof (TBBUTTONINFO);
			tbi.iImage = 10;
			tbi.pszText = pszBuf;
			tbi.cchText = sizeof (szBuf);
			toolbar.SetButtonInfo(IDC_TOOLBARBUTTON+0, lptbbi);
			//TOOLTIP: GetResString(IDS_MAIN_BTN_CONNECT_TOOLTIP)
			
			statusbar.SetIcon(3,connicons[0]);
			if (!iconOnly) {
				statusbar.SetText(GetResString(IDS_CONNECTING),3,0);
				statusbar.SetTipText(3,"");
			}
			ShowUserCount(0,0);

		} 
		else 
		{
			char szBuf[200];
			sprintf(szBuf, "%s", GetResString(IDS_MAIN_BTN_CONNECT));
			LPSTR pszBuf;
			TBBUTTONINFO tbi;
			LPTBBUTTONINFO lptbbi;
			pszBuf = szBuf;
			lptbbi = &tbi;
			tbi.dwMask = TBIF_IMAGE | TBIF_TEXT;
			tbi.cbSize = sizeof (TBBUTTONINFO);
			tbi.iImage = 0;
			tbi.pszText = pszBuf;
			tbi.cchText = sizeof (szBuf);
			toolbar.SetButtonInfo(IDC_TOOLBARBUTTON+0, lptbbi);
			//TOOLTIP: GetResString(IDS_CONNECTTOANYSERVER)
			//toolbar.AutoSize();

			statusbar.SetIcon(3,connicons[0]);
			if (!iconOnly) {
				statusbar.SetText(GetResString(IDS_NOTCONNECTED),3,0);
				theApp.emuledlg->AddLogLine(true,GetResString(IDS_DISCONNECTED));
				statusbar.SetTipText(3,"");
			}
			ShowUserCount(0,0);
		}

	}
}

void CemuleDlg::ShowUserCount(uint32 user_toshow, uint32 file_toshow){
	uint32 totaluser, totalfile;
	totaluser = totalfile = 0;
	if( user_toshow || file_toshow )
	 	theApp.serverlist->GetUserFileStatus( totaluser, totalfile );
	char buffer[100];
	sprintf(buffer, "%s: %s(%s) | %s: %s(%s)", GetResString(IDS_UUSERS), CastItoIShort(user_toshow), CastItoIShort(totaluser), GetResString(IDS_FILES), CastItoIShort(file_toshow), CastItoIShort(totalfile));
	statusbar.SetText(buffer,1,0);
}

void CemuleDlg::ShowMessageState(uint8 iconnr){
	statusbar.SetIcon(4,imicons[iconnr]);
	statusbar.SetDlgItemText(4,"!");
}

void CemuleDlg::ShowTransferRate(bool forceAll){
	char buffer[50];

	lastuprate = theApp.uploadqueue->GetDatarate();
	lastdownrate= theApp.downloadqueue->GetDatarate();
	int lastuprateoverhead = theApp.uploadqueue->GetUpDatarateOverhead();
	int lastdownrateoverhead = theApp.downloadqueue->GetDownDatarateOverhead();

	if( theApp.glob_prefs->ShowOverhead() )
		sprintf(buffer,GetResString(IDS_UPDOWN),(float)lastuprate/1024, (float)lastuprateoverhead/1024, (float)lastdownrate/1024, (float)lastdownrateoverhead/1024);
	else
		sprintf(buffer,GetResString(IDS_UPDOWNSMALL),(float)lastuprate/1024, (float)lastdownrate/1024);
	
	if (TrayIsVisible() || forceAll){
		char buffer2[100];
		// set trayicon-icon
		int DownRateProcent=(int)ceil ( (lastdownrate/10.24)/ theApp.glob_prefs->GetMaxGraphDownloadRate());
		if (DownRateProcent>100) DownRateProcent=100;
			UpdateTrayIcon(DownRateProcent);

		if (theApp.serverconnect->IsConnected()) 
			sprintf(buffer2,"eMule v%s (%s)\n%s",CURRENT_VERSION_LONG,GetResString(IDS_CONNECTED),buffer);
		else
			sprintf(buffer2,"eMule v%s (%s)\n%s",CURRENT_VERSION_LONG,GetResString(IDS_DISCONNECTED),buffer);

		buffer2[63]=0;
		TraySetToolTip(buffer2);
	}

	if (IsWindowVisible() || forceAll) {
		statusbar.SetText(buffer,2,0);
		if (lastuprate && lastdownrate)
			statusbar.SetIcon(2,transicons[3]);
		else if (lastuprate)
			statusbar.SetIcon(2,transicons[2]);
		else if (lastdownrate)
			statusbar.SetIcon(2,transicons[1]);
		else
			statusbar.SetIcon(2,transicons[0]);
	}
	if (!TrayIsVisible() && theApp.glob_prefs->ShowRatesOnTitle()) {
		sprintf(buffer,"(U:%.1f D:%.1f) eMule v%s",(float)lastuprate/1024, (float)lastdownrate/1024,CURRENT_VERSION_LONG);
		SetWindowText(buffer);
	}
}

void CemuleDlg::OnCancel(){
	if (*theApp.glob_prefs->GetMinTrayPTR()) {
			TrayShow();
			ShowWindow(SW_HIDE);
	} else {
			ShowWindow(SW_MINIMIZE);
	}
	ShowTransferRate();
}

void CemuleDlg::SetActiveDialog(CDialog* dlg){

	if(dlg == activewnd)
		return;

	activewnd->ShowWindow(SW_HIDE);
	dlg->ShowWindow(SW_SHOW);
	activewnd = dlg;
	if (dlg==&transferwnd) theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+2);
	else if (dlg==&serverwnd) theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+1);
	else if (dlg==&chatwnd) {theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+5);theApp.emuledlg->chatwnd.chatselector.ShowChat();}
	else if (dlg==&ircwnd) theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+6);
	else if (dlg==&sharedfileswnd) theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+4);
	else if (dlg==&searchwnd) theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+3);
	else if (dlg==&statisticswnd) {theApp.emuledlg->toolbar.CheckButton(IDC_TOOLBARBUTTON+7);	statisticswnd.ShowStatistics();}
}

void CemuleDlg::OnSize(UINT nType,int cx,int cy){
	CTrayDialog::OnSize(nType,cx,cy);
	CRect rect;
	statusbar.GetClientRect(&rect);
	int widths[5] = { rect.right-650, rect.right-410, rect.right-220,rect.right-25, -1 };
	statusbar.SetParts(5, widths);
}

extern void URLDecode(CString& result, const char* buff);

LRESULT CemuleDlg::OnWMData(WPARAM wParam,LPARAM lParam){

	tagCOPYDATASTRUCT* data = (tagCOPYDATASTRUCT*)lParam;
	if (data->dwData == OP_ED2KLINK){
		FlashWindow(true);
		if( theApp.glob_prefs->IsBringToFront() ){
			if (IsIconic())
				ShowWindow(SW_SHOWNORMAL);
			else if (TrayHide()){
				ShowWindow(SW_SHOW);
			}
		else
			SetForegroundWindow();
		}
		try {
			CString link2;
			CString link;
			link2 = (char*)data->lpData;
			link2.Replace("%7c","|");
			URLDecode(link,(const char*)link2.GetBuffer());
			CED2KLink* pLink = CED2KLink::CreateLinkFromUrl(link);
			_ASSERT( pLink !=0 );
			switch (pLink->GetKind()) {
			case CED2KLink::kFile:
				{
					CED2KFileLink* pFileLink = pLink->GetFileLink();
					_ASSERT(pFileLink !=0);
					theApp.downloadqueue->AddFileLinkToDownload(pFileLink);
				}
				break;
			case CED2KLink::kServerList:
				{
					CED2KServerListLink* pListLink = pLink->GetServerListLink(); 
					_ASSERT( pListLink !=0 ); 
					CString strAddress = pListLink->GetAddress(); 
					if(strAddress.GetLength() != 0)
						theApp.emuledlg->serverwnd.UpdateServerMetFromURL(strAddress);
				}
				break;
			case CED2KLink::kServer:
				{
					CString defName;
					CED2KServerLink* pSrvLink = pLink->GetServerLink();
					_ASSERT( pSrvLink !=0 );
					in_addr host;
					host.S_un.S_addr = pSrvLink->GetIP();
					CServer* pSrv = new CServer(pSrvLink->GetPort(),inet_ntoa(host));
					_ASSERT( pSrv !=0 );
					pSrvLink->GetDefaultName(defName);
					pSrv->SetListName(defName.GetBuffer());

					// Barry - Default all new servers to high priority
					pSrv->SetPreference(PR_HIGH);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -