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

📄 myqqdlg.cpp

📁 采用MFC来实现QQ界面设计
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MyQQDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MyQQ.h"
#include "MyQQDlg.h"
#include "about.h"
#include "QQSendMessage.h"
#include "MainDlg.h"
#include "MainDialog.h"
#include "MainInfo.h"

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


//////////////////////////////////////////////////////////////////////////
// 添加的代码在此
#define WM_DISPLAYTASKICON		WM_USER+102
#define WM_MYMOUSEMOVE			WM_USER+101
#define ID_QQTREE 				8001
#define ID_QQOTHERS 			8002

static CString	myClass[10]=
	{
		"曹昱", "龚亮华", "王娜", 
		"陈春雷","王倩","何丰", 
		"周帆", "江红玉","张振华","岑高峰"
	};

 CString	treeItem[6]=
 {
	 "此处显示群信息", 
	 "生产实习1组", 
	 "生产实习2组",
	 "其它群", 
	 "群内组织",
	 "讨论组"
 };
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// CMyQQDlg dialog

CMyQQDlg::CMyQQDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyQQDlg::IDD, pParent)
{
	
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	isDisplayInTask=true;
}

void CMyQQDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyQQDlg)
	DDX_Control(pDX, IDC_QQFRIEND, m_QQfriend);
	DDX_Control(pDX, IDC_OTHERS, m_QQothers);
	DDX_Control(pDX, IDC_QQQUN, m_QQqun);
	DDX_Control(pDX, IDC_STATUSPICTURE, m_statusPic);
	DDX_Control(pDX, IDC_LIST1, m_List1);
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyQQDlg, CDialog)
	//{{AFX_MSG_MAP(CMyQQDlg)
	ON_MESSAGE(WM_DISPLAYTASKICON, OnDisplayTaskIcon)
	ON_MESSAGE(WM_MYMOUSEMOVE, OnMymouseMove)
	ON_NOTIFY(NM_DBLCLK, ID_QQTREE, OnDblclkQQqunTree)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_QQFRIEND, OnQqfriend)
	ON_BN_CLICKED(IDC_QQQUN, OnQqqun)
	ON_BN_CLICKED(IDC_OTHERS, OnOthers)
	ON_COMMAND(ID_SHOWMAX, OnShowmax)
	ON_COMMAND(ID_SHOWMIN, OnShowmin)
	ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclickList1)
	ON_BN_CLICKED(IDC_QQMENU, OnQqmenu)
	ON_BN_CLICKED(IDC_QQSTATUS, OnQqstatus)
	ON_COMMAND(ID_HIDDEN, OnHidden)
	ON_COMMAND(ID_ONLINE, OnOnline)
	ON_COMMAND(ID_OUTLINE, OnOutline)
	ON_COMMAND(ID_EXIT, OnExit)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkMyFriend)
	ON_WM_CLOSE()
	ON_WM_TIMER()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyQQDlg message handlers

BOOL CMyQQDlg::OnInitDialog()
{
	//////////////////////////////////////////////////////////////////////////
	// 初始化的代码
	isMinimize=FALSE;
	isClose=false;
	CDialog::OnInitDialog();
	// 将该对话框放置到右上角;
	GetWindowRect(&dlgrect);
	MoveWindow(GetSystemMetrics(SM_CXSCREEN)-dlgrect.Width()-20, 0,
		dlgrect.Width(), dlgrect.Height(), true);
	//////////////////////////////////////////////////////////////////////////
	
	CDialog::OnInitDialog();
	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	//////////////////////////////////////////////////////////////////////////
	// 获取得第一个按钮和最后一个按钮的位置
	GetDlgItem(IDC_QQFRIEND)->GetWindowRect(&rect0);
	ScreenToClient(&rect0);
	GetDlgItem(IDC_QQQUN)->GetWindowRect(&rect1);
	ScreenToClient(&rect1);

	//////////////////////////////////////////////////////////////////////////
	// 此处创建一颗树,群树;
	int treex, treey;
	treex=0;
	treey=rect0.bottom+rect0.Height();
	
	if(!treeCtrl.Create(WS_CHILD| WS_BORDER | WS_TABSTOP|TVS_HASBUTTONS | 
                    TVS_HASLINES | TVS_LINESATROOT | WS_BORDER ,
		//CRect(0, 0, 150, 300),
		CRect(treex, treey,
		rect0.Width(), 
		rect1.bottom), 
		this, ID_QQTREE))
	{
		MessageBox("QQ群创建失败\n程序异常终止!");
		return -1;
	}

	DisplayQQface();				// 显示QQface
	
	treeCtrl.SetImageList ( &m_treeQunimage,TVSIL_NORMAL);
	treeCtrl.SetTextColor (RGB(255,0,0));
	treeCtrl.InsertItem(_T(treeItem[0]), 0, 0);

	HTREEITEM hroot0=treeCtrl.InsertItem(_T(treeItem[1]), 0, 0);
	
	treeCtrl.InsertItem(_T(treeItem[2]),0, 0);
	treeCtrl.InsertItem(_T(treeItem[3]),0, 0);

	HTREEITEM hroot01=treeCtrl.InsertItem(_T(treeItem[4]), 1, 1, hroot0);
	treeCtrl.InsertItem(_T(treeItem[5]), 0, 0, hroot0);
	
	for(int i=0; i<10; i++)
	{
		treeCtrl.InsertItem(_T(myClass[i]), 
			i, i,  hroot01);
	}
	treeCtrl.Expand(hroot01,TVE_EXPAND);
	treeCtrl.ShowWindow(SW_HIDE);
	//////////////////////////////////////////////////////////////////////////
	
	//////////////////////////////////////////////////////////////////////////
	// 动态创建最近联系人列表控件:
	if(!m_List2.Create(LVS_SMALLICON | WS_TABSTOP
		|WS_CHILD| WS_BORDER, 
		CRect(0, treey+rect0.Height(), 
		rect0.Width(), rect1.bottom+rect0.Height()),
		this, ID_QQOTHERS))
	{
		MessageBox("QQ联系人或其它创建失败\n程序异常终止!");
		return -1;
	}
	m_List2.SetImageList(&m_imagelist2, LVSIL_SMALL);
	m_List2.ShowWindow(SW_HIDE);
	//////////////////////////////////////////////////////////////////////////
	// 显示随机的QQ好友
	TopButtonNum=0;					// 排在最顶上的按钮标识
	clicknum=1;						// 点击的按钮标识
	isBigFace=true;
	ChangeView();
	//////////////////////////////////////////////////////////////////////////
	DisplayInTask(); //显示到任务栏里面去;
	Sleep(500);
	OnOutline();
	Sleep(500);
	OnHidden();
	Sleep(500);
	OnOutline();
	Sleep(500);
	OnHidden();
	SetTimer(1, 50, NULL);
	//////////////////////////////////////////////////////////////////////////
	// 上线代码
	PlaySound("SYSTEM.WAV",  AfxGetResourceHandle(),
		SND_RESOURCE|SND_ASYNC|SND_NODEFAULT);
	OnOnline();
	return TRUE;  
}

void CMyQQDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}

	else if (nID==SC_MINIMIZE)
	{
		if(isMinimize)
		{
			// 移到右上面;
			MoveWindow(GetSystemMetrics(SM_CXSCREEN)-dlgrect.Width()-20, 0,
				dlgrect.Width(), dlgrect.Height(), true);
			isMinimize=false;
		}
		else
		{
			CWnd* pRet = NULL ;
			HWND hwnd = ::FindWindow("Shell_TrayWnd",NULL) ;
			if(hwnd)
			{
				pRet = CWnd::FromHandle(hwnd) ;
			}
			CRect rect;
			pRet->GetClientRect(&rect);
			ClientToScreen(&rect);

			CString str;
			str.Format("%d", rect.Height());

			MoveWindow(0, GetSystemMetrics(SM_CYSCREEN)-80, 
				dlgrect.Width(), 
				GetSystemMetrics(SM_CYCAPTION)+6, true);
			isMinimize=true;
		}
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

void CMyQQDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyQQDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMyQQDlg::OnQqfriend() 
{
	PlaySound("folder.wav",  AfxGetResourceHandle(),
		SND_RESOURCE|SND_ASYNC|SND_NODEFAULT);
	clicknum=1;
	// TODO: Add your control notification handler code here
	if(TopButtonNum==1)
	{
		return ;
	}

	ChangeView();
	TopButtonNum=1;
}

void CMyQQDlg::ChangeView()
{
	// 开始对按钮进行各个处理

	if(TopButtonNum!=1&&clicknum==1)
	{
		//////////////////////////////////////////////////////////////////////////
		// QQ好友不第一全按钮已经置于最上层
		// 所以无需移动
		// 其余全置于下面
		m_QQothers.MoveWindow(0, rect1.bottom,
			rect0.Width(), rect0.Height(), true);
		m_QQqun.MoveWindow(0, rect1.bottom-rect1.Height(),
			rect0.Width(), rect0.Height(), true);

		//////////////////////////////////////////////////////////////////////////
		// QQ好友 
		if(isBigFace)
		{
			m_List1.SetImageList(&m_imagelist2, LVSIL_SMALL);
		}
		else
		{
			m_List1.SetImageList(&m_imagelist1, LVSIL_SMALL);
		}
		m_List1.DeleteAllItems();
		for(int i=1; i<11; i++)
		{
		//	m_List1.InsertItem(0xffff,"", -1);
			m_List1.InsertItem(0xffff,"\n"+myClass[i-1], i);
		}
		m_List1.InsertItem(0xffff,"", -1);
		//////////////////////////////////////////////////////////////////////////
		// 显示该栏目的下的QQ好友, 隐藏其它栏目;
		m_List1.ShowWindow(SW_SHOW);
		m_List2.ShowWindow(SW_HIDE);
		treeCtrl.ShowWindow(SW_HIDE);
		return;
	}

	if(TopButtonNum!=2&&clicknum==2)
	{
		// 先将排在它上面的按钮置上不闻;
		m_QQqun.MoveWindow(0, rect0.bottom,
			rect0.Width(), rect0.Height(), true);
		// 将排在它后面的按钮置后;
		m_QQothers.MoveWindow(0, rect1.bottom, 
			rect0.Width(), rect0.Height(), true);

		// 显示该栏目的下的QQ群, 隐藏其它栏目;
		m_List1.ShowWindow(SW_HIDE);
		m_List2.ShowWindow(SW_HIDE);
		treeCtrl.ShowWindow(SW_SHOW);
		return;
	}

	//////////////////////////////////////////////////////////////////////////
	//* ignoring these codes;
	if(TopButtonNum!=3&&clicknum==3)
	{
		// 全部挤到上面去
		m_QQfriend.MoveWindow(0, rect0.top, 
			rect0.Width(), rect0.Height(), true);

		m_QQqun.MoveWindow(0, rect0.bottom,
			rect0.Width(), rect0.Height(), true);

		m_QQothers.MoveWindow(0, rect0.bottom+rect0.Height(), 
			rect0.Width(), rect0.Height(), true);
		
		//////////////////////////////////////////////////////////////////////////
		// 随机产生最近联系人
		m_List2.DeleteAllItems();

⌨️ 快捷键说明

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