日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > C > 正文

如何自繪ListView表頭

2023-06-09 12:08:09
字體:
供稿:網(wǎng)友

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

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

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

示例代碼 :
開發(fā)者 : 死牛之祭(A-Few)
2009-08-25
說明 :
該代碼可以zi you引用, 包括商業(yè)應(yīng)用. 希望轉(zhuǎn)載時(shí)尊重作者的署名權(quán)利.
學(xué)習(xí)交流請來信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ā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产一区三区三区| 日韩精品在线第一页| 亚洲国内精品视频| 国产区日韩欧美| 国产欧美日韩精品在线观看| 亚洲综合日韩中文字幕v在线| 丰满少妇一区| 国产欧美亚洲一区| 一区视频在线播放| 日本免费在线视频不卡一不卡二| 91蜜桃在线视频| 欧美婷婷精品激情| 久本草在线中文字幕亚洲欧美| 成年人黄国产| 久久91精品久久久久久秒播| 91精品免费在线观看| 在线视频不卡国产V| 亚洲黄色一区二区| 免费在线观看国产黄| 91亚洲欧美| 精品日韩在线观看| 久久久91精品国产| 亚洲3区在线| 欧美日韩国产高清视频| 顶级网黄在线播放| 亚洲国内精品视频| 亚洲 国产 欧美 日韩| 日本精品在线播放| 国产一区三区三区| 激情婷婷亚洲| 国产在线一区二区视频| 亚洲校园欧美国产另类| 欧美亚洲免费高清在线观看| 久久人人88| 国产欧美日韩不卡免费| 在线中文免费视频| 视频一区三区| 一级片在线播放| 欧美日韩国产区| 九九九精品视频| 高清中文字幕在线| 国产福利不卡| 亚洲免费在线视频一区 二区| 国产啊啊啊视频在线观看| 久久久99免费| 日韩欧美在线综合网| 天堂在线中文资源| 婷婷综合福利| 亚洲日产av中文字幕| 国产永久免费高清在线观看| 美日韩精品免费视频| 国产丝袜一区二区| 日韩三级视频中文字幕| 快she精品国产999| 国产永久在线观看| 欧美日韩高清| 麻豆一区二区99久久久久| 97最新国自产拍视频在线完整在线看| 国产高清在线一区| 二区视频在线观看| 在线视频日韩欧美| 亚洲高清在线免费| av免费网站在线观看| 国产在线观看黄色| 欧美日韩中文字幕视频| 日韩.com| 亚洲高清免费一级二级三级| 国产福利精品导航| 一区二区日韩av| 日韩亚洲不卡在线| 91精品国产综合久久精品app| 中文字幕亚洲视频| 99精品在线播放| 日韩不卡在线播放| 成人无遮挡免费网站视频在线观看| wwww亚洲| 日韩欧美中文字幕公布| 欧美三级视频在线| 91麻豆免费视频网站| 顶级网黄在线播放| 国产高清在线视频| 亚洲欧美中文字幕| 欧美高清视频一区二区三区| 中文官网资源新版中文第二页在线观看| 91吃瓜在线观看| 欧美日韩激情一区二区三区| av中文在线播放| 久久久久久99精品| 久久精品一级爱片| 天堂在线视频中文网| 美日韩精品免费视频| 精品亚洲国内自在自线福利| 一级片免费在线播放| 日韩视频 中文字幕| 日韩久久久精品| 91久久久精品| 国产在线不卡av| 日韩欧美99| 日韩中文字幕视频在线观看| 国产成人精品三级| 国产成人精品综合久久久| 中文字幕在线观看欧美| 国产在线观看黄色| 九七久久人人| 日本精品在线播放| 日韩中文字幕在线播放| 美女尤物久久精品| 国产偷久久久精品专区| 中文字幕在线视频日韩| 日韩在线三区| 日韩视频一区| 在线观看一区日韩| 欧美国产一级片| 亚洲 欧美 中文字幕| av一区在线| 欧美日韩国产专区| 日韩久久精品视频| 精品一二三四| 精品在线网站观看| а√天堂8资源中文在线| 在线日韩中文| 久久精品女人| 日韩在线 中文字幕| 亚洲国产午夜精品| 在线看av的网址| 久久久久蜜桃| 国产欧美日韩精品在线| 日韩久久久精品| 1区不卡电影| 成人福利一区| 中文字幕欧美亚洲| 在线国产99| 国产福利免费在线观看| 亚洲欧美日本国产专区一区| 国产黄色在线看| 激情婷婷亚洲| 91精品国产综合久久久久| 二区视频在线观看| 日韩视频精品| 欧美日韩精品免费在线观看视频| 国产对白在线| 久久 天天综合| 国产日韩成人精品| 国产在线一区二区视频| 九七久久人人| 中文字幕在线看视频国产欧美| 粉嫩喷白浆久久| 天堂在线一区二区三区| 中文字幕第一页在线| 日韩久久不卡| 免费中文字幕日韩欧美| 成人久久久久| 午夜国产视频 | 亚洲综合在线小说| 久久久精品免费免费| 91精品视频免费在线观看| 中文字幕 欧美日韩| 中文字幕在线视频久| 日韩精品丝袜在线| 精品中文字幕在线| 亚洲第一福利视频在线| 日韩高清不卡一区| 国产一卡2卡3卡四卡网站| 欧美亚洲视频在线看网址| 成人福利一区| 日韩三级精品| 国产小视频在线| 中文字幕欧美在线| 日韩视频一区在线观看| 在线国产1区| 亚洲最大黄色| 国产欧美自拍一区| 国产一区在线精品| 国产欧美日韩综合| 91久久精品午夜一区二区| 欧美另类专区| 日韩三级一区| 中文字幕一区不卡| 欧美日韩国产片| 国产三级在线播放| 日韩欧美在线精品| av免费网站在线观看| 日韩一二三四区| 日韩在线中文字幕| av一级在线| 在线精品观看| 欧美日韩色综合| 中文字幕国产亚洲| 欧美日韩国产一级片| 亚洲高清免费一级二级三级| 色偷偷一区二区三区| 欧美 日韩 国产 高清| 国产色在线视频| 1区不卡电影| 一区二区三区高清在线| 欧美 日韩 国产在线| 中文字幕在线中文字幕二区| 亚洲一区在线观看免费| www.精品视频| 你懂的亚洲视频| av免费观看国产| 在线视频三区| 在线视频不卡国产V| 国产绿帽一区二区三区| 欧美日韩在线不卡| 欧美中文字幕在线视频| 中文在线а√在线8| 亚洲欧美韩国综合色| 国产在线拍揄自揄拍| 亚洲福利在线视频| 免费网站看黄yyy222| 日韩不卡在线观看| 日韩视频一区| 免费视频二区| 久久精品国产2020观看福利| 亚洲小说春色综合另类电影| 91精品国产全国免费观看| 美日韩精品免费视频| 国产一区在线精品| 久久中文精品| 国产黄色精品| 日韩免费视频一区二区| 日韩在线精品| 亚洲一级特黄| 在线观看av的网站| 国产最顶级的黄色片在线免费观看| 国产欧美日韩在线观看| 日韩欧美字幕| 国产黄在线观看免费观看不卡| 国产成人精品综合久久久| 中文字幕日韩欧美| 中文字幕在线精品| 中文字幕精品视频| 欧美日韩一级视频| 日韩视频国产视频| 日韩欧美国产午夜精品| 日韩欧美中文字幕在线观看| 欧美日韩午夜在线视频| 中文字幕在线看视频国产欧美| 亚洲区中文字幕| 国产亚洲欧美中文| 欧美国产综合在线V| 亚洲一区中文字幕在线| 国产欧美日韩最新| 国产天堂素人系列在线视频| 欧美日韩综合在线| 亚洲综合视频一区| 亚洲天堂国产视频| 中文在线一区| 欧美色欧美亚洲高清在线视频| 欧美日韩中文在线| 欧美 日韩 国产在线观看| 欧美久久在线观看| 亚洲伊人婷婷| 亚洲va韩国va欧美va精品| 欧美午夜精品在线| www日韩在线观看| 精品一二三四| 蜜桃久久av一区| 91精品国产自产| 日韩欧美久久| 国产欧美中文字幕| 99pao成人国产永久免费视频| 日韩精品在线免费播放| 日韩在线视频免费观看高清中文 | 一本大道一区二区三区| 日本免费在线视频不卡一不卡二| 精品国产91乱高清在线观看| 亚洲视频 中文字幕| 欧美日韩国产在线| 日韩在线一区二区| 日韩在线观看视频一区二区| 久久精品不卡| 国产在线导航| 欧美日韩精品在线视频| 久久精品卡一| 婷婷中文字幕在线观看| 久久久精品国产99久久精品芒果| 蜜臀国产一区| 中文字幕精品一区二| 一区二区不卡视频| 中文字幕日韩精品在线| 91精品日本| 精品久久人人做人人爽 | 亚洲欧美视频一区二区三区| 欧美日韩免费高清| 欧美日韩精品久久久| 精品视频www| 日韩精品视频在线观看网址 | 91精品国产经典在线观看| 精品乱子伦一区二区| 日韩av综合在线观看| 欧美日韩在线看| 欧美日韩精品高清| 精品三区视频| 亚洲三级国产| 国产高清一区| 日韩高清不卡在线| 欧美激情一区二区在线| 精品国产1区二区| 中文字幕日韩欧美在线| 亚洲大片精品永久免费| 国产伦精品免费视频| 国产欧美日韩91| 中文字幕在线看精品乱码| 亚洲羞羞网站| 欧美日韩中文在线| 久久婷婷综合国产| 一级网站免费观看| 日韩欧美在线视频| 亚洲a一级视频| wwwav91com| 国产欧美日韩亚州综合| 国产在线一在线二| 国产成免费视频| 亚洲黄色www| 国产在线精品国自产拍免费| 欧美日韩一级视频| 欧美国产综合在线V| 亚洲视频日韩| 亚洲一区在线观看网站| 中文字幕亚洲乱码| 日韩欧美在线视频| 中文字幕在线视频第一页| 精品国产1区2区3区| 99久久精品国产成人一区二区| 1区2区3区在线视频| 国产999在线观看| 中文亚洲欧美| 日韩欧美三级视频| 日韩欧美一级精品久久| 中文字幕 亚洲视频| 精品三级在线| 国产字幕在线看| 欧美一级免费观看| 91精品观看| 国产中文在线视频| 91精品久久久久久蜜臀| 婷婷精品进入| 91国内精品在线视频| 婷婷久久综合网| 亚洲精品中文字幕乱码三区不卡| 色综合天天综合网天天狠天天| 欧美国产日韩综合| 欧美日韩第一区日日骚| 精品区一区二区| 91精品国产自产观看在线| av一级在线| 久草亚洲一区| 亚洲免费看av| 国产激情在线| 在线中文字幕网站| 中文字幕第一页在线播放| 日韩欧美一级视频| 国产免费不卡av| 99久久婷婷| 国产无遮挡在线视频免费观看| 国产婷婷在线观看| 一级日韩一级欧美| 亚洲一区在线观看视频| 亚洲高清免费一级二级三级| 一区二区三区在线不卡| 亚洲一区在线观看网站| 日韩欧美国产黄色| 精品欧美日韩在线| 亚洲免费看av| 国产黄色在线网站| 中文字幕在线视频久| 亚洲欧美日本国产专区一区| 精品国产乱码久久久久久蜜臀 | 精品一二三区| 国产成人精品三级| 亚洲a中文字幕| 粉嫩喷白浆久久| 日韩欧美在线影院| 免费国产成人看片在线| 在线中文字幕网站| 日韩欧美一级精品久久| 日韩精品久久久| 92久久精品| 欧美三级在线看| 一级片在线播放| 久久精品在线免费观看| 国产 欧美 在线| 亚州福利视频| 欧美日韩国产成人| 国产xxx在线| 欧美三级视频在线| 蜜臀国产一区| 91精品视频国产| 欧美日韩午夜精品| av一级在线| 91精品国产免费| 亚洲福利精品| 精品999在线| 欧美日韩高清一区二区| 欧美中文字幕| 先锋男人资源站| 国产第一页在线播放| 久久中文精品|