Q&A

  • Re: MDI 와 일반폼의 관계
안녕하세요.



흠 이상하군요. 그럴리가....



다시한번 해보세요. 뭔가가 잘못설정되 있을 수도...



아래는 MDI 부모창에 그림넣는 방법입니다...



간략히 설명하자면... MDI CHILD 폼이 생길때는 부모창의 클라이언트 영역에 새로운



윈도우가 형성됩니다. 즉 그곳의 핸들을 얻어서 작업해주면 되지요... 말은 간단하지만



개념이...



즐거운 코딩 되세요...



지니 팬이었습니다.



unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls;



type

TForm1 = class(TForm)

Image1: TImage;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

//코딩 부분...

HFanDefWndProc : Pointer;

JFanDefWndProc : Pointer;

procedure ClientWndProc(var Msg: TMessage);



public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}

//TImage 에 미리 그림을 올려논 상태...

procedure TForm1.ClientWndProc;

var

ClientDC : HDC;

begin

case Msg.Msg of

WM_PAINT: begin

ClientDC := GetDC(ClientHandle);

BitBlt(ClientDC, (ClientWidth - Image1.Width - 3) div 2,

(ClientHeight - Image1.Height - 3) div 2,

Image1.Width, Image1.Height, Image1.Canvas.Handle, 0, 0,

SRCCOPY);

ReleaseDC (ClientHandle, ClientDC);

end;

end;

with Msg do

Result := CallWindowProc (HFanDefWndProc, ClientHandle, Msg, wParam, lParam);

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

JFanDefWndProc := MakeObjectInstance( ClientWndProc );

HFanDefWndProc := Pointer(SetWindowLong(ClientHandle, GWL_WNDPROC,

LongInt(JFanDefWndProc)));

end;



procedure TForm1.FormDestroy(Sender: TObject);

begin

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

FreeObjectInstance(JFanDefWndProc);

end;



end.

0  COMMENTS