實現QQ主介面效果[圖]
阿新 • • 發佈:2019-01-24
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,如果不和可見區域相交,那麼就不畫圖.
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,如果不和可見區域相交,那麼就不畫圖.