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); } }