C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[357] MDI폼에 Bitmap 이미지 넣기.
민병권 [minbk] 9953 읽음    2002-08-14 17:37
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;   
}

끝. 아주 간단하죠?
김유미 [isaoori]   2004-01-27 21:27 X
이거 하니까 실행 프로그램 아래의 배경이 그림으로 따라 다니네요...
민병권 [minbk]   2005-04-20 11:49 X
Form의 Scaled 속성을 False로 변경 하세요.
예전에 Win98에 Builder 5.0으로 테스트 했을때는 Scaled 속성에 관계없이 잘 됐는데,
지금은 Win2000에 Builder 6.0으로, Form을 MDIForm으로 만 하면 투명폼이 되어 버리네요.

+ -

관련 글 리스트
357 MDI폼에 Bitmap 이미지 넣기. 민병권 9953 2002/08/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.