안녕하세요.
흠 이상하군요. 그럴리가....
다시한번 해보세요. 뭔가가 잘못설정되 있을 수도...
아래는 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.