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

📄 qqeditdlg.cpp

📁 NOOPENQQ的源碼 NOOPENQQ是一個掛QQ的好軟件
💻 CPP
字号:
// QQEditDlg.cpp : implementation file
//

#include "stdafx.h"
#include "noopenqqgui.h"
#include "QQEditDlg.h"
#include "../MicroQQ/qqlib/QQDefine.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CQQEditDlg dialog


CQQEditDlg::CQQEditDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQQEditDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CQQEditDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CQQEditDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQQEditDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQQEditDlg, CDialog)
	//{{AFX_MSG_MAP(CQQEditDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
char* kenstrtokbase(char *&string,char *seps){
	char *retv;
	if(retv=string){
		string=strpbrk(string,seps);
		if(string)*string++=0;
	}
	return retv;
}

char* kenstrtok(char *&string,char *seps){
lpnext:
	char *retv=kenstrtokbase(string,seps);
	if(retv)if(retv[0]==0)goto lpnext;
	return retv;
}
/////////////////////////////////////////////////////////////////////////////
// CQQEditDlg message handlers

BOOL CQQEditDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	if( (m_IsEdit=(m_ClientNode.GetCount()>0)) ){
		SetWindowText("编辑");
		CQQClientBase *lpClient=m_ClientNode.GetHead();
		m_Status=lpClient->m_Status;
		m_UseTM=lpClient->m_UseTM;
		m_HasVideo=lpClient->m_HasVideo;
		m_IsTCP=lpClient->m_lpSocket->m_IsTCP;
		m_AutoLogin=lpClient->m_lpClientDataEx->m_AutoLogin;
		m_AutoOff=lpClient->m_lpClientDataEx->m_AutoOff;
		m_OtherQQ=lpClient->m_lpClientDataEx->m_OtherQQ;
		m_SaveMsg=lpClient->m_lpClientDataEx->m_SaveMsg;
		strncpy(m_RetMsg,lpClient->m_lpClientDataEx->m_RetMsg,sizeof(m_RetMsg));
	}else{
		SetWindowText("添加");
		m_Status=QQ_STATUS_AWAY;
		m_UseTM=FALSE;
		m_HasVideo=FALSE;
		m_AutoOff=TRUE;
		m_IsTCP=FALSE;
		m_AutoLogin=FALSE;
		m_OtherQQ=0;
		m_SaveMsg=FALSE;
		strcpy(m_RetMsg,"这家伙很牛,挂Q中...");
	}
	CheckDlgButton( (m_Status==QQ_STATUS_ONLINE?IDC_RADIO1:
		(m_Status==QQ_STATUS_AWAY?IDC_RADIO2:IDC_RADIO3 ) ),TRUE);
	if(m_OtherQQ>10000)
		SetDlgItemInt(IDC_EDIT_TOQQ,m_OtherQQ);
	CheckDlgButton(IDC_CHECK_VIDEO,m_HasVideo);
	CheckDlgButton(IDC_CHECK_AUTOLOGIN,m_AutoLogin);
	CheckDlgButton(IDC_CHECK_AUTOLOGOUT,m_AutoOff);
	CheckDlgButton(IDC_CHECK_USETM,m_UseTM);
	CheckDlgButton(IDC_CHECK_TCP,m_IsTCP);
	CheckDlgButton(IDC_CHECK_SAVEMSG,m_SaveMsg);
	SetDlgItemText(IDC_EDIT_RET_MSG,m_RetMsg);
	char buf[64*1024-1];
	char *lpbuf=buf;
	*lpbuf=0;
	for(POSITION ps=m_ClientNode.GetHeadPosition();ps;m_ClientNode.GetNext(ps)){
		lpbuf+=sprintf(lpbuf,"%d\r\n",m_ClientNode.GetAt(ps)->m_QQ);
		if( (lpbuf-buf)>(64*1024-512)){
			strcpy(lpbuf,"...");
			break;
		}
	}
	SetDlgItemText(IDC_EDIT_QQ_PWD,buf);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CQQEditDlg::OnOK(){
	char buf[64*1024-1];long qq;
	if(IsDlgButtonChecked(IDC_RADIO1))m_Status=QQ_STATUS_ONLINE;
	if(IsDlgButtonChecked(IDC_RADIO2))m_Status=QQ_STATUS_AWAY;
	if(IsDlgButtonChecked(IDC_RADIO3))m_Status=QQ_STATUS_HIDDEN;
	m_OtherQQ=GetDlgItemInt(IDC_EDIT_TOQQ);
	if(m_OtherQQ<10001)m_OtherQQ=0;
	m_HasVideo=IsDlgButtonChecked(IDC_CHECK_VIDEO);
	m_AutoLogin=IsDlgButtonChecked(IDC_CHECK_AUTOLOGIN);
	m_AutoOff=IsDlgButtonChecked(IDC_CHECK_AUTOLOGOUT);
	m_UseTM=IsDlgButtonChecked(IDC_CHECK_USETM);
	m_IsTCP=IsDlgButtonChecked(IDC_CHECK_TCP);
	m_SaveMsg=IsDlgButtonChecked(IDC_CHECK_SAVEMSG);
	GetDlgItemText(IDC_EDIT_RET_MSG,m_RetMsg,sizeof(m_RetMsg));

	GetDlgItemText(IDC_EDIT_QQ_PWD,buf,sizeof(buf));
	char *pp;
	char *pnext=buf;
	while(pp=kenstrtok(pnext,"\r\n")){
		LPSTR lppwd=strchr(pp,'-');
		if(lppwd){
			*lppwd++=0;
			while(*lppwd=='-')lppwd++;
		}
		qq=atol(pp);
		if(qq<10001)continue;
		CQQClientBase *lpClient=NULL;
		POSITION ps=m_ClientNode.GetHeadPosition();
		for(;ps;m_ClientNode.GetNext(ps))
			if(m_ClientNode.GetAt(ps)->m_QQ==(DWORD)qq){
				lpClient=m_ClientNode.GetAt(ps);
				m_ClientNode.GetNext(ps);//pPrev;
				break;
			}
		if(ps==NULL)ps=m_ClientNode.GetHeadPosition();;
		if(lpClient==NULL){
			lpClient=m_lpQQPlugin->lpNewQQClient(m_lpGuiWndBase);
			lpClient->m_QQ=qq;
			m_ClientNode.AddHead(lpClient);
			m_lpQQListView->AddQQ(lpClient);
			void AttachQQClient(CQQClientBase *lpClient);
			AttachQQClient(lpClient);
			if(ps)
				memcpy(lpClient->m_Password,m_ClientNode.GetAt(ps)->m_Password,QQ_KEY_LENGTH);
		}
		if(lppwd){
			if(*lppwd){
				lpClient->SetLoginPassword(lppwd);//此处为了简化,使用主程序的MD5计算密码
				//你也可以使用自己的MD5计算两次,再复制到密码数据 [m_Password]
			}else{
				if(ps)
					memcpy(lpClient->m_Password,m_ClientNode.GetAt(ps)->m_Password,QQ_KEY_LENGTH );
			}
		}
		bool IsChangeStatus=false;
		bool IsReLogin=false;
			if(lpClient->m_Status!=m_Status)IsChangeStatus=true;
		lpClient->m_Status=m_Status;
			if(lpClient->m_UseTM!=m_UseTM)IsReLogin=true;
		lpClient->m_UseTM=m_UseTM;
			if(lpClient->m_HasVideo!=m_HasVideo)IsChangeStatus=true;
		lpClient->m_HasVideo=m_HasVideo;
			if(lpClient->m_lpSocket->m_IsTCP!=m_IsTCP)IsReLogin=true;
		lpClient->m_lpSocket->m_IsTCP=m_IsTCP;
		lpClient->m_lpClientDataEx->m_AutoLogin=m_AutoLogin;
		lpClient->m_lpClientDataEx->m_AutoOff=m_AutoOff;
		lpClient->m_lpClientDataEx->m_OtherQQ=m_OtherQQ;
		lpClient->m_lpClientDataEx->m_SaveMsg=m_SaveMsg;
		strncpy(lpClient->m_lpClientDataEx->m_RetMsg,m_RetMsg,sizeof(lpClient->m_lpClientDataEx->m_RetMsg));
		if(IsReLogin || (!lpClient->m_IsLogin && m_AutoLogin)){
			lpClient->Login();
		}else if(IsChangeStatus && lpClient->m_IsLogin)
			lpClient->ChangeStatus();
	}
	CDialog::OnOK();
}

⌨️ 快捷键说明

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