|
허접한 실력이지만 변환을 한번 해보았습니다.
프로젝트 파일을 같이 첨부합니다.
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
TWndMethod MemoOrgWndProc;
Graphics::TBitmap *FBitmap;
TCanvas *Canvas1;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall MemoNewWndProc(TMessage &msg);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Canvas1 = new Graphics::TCanvas;
FBitmap = new Graphics::TBitmap;
FBitmap->LoadFromFile("a.bmp");
FBitmap->Dormant();
MemoOrgWndProc = Memo1->WindowProc;
Memo1->WindowProc = &MemoNewWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete Canvas1;
if ( FBitmap != NULL )
{
delete FBitmap;
FBitmap = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MemoNewWndProc(TMessage &msg)
{
//TODO: Add your source code here
bool PalFlag;
HPALETTE OldPal;
int Col, Row, X, Y;
msg.Result = 0;
switch(msg.Msg)
{
case WM_ERASEBKGND:
if ( FBitmap != NULL )
{
PalFlag = (GetDeviceCaps((void *)msg.WParam, BITSPIXEL) <= 8) && (FBitmap->Palette != 0);
Canvas1->Lock();
Canvas1->Handle = (void *)msg.WParam;
OldPal = 0;
if ( PalFlag )
{
OldPal = SelectPalette( Canvas1->Handle, FBitmap->Palette, false );
RealizePalette( Canvas1->Handle );
}
Col = Memo1->ClientWidth / FBitmap->Width;
Row = Memo1->ClientHeight / FBitmap->Height;
for ( Y=0; Y<Row; Y++ )
{
for ( X=0; X<Col; X++ )
{
Canvas1->Draw( X * FBitmap->Width, Y * FBitmap->Height, FBitmap );
if ( PalFlag ) SelectPalette( Canvas1->Handle, OldPal, false );
}
}
Canvas1->Handle = 0;
Canvas1->Unlock();
}
break;
case CN_CTLCOLOREDIT:
MemoOrgWndProc( msg );
SetBkMode( (void *)msg.WParam, TRANSPARENT );
break;
default:
MemoOrgWndProc( msg );
break;
}
}
//---------------------------------------------------------------------------
|