亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C > 正文

如何自繪ListView表頭

2023-06-09 12:08:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

       TlistView 控件是vcl 對(duì)windows公用控件庫(kù)的一個(gè)封裝.用戶(hù)TlistView控件并未提供自繪表頭的事件, 一般情況下, 要想自繪表頭比較困難. 但是windows 所有控件的繪制都是由于消息WM_PAINT的產(chǎn)生,而由窗口過(guò)程來(lái)繪制的, 這樣我們似乎就有可能通過(guò)WM_PAINT消息能夠繪制TlistView表頭. 經(jīng)過(guò)分析發(fā)現(xiàn)TlistView 的組成實(shí)際上包括了兩部分, 一部分是TlistView本省, 另外一部分就是TlistView的表頭, 該表頭實(shí)際上是一個(gè)嵌入TlistView里面的獨(dú)立的窗口, 該窗口的類(lèi)名為”SysHeader32”.(可以使用ccrun寫(xiě)的窗口探測(cè)工具spy4win觀(guān)察的到). 綜合上述依據(jù), 實(shí)現(xiàn)TlistView表頭的自繪可以分為一下幾個(gè)步驟:

1. 查找TlistView的表頭窗口句柄.
2. 替換表頭窗口的窗口過(guò)程
3. 表頭的WM_PAINT消息
4. 在窗口過(guò)程中編寫(xiě)繪制代碼

這樣就能繪制TlistView 的表頭了.具體實(shí)現(xiàn)方式如下 :
1. 查找表頭有三種方式
一. 使用FindWindowEx :
以類(lèi)名”SysHeader32”來(lái)查找TlistView的子窗口, 由于TlistView只有一個(gè)名為”SysHeader32”的子窗口(就是表頭), 所以一定能夠獲取到表頭窗口的句柄
二. 使用windows提供的幫助宏ListView_GetHeader
這種方式實(shí)際上是通過(guò)發(fā)送消息來(lái)獲取表頭句柄, 返回值即表頭句柄
2. 替換表頭的窗口過(guò)程
使用SetWindowLong這個(gè)API 就可以替換掉一個(gè)窗口的窗口過(guò)程.(詳細(xì)步驟請(qǐng)參看MSDN)
3. 請(qǐng)參看示例代碼
4. 請(qǐng)參看示例代碼
 

示例代碼 :
開(kāi)發(fā)者 : 死牛之祭(A-Few)
2009-08-25
說(shuō)明 :
該代碼可以zi you引用, 包括商業(yè)應(yīng)用. 希望轉(zhuǎn)載時(shí)尊重作者的署名權(quán)利.
學(xué)習(xí)交流請(qǐng)來(lái)信a-few@netease.com.

.h文件
// ---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
// ---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>

// ---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published// IDE-managed Components
    TListView *ListView1;

private// User declarations
public// User declarations
    __fastcall TForm1(TComponent* Owner);
    __fastcall~TForm1();
};

// ---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
// ---------------------------------------------------------------------------
#endif
 

.cpp文件
// ---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef LRESULT(CALLBACK * TCallBack)(HWND, UINT, WPARAM, LPARAM);

TCallBack g_oldListViewWndProc;
HWND g_hListViewHeader;

LRESULT CALLBACK ListViewWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
    LPARAM lParam)
{
    PAINTSTRUCT ps ={ 0 };
    RECT rect = { 0 };
    HDC hPen = NULL;
    HDC hBrush = NULL;
    int iCount = 0;
    int i1 = 0;
    BYTE red0 = 115, green0 = 154, blue0 = 206;
    BYTE red1 = 255, green1 = 255, blue1 = 255;
    BYTE red, green, blue;
    int j, m, n;

    switch(uMsg)
    {
    case WM_PAINT:
        BeginPaint(g_hListViewHeader, &ps);
        hPen = SelectObject(ps.hdc, GetStockObject(DC_PEN));
        iCount = Header_GetItemCount(g_hListViewHeader); // 獲取表頭數(shù)目
// 本文轉(zhuǎn)自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1069&d=uq3568
        SetDCPenColor(ps.hdc, ColorToRGB((TColor)(0x00EFDBCE)));
        red = GetRValue((TColor)(0x00EFDBCE));
        green = GetGValue((TColor)(0x00EFDBCE));
        blue = GetBValue((TColor)(0x00EFDBCE));
        for (int i = 0; i < iCount; i++)
        {
            Header_GetItemRect(g_hListViewHeader, i, &rect); // 獲取Item的高度

            m = rect.bottom - rect.top;
            n = m / 2 + 1;
            for (j = 0; j < n; j++)
            {
                red = red0 * (j + 1) / n + red1 * (n - j - 1) / n;
                green = green0 * (j + 1) / n + green1 * (n - j - 1) / n;
                blue = blue0 * (j + 1) / n + blue1 * (n - j - 1) / n;

                SetDCPenColor(ps.hdc, RGB(red, green, blue));
                MoveToEx(ps.hdc, rect.left + 1, rect.top + j, NULL);
                LineTo(ps.hdc, rect.right, rect.top + j);
                MoveToEx(ps.hdc, rect.left + 1, rect.bottom - j - 1, NULL);
                LineTo(ps.hdc, rect.right, rect.bottom - j - 1);
            }
            SetDCPenColor(ps.hdc, ColorToRGB(clBtnFace));
            MoveToEx(ps.hdc, rect.right, rect.top + 1, NULL);
            LineTo(ps.hdc, rect.right, rect.bottom - 1);
            SelectObject(ps.hdc, Form1->Font->Handle);
            i1 = ((rect.bottom - rect.top) - abs(Form1->Font->Height)) / 2;
            hBrush = SelectObject(ps.hdc, GetStockObject(NULL_BRUSH));
            SetBkMode(ps.hdc, TRANSPARENT); // 這是設(shè)置背景為透明的
            TextOut(ps.hdc, rect.left + 10, rect.top + i1,
                Form1->ListView1->Columns->Items[i]->Caption.c_str(),
                Form1->ListView1->Columns->Items[i]->Caption.Length());
            SelectObject(ps.hdc, hBrush);
        }
        hPen = SelectObject(ps.hdc, hPen);
        EndPaint(g_hListViewHeader, &ps);
        break;
    default:
        return CallWindowProc((FARPROC)g_oldListViewWndProc, g_hListViewHeader,
            uMsg, wParam, lParam);
    }

    return 0;
}

// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    g_hListViewHeader = FindWindowEx(ListView1->Handle, NULL, "SysHeader32",
        NULL);
    g_oldListViewWndProc = (TCallBack)GetWindowLong
        (g_hListViewHeader, GWL_WNDPROC);
    SetWindowLong(g_hListViewHeader, GWL_WNDPROC, long(ListViewWindowProc));
}

// ---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
    SetWindowLong(g_hListViewHeader, GWL_WNDPROC, (long)g_oldListViewWndProc);
}

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产亚av手机在线观看| 日韩av在线高清| 亚洲一区二区三区sesese| 岳乳丰满一区二区三区| avhd101老司机| 国产一区二区网站| 日韩国产一区三区| 中文字幕亚洲欧美在线不卡| 国产乱国产乱老熟300| 精品产品国产在线不卡| 日韩成人伦理电影在线观看| 9i精品福利一区二区三区| 先锋av资源站| 激情成人四房播| 蜜臀av无码一区二区三区| 无码精品视频一区二区三区| 一级毛片aaaaaa免费看| 欧美在线观看在线观看| 亚洲一区尤物| 中文字幕色婷婷在线视频| 伊人久久精品视频| 在线观看中文字幕视频| 二区三区在线观看| 日韩电影第一页| 色婷婷久久综合| 国产精品四虎| 香蕉久久一区| 国产精品一区三区在线观看| 成人性视频免费看| 超碰在线公开免费| 成人av资源在线| 久久精品国产精品国产精品污| 男女视频免费看| 国产一区av在线| 国产 日韩 欧美 精品| 天天综合网在线| 亚洲熟女少妇一区二区| 精品人妻aV中文字幕乱码色欲| 91精品天堂福利在线观看| 久久综合伊人| 一级特级黄色片| 涩涩涩视频在线观看| 欧美wwwwwww| 日产乱码一卡二卡三免费| 肉丝美足丝袜一区二区三区四| av一区二区三区在线观看| 欧美黑人性生活视频| 欧美第一黄色网| 成人免费不卡视频| 日韩亚洲欧美一区| 不卡视频一区二区| 在线看免费毛片| 欧美激情五月| 欧美第十八页| 欧美日韩天天操| 久久精品国产亚洲AV成人婷婷| 国内激情久久| 美女的诞生在线观看高清免费完整版中文| 嫩草www视频在线观看高清| 蜜桃精品视频| 高清孕妇孕交╳╳交| 欧美一级国产精品| 一本一本a久久| 2020国产精品久久精品美国| 午夜亚洲影视| 欧美三级电影网| 日韩免费小视频| 久久国产在线视频| 最新av在线免费观看| 亚洲一区在线| 羞羞的视频网站| 国产精品专区在线| 在线观看免费国产成人软件| 欧美男女交配| 三级av网站| 免费国产a级片| 麻豆国产入口在线观看免费| 激情视频免费| 久久久久久久久久一区| 人妻一区二区三区免费| 91片在线免费观看| 国产特黄级aaaaa片免| 久久久精品人妻无码专区| 国产系列精品av| 日韩欧美久久久| 国产视频手机在线播放| 少妇激情av一区二区| 91探花福利精品国产自产在线| 久久电影网站中文字幕| 国产资源在线视频| 国产精品无码一区二区桃花视频| 日本韩国欧美超级黄在线观看| 一本到不卡免费一区二区| 免费在线观看av网址| 丁香婷婷综合激情五月色| 欧美搞黄网站| 亚洲男人都懂第一日本| 欧美成人精品一区二区三区在线看| 国产精品99免视看9| 国产精品乡下勾搭老头1| 国产精品久久久久久av| 成人免费观看在线| 亚洲欧美大片| 在线亚洲伦理| 亚洲人成电影网站色| 黄色a一级视频| 亚洲一区二区三区无码久久| 国产亚洲精久久久久久无码77777| 国产成人女人毛片视频在线| 久久亚洲影视婷婷| 亚洲色图欧美色| 91综合精品国产丝袜长腿久久| 国产精品欧美激情| 亚洲高清乱码| 欧美激情在线一区二区| 久久久久久亚洲中文字幕无码| 天堂中文在线观看视频| 可以看av的网址| 欧美日韩精品一区二区三区视频播放| 91国内精品野花午夜精品| 国产98在线|日韩| 亚洲第一天堂av| 人人狠狠综合久久亚洲婷婷| 欧美大片拔萝卜| 欧美一级艳片视频免费观看| 中文字幕一区二区三区四区五区六区| 中文在线观看免费高清| 欧美视频不卡| 午夜精品亚洲一区二区三区嫩草| 麻豆成人av在线| 亚洲毛片欧洲毛片国产一品色| 精品一区久久久久久| 日本高清好狼色视频| 亚洲电影影音先锋| 亚洲精品一区二区三区在线| 精品一区二区三区自拍图片区| 亚洲综合免费观看高清完整版在线| 一级黄色片视频| 国产社区精品视频| 国产三级电影在线观看| 日韩性感在线| 老司机色在线视频| 一区二区三区成人| 91在线免费看网站| 欧美日韩精品一区二区在线播放| 外卖gayxxxxgay1| 欧美大片高清| 国产免费色视频| 国产一区二区三区四区二区| 日韩a在线看| 午夜国产精品影院在线观看| av一区二区久久| 日本aa大片在线播放免费看| 久久精品国产99精品国产亚洲性色| 激情五月播播久久久精品| 国产一区二区三区四区hd| 欧美中文在线观看| caoporn97在线视频| 日韩av综合| 三级毛片网站| http;//www.99re视频| 精品亚洲成人| 亚洲精品天堂| 欧美视频在线观看 亚洲欧| 久久精品色妇熟妇丰满人妻| 国产婷婷97碰碰久久人人蜜臀| 久久精品视频日本| 一区二区成人| 91精品国产高清91久久久久久| 久久精品国产一区二区三| 久久69精品久久久久久久电影好| 中文在线а天堂av| 91大神在线网站| 亚洲成年人电影在线观看| 99亚洲男女激情在线观看| 色综合久久88色综合天天看泰| 成人蜜臀av电影| 九九99九九精彩| 亚洲三级在线播放| 91最新在线视频| 国产真人做爰毛片视频直播| 午夜一区二区三区视频| 91精品在线一区| 黄色大片在线免费看| 久久欧美肥婆一二区| 亚洲一区中文| 久久国产精品-国产精品| 性欧美视频videos6一9| 久久久久久午夜| 好吊视频一二三区| 成人av在线资源网站| 久久久久久久高潮| 午夜影院在线播放| 嫩草影院网站在线| 日本a视频在线观看| 国产精品亚洲一区二区无码| 久久9精品区-无套内射无码| 国产精品视频yy9099| 色综合久久精品| 日本美女一区二区三区| 99re6这里有精品热视频| 欧美一区二区三区的| 亚洲一二三在线观看| 亚洲热线99精品视频| 色综合av综合无码综合网站| 秘密基地免费观看完整版中文| 国产乱妇无码大片在线观看| 精品亚洲免a| 四虎精品在永久在线观看| 国产极品美女到高潮| 亚洲人成在线免费观看| 久久久久久国产精品视频| 国产午夜精品全部视频在线播放| 日产国产精品精品a∨| 日韩中文字幕观看| 国产在线观看网站| 亚洲高清在线视频| 成人国产网站| 欧美大片第1页| 国产在线精品一区二区| 国产亚洲成av人片在线观黄桃| 一本大道香蕉久久| 日本韩国一区二区三区视频| 日韩激情视频在线观看| 葵司免费一区二区三区四区五区| 国产麻豆成人精品| 亚洲国产精品一区二区第四页av| 国产精品www在线观看| 久久久久亚洲av成人无码电影| 欧美性猛交xxxx乱大交| 亚洲色图图片| 精品人伦一区二区| 黄网站色视频免费观看| 精品一区久久久久久| 国产精品五区| 精品黑人一区二区三区观看时间| 先锋资源男人站| 国内偷拍精品视频| 日韩一区二区三区精品| 一菊综合网成人综合网| 99热国产精品| 一出一进一爽一粗一大视频| 国内精品久久久久久久影视简单| 蜜臀av国产精品久久久久| 中文字幕日本三级| 日本中文在线观看| 成人国产亚洲精品a区天堂华泰| www黄色av| 红桃视频亚洲| 成人三级毛片| 岛国精品一区| 午夜精品久久久久久久99樱桃| 日本精品一区二区三区在线观看视频| 国产 日韩 欧美 在线| 国产精品视频精品视频| 精品国产乱码| 特黄特色大片免费视频大全| 久久久www成人免费毛片麻豆| 国模视频一区二区三区| 制服丝袜在线一区| 欧美一级大片在线免费观看| 超碰在线12| 日韩一区二区精品视频| 91精品久久久久久久久99蜜臂| 国产一级免费黄色片| 九色精品91| 一本一道久久a久久精品综合| 国产精品乱码久久久久久| 狠狠操图片视频| 国内不卡的一区二区三区中文字幕| 成人av电影在线| 一本一本久久a久久| 在线观看免费av网址| 老司机色在线视频| 黑丝美女久久久| 久久精品中文| 国产真实乱人偷精品视频| 永久免费不卡在线观看黄网站| 成人精品电影在线| 国内揄拍国内精品| 欧美一级淫片免费视频魅影视频| 欧美丝袜丝交足nylons| 自拍av在线| 午夜男人的天堂| 黄色片免费网址| 精品国产成人亚洲午夜福利| 欧美zozo| 538精品视频| 久久国产一区二区三区| 成人xxx免费视频播放| 豆国产97在线 | 亚洲| 97成人超碰视| 欧美xxx.com| 在线观看免费国产小视频| 日韩欧美国产精品一区二区三区| 少妇又色又爽又黄的视频| 亚洲欧美小说国产图片| 亚洲乱码av中文一区二区| 久久久视频6r| 久久午夜免费视频| 亚洲欧洲国产视频| 在线观看亚洲一区二区| 丁香花高清在线观看完整版| chinesespank调教| 亚洲免费观看高清在线观看| 亚洲精品乱码久久久久久蜜桃动漫| 99免费在线观看| www色aa色aawww| 亚洲欧洲一区二区在线观看| 每日在线更新av| 久久国产欧美日韩精品| 成人国产精品入口免费视频| 美女久久精品| 国产黄色高清在线| 在线免费观看h| 老头吃奶性行交视频| 麻豆精品99| 精品制服美女久久| 成人国产一区| 久久精品视频观看| h视频在线观看免费网站| 日韩电影在线观看一区| 久久综合九色综合久| 久久蜜桃香蕉精品一区二区三区| 蜜臀av免费在线观看| 四虎成人精品在永久免费| 日韩久久精品电影| 在线观看免费中文字幕|