www.gusucode.com > VC++模仿超炫Vista风格QQ界面-源码程序 > VC++模仿超炫Vista风格QQ界面/BeautyQQ/TabADlg.cpp

    // TabADlg.cpp : implementation file
//

#include "stdafx.h"
#include "BeautyQQ.h"
#include "TabADlg.h"

#include "TalkDlg.h"

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


//define a ID-MACRO for message loop .....
#define IDC_TREE1            (WM_USER+1)
#define IDC_GROUP            (WM_USER+2)

/////////////////////////////////////////////////////////////////////////////
// CTabADlg dialog


CTabADlg::CTabADlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTabADlg::IDD, pParent)
{
	m_pGroups = NULL;
}


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

}

BEGIN_MESSAGE_MAP(CTabADlg, CDialog)
	//{{AFX_MSG_MAP(CTabADlg)
	ON_WM_SIZE()
	ON_MESSAGE(WM_GROUPCTRL_RBUTTONUP, OnGroupRDown)
	ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnNodeLDBDown)
	ON_NOTIFY(NM_CLICK, IDC_TREE1, OnNodeLDown)
	ON_NOTIFY(NM_CLICK, IDC_GROUP, OnGroupRDown)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabADlg message handlers

void CTabADlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	//update the window position of the Ctrls
	GetClientRect(&m_rtClient);
	if (m_pGroups && IsWindow(m_pGroups->GetSafeHwnd()))
	{
		m_pGroups->MoveWindow(&m_rtClient);
	}	
}

BOOL CTabADlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//Initial all the Contrls before show.
	InitialCtrl();	

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}



//
////Initial all the Contrls before show.
//
void CTabADlg::InitialCtrl(void)
{
	// group  creat
	m_pGroups = new CBeautyGroupCtrlEx;
	m_pGroups->Create( _T("GroupCtrl"), WS_VISIBLE | WS_CHILD, 
		CRect(0, 0, 0, 0), this, IDC_GROUP);


	//icon dynamic load from file
	CString strName,strPath,strFilename;
	CBitmap bmpl,bmpld,bmp1,bmp2,bmp3,bmp4,bmp5,bmp6,bmp7;

	strPath = GetModulePath();
	strName = strPath +"\\skin\\1.bmp";
	bmpl.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
	strName = strPath +"\\skin\\2.bmp";
	bmpld.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
	strName = strPath +"\\skin\\user1.bmp";
	bmp1.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
	strName = strPath +"\\skin\\user2.bmp";
	bmp2.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));	
	strName = strPath +"\\skin\\user3.bmp";
	bmp3.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));	
	strName = strPath +"\\skin\\user4.bmp";
	bmp4.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));	
	strName = strPath +"\\skin\\user5.bmp";
	bmp5.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));	
	strName = strPath +"\\skin\\user6.bmp";
	bmp6.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));	
	strName = strPath +"\\skin\\user7.bmp";
	bmp7.Attach((HBITMAP)LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));	

	m_imagelistBmp.Create(30,30,ILC_COLOR32,10,10);
	m_imagelistBmp.SetBkColor(RGB(255,255,255));
	m_imagelistBmp.Add(&bmpl, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmpld, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp1, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp2, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp3, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp4, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp5, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp6, RGB(0, 0, 0));
	m_imagelistBmp.Add(&bmp7, RGB(0, 0, 0));


/*
// not use now, but we could use icon style or bmp style
	HICON hIcon1, hIcon2,hIcon3;
	strPath = GetModulePath();
	strName = strPath +"\\skin\\tree_norm.ico";
	hIcon1 = (HICON)LoadImage(NULL, strName, IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
	strName = strPath +"\\skin\\tree_sel.ico";
	hIcon2 = (HICON)LoadImage(NULL, strName, IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
	strName = strPath +"\\skin\\sys.ico";
	hIcon3 = (HICON)LoadImage(NULL, strName, IMAGE_ICON, 0, 0, LR_LOADFROMFILE);

	//image-list creat
	m_imagelist.Create(16,16,ILC_COLOR32,10,10);
	m_imagelist.SetBkColor(RGB(255,255,255));
	m_imagelist.Add(hIcon1);
	m_imagelist.Add(hIcon2);
	m_imagelist.Add(hIcon3);	
*/

	//tree creat and initial 
	HTREEITEM hParent = NULL;
	m_tree1.Create(WS_VISIBLE | WS_CHILD ,CRect(0, 0, 0, 0), m_pGroups, IDC_TREE1);  
	m_tree1.SetImageList(&m_imagelistBmp,TVSIL_NORMAL);
	m_tree1.ShowWindow(false);
	
	CString strFriendName;
	hParent = m_tree1.InsertItem(_T("同事(3/20)"),0,1);  
	for(int i = 0; i<7; i++)
	{
		strFriendName.Format(_T("同事 %d   "),i);
		m_tree1.InsertItem(strFriendName,(i+2)%9,(i+2)%9,hParent);  
	}
	
	hParent = m_tree1.InsertItem(_T("好友(5/10)"),0,1);  
	for(i = 0; i<7; i++)
	{
		strFriendName.Format(_T("好友 %d   "),i);
		m_tree1.InsertItem(strFriendName,(i+2)%9,(i+2)%9,hParent);  
	}
	
	hParent = m_tree1.InsertItem(_T("其他(1/3) "),0,1);
	m_tree1.InsertItem(_T("Hunter&Hacker    "),2,2,hParent);
	m_tree1.InsertItem(_T("D-Link    "),3,3,hParent);		
	m_tree1.InsertItem(_T("L.J-Wang    "),4,4,hParent);


	
	//group initial -- add child
	m_pGroups->AddOneGroup(_T("联系人"), &m_tree1);
	m_pGroups->AddOneGroup(_T("最近联系人"), NULL);
	m_pGroups->AddOneGroup(_T("自定义组"), NULL);
	m_pGroups->AddOneGroup(_T("讨论组"), NULL);
	m_pGroups->ShowWindow(true);	
}


//
// Notify Message Solving..
//

//Group Right Button Down
void CTabADlg::OnGroupRDown(WPARAM wParam, LPARAM lParam)
{
	AfxMessageBox(_T("group right button down"));
}

//Tree node left button double click
void CTabADlg::OnNodeLDBDown(NMHDR* pNMHDR, LRESULT* pResult) 
{	
	HTREEITEM hItem = m_tree1.GetSelectedItem();
	
	if ((hItem != NULL) &&
		!m_tree1.ItemHasChildren(hItem))
	{//pop-up talk-dialog 
		CTalkDlg   talkDlg;
		talkDlg.DoModal();
	}
}

//Tree node left button click
void CTabADlg::OnNodeLDown(WPARAM wParam, LPARAM lParam)
{
	//make sure left button could also expand the node	
	CPoint pt;
	GetCursorPos(&pt);    
	m_tree1.ScreenToClient(&pt);   
    
	HTREEITEM hItem = m_tree1.HitTest(pt);	
	if ((hItem != NULL)&&	m_tree1.ItemHasChildren(hItem))
	{
		m_tree1.Expand(hItem, TVE_TOGGLE);
	}	
}