📄 qqeditdlg.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 + -