a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 75|回复: 0

[C++] 如何自绘ListView表头(2)

[复制链接]
发表于 2012-7-31 21:56:58 | 显示全部楼层 |阅读模式
  LRESULT CALLBACK ListViewWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam)! ]) e4 E9 O3 D/ Y! f
  {
* E0 W. k* _& {  PAINTSTRUCT ps ={ 0 };9 v4 r$ O6 o6 S7 P& k* s0 q
  RECT rect = { 0 };
6 ^! T. b5 e' Z+ u( Z  HDC hPen = NULL;1 c8 u% U4 n' q9 A) R
  HDC hBrush = NULL;
4 `# e; \- b3 K/ c  int iCount = 0;! a# I; t4 \/ p  h$ k! z
  int i1 = 0;( Y# P2 i+ w: k$ X. r( Y
  BYTE red0 = 115, green0 = 154, blue0 = 206;+ e: E2 `% l. |0 J
  BYTE red1 = 255, green1 = 255, blue1 = 255;1 ^& O1 m- U. p& n4 N
  BYTE red, green, blue;
' o6 {8 A7 o# x% q& C  int j, m, n;
/ J0 L# b. P- V1 w% v8 g  switch(uMsg)3 n" z1 c4 K$ I, f" A/ I0 G1 H" U
  {2 K0 E  N/ u- @, |! P
  case WM_PAINT:
4 S5 v) a. _) I  BeginPaint(g_hListViewHeader,
9 v; W7 ]7 o. W7 W, `) @- A  hPen = SelectObject(ps.hdc, GetStockObject(DC_PEN));/ S# S6 ?; a$ {( K1 d- G7 i( i
  iCount = Header_GetItemCount(g_hListViewHeader); // 获取表头数目
( w. k: t: j0 e5 D. C  SetDCPenColor(ps.hdc, ColorToRGB((TColor)(0x00EFDBCE)));+ v5 E& J" v* b" I. l
  red = GetRValue((TColor)(0x00EFDBCE));
3 k! c0 o7 ]2 k. s  green = GetGValue((TColor)(0x00EFDBCE));- _  R, o4 |: ]3 T! a
  blue = GetBValue((TColor)(0x00EFDBCE));# b: Q9 _$ O3 P
  for (int i = 0; i Font->Handle);5 Y# G" x) X+ d7 o
  i1 = ((rect.bottom - rect.top) - abs(Form1->Font->Height)) / 2;3 k7 I; M. v% y- v
  hBrush = SelectObject(ps.hdc, GetStockObject(NULL_BRUSH));
5 I% |- l# Q' U/ A  SetBkMode(ps.hdc, TRANSPARENT); // 这是设置背景为透明的- }# ?9 v9 |: D) P
  TextOut(ps.hdc, rect.left + 10, rect.top + i1,
: k  S- ^8 |% ^' ~  W2 {4 b# H  Form1->ListView1->Columns->Items->Caption.c_str(),& S2 q3 j8 @: T, w0 V4 U
  Form1->ListView1->Columns->Items->Caption.Length());
( Z" A5 M" N7 Q( w  w8 c% |  SelectObject(ps.hdc, hBrush);5 z& c9 r% v  y1 U  ^  R  `+ K
  }5 P* N+ _& }' c: I2 y8 k5 o
  hPen = SelectObject(ps.hdc, hPen);
8 Q% i% Y, f" F% v8 q6 l! y6 p  EndPaint(g_hListViewHeader,# z% u7 Y1 i# `1 p' ]! B9 l
  break;
" u4 v3 a  w7 _* M6 U" ~  default:
$ c6 ]; C2 o: f- g  U7 r2 }9 _  return CallWindowProc((FARPROC)g_oldListViewWndProc, g_hListViewHeader,
7 n( V" @/ Q" M% D/ ]4 k4 }  uMsg, wParam, lParam);
. K) w  T* ^+ k5 p' L: I. y  }
9 E& U2 ?% p- J& `6 m: z  return 0;
; H" P8 s6 }# u  }/ v% |# p( p* f! V) E2 j
  // ---------------------------------------------------------------------------4 R1 D3 R' R& x9 m4 h" C5 v( ~0 W! {
  __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)& g$ R0 D! @, m# S; Z0 d8 y
  {5 ^1 C; Q/ v4 N8 }5 q: t
  g_hListViewHeader = FindWindowEx(ListView1->Handle, NULL, "SysHeader32",5 u! c5 E5 i  f/ b& ~& @& ]3 F
  NULL);
% i# S# V4 T3 S  g_oldListViewWndProc = (TCallBack)GetWindowLong- ?! @* B2 L. `: j& F8 d* R
  (g_hListViewHeader, GWL_WNDPROC);
/ m4 f. c7 M) j7 v& b  SetWindowLong(g_hListViewHeader, GWL_WNDPROC, long(ListViewWindowProc));
* K! y* P& G5 u4 s# }, o0 g  }
  y# ]9 i- G' x6 N7 P1 T  // ---------------------------------------------------------------------------1 T2 R0 q- p/ Z1 i4 d) z
  __fastcall TForm1::~TForm1()
* M0 D# ^- F+ Q  Q6 w% B$ ]  {
$ i, o5 d1 t% x; @/ X6 c  SetWindowLong(g_hListViewHeader, GWL_WNDPROC, (long)g_oldListViewWndProc);
! p3 I; [- O/ D! A3 c3 l  }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 20:09 , Processed in 0.197065 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表