自画L

 #include <vcl.h>

#pragma hdrstop



#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

HANDLE HeaderWnd;

FARPROC wpOrigEditProc = NULL;

LRESULT APIENTRY NewProc(HWND hwndDlg,

                         UINT uMsg,

                         WPARAM wParam,

                         LPARAM lParam);



//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

//---------------------------------------------------------------------------

bool CALLBACK EnumChildWinProc(HWND hwnd, LPARAM lParam)

{

char* buf;

bool Result = true;



buf = (char*)malloc(255);

//memset(buf, 0x00, 255);

ZeroMemory(buf, 255);

GetClassName(hwnd, buf, 255);

if(AnsiString(buf) == "SysHeader32") {

  HeaderWnd = hwnd;

  Result = false; //如果不返回false,EnumChildWindows将一直枚举下去

}

free(buf);

return Result;

}

//----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)

{

//ListView是2个子控件组成的,通过枚举来取SysHeader32句柄,比单子控件多这个步骤

EnumChildWindows(ListView1->Handle, (WNDENUMPROC)EnumChildWinProc, 0);

wpOrigEditProc = (FARPROC)SetWindowLong(HeaderWnd, GWL_WNDPROC, (long)NewProc);
}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)

{

SetWindowLong(HeaderWnd, GWL_WNDPROC, (LONG)wpOrigEditProc);

}

//---------------------------------------------------------------------------

LRESULT APIENTRY NewProc(HWND hwndDlg,

                         UINT uMsg,

                         WPARAM wParam,

                         LPARAM lParam)

{

//RECT rc;

HDC orihdc, newhdc;

HGDIOBJ oriobj, oriobj1, newobj;

HBRUSH hbrush;

//Graphics::TBitmap *Pic = new Graphics::TBitmap();

//Pic->LoadFromFile("main.bmp");

HBITMAP hbmp;

BITMAP bmp;

PAINTSTRUCT ps;



switch (uMsg) {

  //case WM_ERASEBKGND:

    //return true;

  case WM_PAINT:

    //::SetRect(&rc, 0, 0, Form1->ListView1->Columns->Items[0]->Width, 20);

    orihdc = BeginPaint(hwndDlg, &ps);

    //orihdc = GetDC(hwndDlg);

    newhdc = CreateCompatibleDC(orihdc);  //内存DC,避免闪烁



    hbmp = CreateCompatibleBitmap(orihdc,

                                  Form1->ListView1->Columns->Items[0]->Width,

                                  20);  //彩色模式由orihdc提供

    oriobj1 = SelectObject(newhdc, hbmp);

    hbrush = CreateSolidBrush(RGB(255, 0, 0));

    oriobj = SelectObject(newhdc, hbrush);



    FillRect(newhdc,

             &TRect(0, 0, Form1->ListView1->Columns->Items[0]->Width, 20),

             hbrush);

    SetBkColor(newhdc, RGB(255, 0, 0));

    TextOut(newhdc, 2, 0, "hehe", 4);



    GetObject(hbmp, sizeof(BITMAP), &bmp);

    BitBlt(orihdc,

           0,

           0,

           bmp.bmWidth,

           bmp.bmHeight,

           newhdc,

           0,

           0,

           SRCCOPY);



    SelectObject(newhdc, oriobj1);  //恢复原DC中的object

    SelectObject(newhdc, oriobj);

    DeleteObject(hbmp);             //释放资源

    DeleteObject(hbrush);

    DeleteDC(newhdc);

    //ReleaseDC(hwndDlg, orihdc);   //配合GetDC



    EndPaint(hwndDlg, &ps);         //配合BeginPaint

    return false;

default:

    return ::CallWindowProc(wpOrigEditProc, hwndDlg, uMsg, wParam, lParam);

}

//delete Pic;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值