1. 程式人生 > >實現QQ主介面效果[圖]

實現QQ主介面效果[圖]

1. GC實現QQ的主介面截圖

2.實現方法
最主要的計算各個組和頭像的位置資訊,有了位置資訊,畫圖就很方便了.(畫圖請參考本專欄其他文章)
2.1 一些概念:
項 : 組和頭像,如果組合並,那麼這個組只有組1項,如果展開那麼 組+ 組成員的個數
m_scrollIndex : 滾動了幾個項(滾動時計算)
m_scrollY : 實際滾動的像數(通過m_scrollIndex計算得到,滾動時計算)
(obj,group,index): 通過OnMouseMove得到的位置資訊
                   obj表示在組或者頭像,group表示哪個組,index表示group中的哪個頭像
                   當obj表示組時,index就不起作用

2.2 滑鼠位置資訊的表達
//32位int  表示OnMouseMove位置資訊
//2006-09-21
// |--------|--------|----------------|
//  8位型別   8位組號   16位頭像索引
typedef   int     TREEHIT;
#define   MAKETREEHIT(obj,group,index)  ((obj << 24)+(group << 16)+index)
#define   TREEHITOBJ(hit)               (hit >> 24)
#define   TREEHITGROUP(hit)             ((hit & 0x00ff0000)>>16)
#define   TREEHITINDEX(hit)             (hit & 0x0000ffff)

2.3 組和頭像位置資訊的計算
    由於圖象有大小的區分,並且組的高度和大小頭像又不一樣,所以滾動的時候要計算滾動
了幾個項.這樣可以保證,每次滾動多是按項來滾動的,而不是固定的像數.
    計算第n個組的第m個頭像的RECT,首先從第一組開始算起(高度從0開始),算到第n個組第m頭像時,然後減去滾動的實際像數m_scrollY ,就是實際的RECT,如果不和可見區域相交,那麼就不畫圖.