Q&A

  • MDI Form에서 TCanvas 활용 가능 문의
MDI Form에서 바탕화면에 이미지를 넣고 싶습니다.

Form Style이 fsNormal일경우와 fsMDIForm 일경우 TCanvas 활용상에

차이점이 있는 것 같습니다.



혹시 MDIFrom 바탕화면에 이미지를 넣는 방법을 알려주시면 고맙겠습니다.

3  COMMENTS
  • Profile
    최석기 1999.08.17 00:34
    최규근 께서 말씀하시기를...

    > MDI Form에서 바탕화면에 이미지를 넣고 싶습니다.

    > Form Style이 fsNormal일경우와 fsMDIForm 일경우 TCanvas 활용상에

    > 차이점이 있는 것 같습니다.

    >

    > 혹시 MDIFrom 바탕화면에 이미지를 넣는 방법을 알려주시면 고맙겠습니다.



    MDI라는 키워드로 먼저 검색을 해보시죠.

    원하시는 답변이 있으실겁니다.



    질문을 하시기전에 먼저 해당 답변이 있나 찾아보세요.



    웬만한 답변들은 존재할껄요. ^^

  • Profile
    최규근 1999.08.17 01:56
    최석기 께서 말씀하시기를...

    > 최규근 께서 말씀하시기를...

    > > MDI Form에서 바탕화면에 이미지를 넣고 싶습니다.

    > > Form Style이 fsNormal일경우와 fsMDIForm 일경우 TCanvas 활용상에

    > > 차이점이 있는 것 같습니다.

    > >

    > > 혹시 MDIFrom 바탕화면에 이미지를 넣는 방법을 알려주시면 고맙겠습니다.

    >

    > MDI라는 키워드로 먼저 검색을 해보시죠.

    > 원하시는 답변이 있으실겁니다.

    >

    > 질문을 하시기전에 먼저 해당 답변이 있나 찾아보세요.

    >

    > 웬만한 답변들은 존재할껄요. ^^



    이왕 게시판에 올려 올려 놓는 거, 버그 없는 것 좀 올려 놓았으면 좋겠어요.

    아니면 좀 더 자세히 설명했으면 합니다.

    왕초보들은 몰라서 답답한데, 자료 받아 실행하다 버그 투성이면 왕짜증에 돌아버리거든요...

  • Profile
    김태균 1999.08.17 17:33
    그러면 이거 한번 보세요.



    전에 최석기씨가 올인 내용과 차이가 거의 없는거 같은데

    제가 업체에 납품한 프로그램에 포함되어 있는 소스에요.

    그리구 한 마디만 더 하면요. 버그가 있건 없건 간에 해결

    할 수 있는 실마리를 얻은 것 만해도 무지 큰 도움이 되는게

    아닐까요????



    ....

    private

    { Private declarations }

    FoldClientProc, FNewClientProc : TFarProc;

    FDrawDC : HDC;

    procedure ClientWndProc(var MyMsg: TMessage);

    procedure DrawCenter;

    protected

    procedure CreateWnd; override;

    end;

    ....



    procedure TMainf.CreateWnd;

    begin

    inherited CreateWnd;

    FNewClientProc := MakeObjectInstance(ClientWndProc);

    FOldClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));

    SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FNewClientProc));

    end;



    ...



    procedure TMainf.ClientWndProc(var MyMsg: TMessage);

    begin

    with MyMsg do

    if Msg = WM_ERASEBKGND then

    begin

    CallWindowProc(FOldClientProc, ClientHandle,

    Msg, wParam, lParam);

    FDrawDC := TWMEraseBkGnd(MyMsg).DC;

    DrawCenter;

    end

    else

    Result := CallWindowProc(FOldClientProc,

    ClientHandle, Msg, wParam, lParam);

    end;



    procedure TMainf.DrawCenter;

    var

    BMPPos: TRect;

    begin

    GetWindowRect(ClientHandle, BMPPos);

    with Image1 do

    BitBlt(FDrawDC, ((BMPPos.Right - BMPPos.Left)-Picture.Width) div 2,

    ((BMPPos.Bottom - BMPPos.Top) - Picture.Height) div 2,

    Picture.Graphic.Width, Picture.Graphic.Height,

    Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);

    end;