noopenqqgui.cpp

来自「NOOPENQQ的源碼 NOOPENQQ是一個掛QQ的好軟件」· C++ 代码 · 共 236 行

CPP
236
字号
#include "stdafx.h"
#include "NoOpenQQGui.h"
#include "MyQQPacket.h"
#include <time.h>

char * m_ToolBarStr[]={"全选","上线","下线","添加","删除","说明","主页"};
char * m_ToolBarTipStr[]={"选择所有QQ","使选择的QQ上线","使选择的QQ下线",
						"添加新的QQ","删除所选的QQ","使用事项","访问官方主页"};

#define TB_CMD_BEGIN	100
enum{TB_CMD_SELALL=TB_CMD_BEGIN,TB_CMD_LOGIN,TB_CMD_LOGOUT,
	TB_CMD_ADD,TB_CMD_DEL,TB_CMD_ABOUT,TB_CMD_HOMEPAGE
};
TBBUTTON m_ToolBarBut[]={
	{0,TB_CMD_SELALL,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,0},
	{0,TB_CMD_LOGIN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,1},
	{0,TB_CMD_LOGOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,2},
	{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0},
	{0,TB_CMD_ADD,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,3},
	{0,TB_CMD_DEL,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,4},
	{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0},
	{0,TB_CMD_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,5},
	{0,TB_CMD_HOMEPAGE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,6}
};

#define TM_ID_UPDATE	0
#define TM_TM_UPDATE	(1000*30)

/////////////////////////////////////////////////////////////////////////////
// CNoOpenQQGui dialog


CNoOpenQQGui::CNoOpenQQGui(CWnd* pParent /*=NULL*/)
	: CDialog(CNoOpenQQGui::IDD, pParent){}


void CNoOpenQQGui::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CNoOpenQQGui, CDialog)
	//{{AFX_MSG_MAP(CNoOpenQQGui)
	ON_WM_CLOSE()
	ON_WM_SIZE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNoOpenQQGui message handlers
BOOL CNoOpenQQGui::OnInitDialog(){
	CDialog::OnInitDialog();
	m_lpNoOpenQQGui=this;
	char WndTitle[512];
	sprintf(WndTitle,"NoOpenQQ [MicroQQ %x.%x]",m_lpQQPlugin->MicroQQ_MajorVer,m_lpQQPlugin->MicroQQ_MinorVer);
	SetWindowText(WndTitle);
	SetIcon(m_lpQQPlugin->hIcon,TRUE);
	RECT Rc={0,0,0,0};
	m_ToolBar.Create(WS_CHILD|WS_VISIBLE|TBSTYLE_WRAPABLE|TBSTYLE_TOOLTIPS|TBSTYLE_FLAT,
		Rc,this,0);
	//m_ToolBar.Create(m_hWnd);
	::SetWindowLong(m_ToolBar.GetToolTips()->m_hWnd,GWL_STYLE,TTS_BALLOON | WS_POPUP);
	for(DWORD pts=0;pts<sizeof(m_ToolBarStr)/sizeof(char *);pts++)
		m_ToolBar.AddStrings(m_ToolBarStr[pts]);
	m_ToolBar.AddButtons(sizeof(m_ToolBarBut)/sizeof(TBBUTTON),m_ToolBarBut);
	m_ToolBar.SetBitmapSize(CSize(0,0));
	m_ToolBar.SetButtonSize(CSize(36,22));
	m_StatusBar.Create(WS_CHILDWINDOW|WS_VISIBLE,Rc,this,0);
	m_QQListView.InitListView(::GetDlgItem(CWnd::GetSafeHwnd(),IDC_LIST_QQCLIENT));
	OnSize(0,0,0);

	m_lpQQConfig=(*m_lpQQPlugin->lpNewQQConfig)();
	m_lpOldOnSaveQQClient=m_lpQQConfig->m_lpOnSaveQQClient;
	m_lpQQConfig->m_lpOnSaveQQClient=CQQConfig_OnSaveQQClient;
	m_lpQQConfig->m_lpOnLoadAddQQClient=CQQConfig_OnLoadAddQQClient;
	m_lpQQGuiWnd=(*m_lpQQPlugin->lpNewQQGuiWnd)(m_lpQQConfig);
	//m_lpQQGuiWnd->m_lpOnHookMsg=OnHookQQGuiMsg;
	m_StartTime=time(NULL);
	OnTimer();
	SetTimer(TM_ID_UPDATE,TM_TM_UPDATE,NULL);

	m_lpQQConfig->LoadConfig();
	//m_TrayIcon.InitData(0,m_hWnd,WM_ICON);
	//strncpy(m_TrayIcon.szTip,WndTitle,sizeof(m_TrayIcon.szTip));
	//m_TrayIcon.hIcon=m_lpQQPlugin->hIcon;
	//IconMsg=m_TrayIcon.RegisterOnCreate();
	//m_TrayIcon.Show();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CNoOpenQQGui::OnClose(){
	//m_TrayIcon.Hide();
	m_lpQQConfig->SaveConfig();
	m_lpQQGuiWnd->Delete();
	m_lpQQConfig->Delete();
	m_QQListView.m_hWnd=0;
	CDialog::OnClose();
}

void CNoOpenQQGui::OnSize(UINT nType, int cx, int cy){
	//CDialog::OnSize(nType, cx, cy);
	if(!m_ToolBar.m_hWnd)return;
	RECT Rc;
	m_ToolBar.SendMessage(TB_AUTOSIZE);
	m_ToolBar.GetWindowRect(&Rc);
	long th=Rc.bottom-Rc.top;
	m_StatusBar.SendMessage(WM_SIZE);
	m_StatusBar.GetWindowRect(&Rc);
	int sh=Rc.bottom-Rc.top;
	GetClientRect(&Rc);
	m_QQListView.MoveWindow(0,th,Rc.right,Rc.bottom-sh-th);
}

BOOL CNoOpenQQGui::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
	switch(((LPNMHDR)lParam)->code){
		case TTN_NEEDTEXT:{
			LPTOOLTIPTEXT lptip=(LPTOOLTIPTEXT)lParam;
			int i=(int)lptip->hdr.idFrom-TB_CMD_BEGIN;
			if(i>=0 && i<RTL_NUMBER_OF(m_ToolBarTipStr))
				lptip->lpszText=m_ToolBarTipStr[i];
			}break;
		case NM_RCLICK:
			if(((LPNMHDR)lParam)->hwndFrom==m_QQListView.m_hWnd)AddQQ(TRUE);
			break;
		case LVN_COLUMNCLICK://排序
			m_QQListView.OnSortBy(LPNM_LISTVIEW(lParam)->iSubItem);
			break;
	}
	//return CDialog::OnNotify(wParam, lParam, pResult);
	return FALSE;
}

BOOL EnumQQClientOnTm(CQQClientBase *lpQQClientBase,va_list argptr){
	(*va_arg(argptr,DWORD *))++;
	if(lpQQClientBase->m_IsLogin)
		(*va_arg(argptr,DWORD *))++;
	return FALSE;
}

void CNoOpenQQGui::OnTimer(UINT nIDEvent){
	//CDialog::OnTimer(nIDEvent);
	char buf[1024];
	DWORD OnLineCount=0;
	DWORD QQCount=0;
	m_lpQQGuiWnd->EnumQQClient(&EnumQQClientOnTm,&QQCount,&OnLineCount);
	long UserTime=(time(NULL)-m_StartTime)/60;
	sprintf(buf,"QQ[%d] 在线[%d]  运行[%d:%02d]",
		QQCount,OnLineCount,
		UserTime/60,UserTime % 60
		);
	m_StatusBar.SetText(buf,0,0);
}

#include "QQEditDlg.h"

void CNoOpenQQGui::AddQQ(BOOL IsEdit){
	CQQEditDlg m_EditDlg(this);
	if(IsEdit){
		int count=m_QQListView.GetItemCount()-1;
		while(count>=0){
			if(m_QQListView.GetItemState(count,LVIS_SELECTED)){
				CQQClientBase *lpQQClient=m_QQListView.GetListViewItem(count);
				if(lpQQClient)m_EditDlg.m_ClientNode.AddHead(lpQQClient);
			}
			count--;
		}
	}
	if(m_EditDlg.Run(m_lpQQGuiWnd,&m_QQListView)==IDOK){
		//(*m_lpQQConfig->m_lpOnChangeConfig)(m_lpQQConfig);
	}
}

void CNoOpenQQGui::RunSelListCmd(DWORD CMD){
	int count=m_QQListView.GetItemCount()-1;
	while(count>=0){
		if(m_QQListView.GetItemState(count,LVIS_SELECTED)){
			CQQClientBase *lpQQClient=m_QQListView.GetListViewItem(count);
			if(lpQQClient){
				switch(CMD){
					case TB_CMD_DEL:
						m_QQListView.DeleteItem(count);
						lpQQClient->Delete();
						break;
					case TB_CMD_LOGIN:
						if(lpQQClient->m_IsLogin){
							if(lpQQClient->m_lpClientDataEx->m_Level_NextLevelDay==0)
								CQQClient_GetLevel(lpQQClient);
							if(lpQQClient->m_Status!=lpQQClient->m_LastStatus)
								lpQQClient->ChangeStatus();
						}else
							lpQQClient->Login();
						break;
					case TB_CMD_LOGOUT:
						lpQQClient->Logout();
						break;
				}
			}
		}
		count--;
	}
	OnTimer();
	//if(CMD==TB_CMD_DEL)(*m_lpQQConfig->m_lpOnChangeConfig)(m_lpQQConfig);
}

BOOL CNoOpenQQGui::OnCommand(WPARAM wParam, LPARAM lParam) 
{
			switch(LOWORD(wParam)){
				case TB_CMD_ADD:AddQQ(FALSE);break;
				case TB_CMD_SELALL:m_QQListView.SelectAll();break;
				case TB_CMD_LOGIN:
				case TB_CMD_LOGOUT:
				case TB_CMD_DEL:
					RunSelListCmd(LOWORD(wParam));break;
				case TB_CMD_HOMEPAGE:
					ShellExecute(NULL,"open","http://www.CHKen.com","","",SW_SHOWMAXIMIZED);break;
				case TB_CMD_ABOUT:
					MessageBox(
						"          MicroQQ 使用说明\r\n\r\n"
						"                      [插件:NoOpenQQ]\r\n\r\n"
						"---------------------------------------\r\n\r\n"
						"1.使用之前申请密码保护,后果自负\r\n"
						"2.请不要用于商业和非法用途\r\n"
						"3.在使用本软件时出现任何问题,请自行承担   \r\n\r\n"
						"---------------------------------------\r\n"
						"               首页:http://www.CHKen.com\r\n"
						"               论坛:http://www.d1w.cn"
						,"说明",MB_OK|MB_ICONQUESTION);
					break;
			}
	return CDialog::OnCommand(wParam, lParam);
}

⌨️ 快捷键说明

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