태그:         

원문 링크 : [펌] C++ Builder에서 MDI 메인화면에 배경 그리기


MDI폼에 Bitmap 이미지 넣기.

작성자 : 민병권  (minbk)  읽음 : 1204    2002-08-14 오후 5:37:22

MDI폼 배경에 bmp 이미지 화일을 표시하는 방법입니다.

cpp-faq자료를 뒤지다보니 방법이 있네요.

Modal폼, MdiChild폼 등을 더 뛰워도 전혀 이상 없습니다.
아주 간단합니다.

먼저, MDI폼 위에 TImage를 하나 올려놓고, 여기에 Picture 속성에 표시 하고자하는 그림을 하나 선택합니다(확장자가 bmp인 것만 되네요. 다른것도 될려나?……).

그런다음 소스를 아래와 같이 하세요.

1. MDI폼의 헤더화일에 다음을 추가하세요.

TFarProc MdiInstance;
TFarProc OldMdiWindowProc;
void __fastcall MdiWndProc(TMessage &Message);

2. MDI폼 소스 부분에 다음을 추가하세요.

//—————————————————————————
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)        // <– 폼 생성시 자동으로 만들어지죠..
//—————————————————————————
{
    // 아래의 3줄 추가.
    MdiInstance = MakeObjectInstance(MdiWndProc);
    OldMdiWindowProc = (void *)(GetWindowLong(ClientHandle, GWL_WNDPROC));
    SetWindowLong(ClientHandle, GWL_WNDPROC, (LONG)(MdiInstance));
}

//—————————————————————————
// 임의로 새로 만든 함수입니다.
void __fastcall TForm1::MdiWndProc(TMessage &Message)
//—————————————————————————
{
    if (Message.Msg == WM_ERASEBKGND){
        Message.Result = 0;
        HDC DC = (HDC)Message.WParam;
        StretchBlt(DC, 0, 0, Width, Height,
        Image1->Canvas->Handle, 0, 0,
        Image1->Picture->Bitmap->Width,
        Image1->Picture->Bitmap->Height,
        SRCCOPY);
    }
    else Message.Result = CallWindowProc((FARPROC)OldMdiWindowProc,

    ClientHandle, Message.Msg,
    Message.WParam, Message.LParam);
}

//—————————————————————————
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
//—————————————————————————
{
    SetWindowLong(ClientHandle, GWL_WNDPROC,
    (LONG)OldMdiWindowProc);
    FreeObjectInstance(MdiInstance);

    Action = caFree;
}

끝. 아주 간단하죠?

김유미
이거 하니까 실행 프로그램 아래의 배경이 그림으로 따라 다니네요…  2004/01/27 21:27

민병권
Form의 Scaled 속성을 False로 변경 하세요.
예전에 Win98에 Builder 5.0으로 테스트 했을때는 Scaled 속성에 관계없이 잘 됐는데,
지금은 Win2000에 Builder 6.0으로, Form을 MDIForm으로 만 하면 투명폼이 되어 버리네요.

관련글

[펌] C++ Builder에서 MDI 메인화면에 배경 그리기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다