Q&A

  • 쓰레드에 윈도우 핸들을 할당 하려면?
쓰레드에(또는 윈도우가 아닌 일반 객체) 메시지를 주고 받을 윈도우 핸들을 할당하고 싶습니다.
assignHandle 인지, attachWindow인지... 다른것인지.. 헤깔리네요
고수님들 도와주세요~
2  COMMENTS
  • Profile
    최용일 2007.11.19 18:43
    안녕하세요. 최용일입니다.

    윈도우 메세지를 처리하실려면 윈도우 핸들을 할당하는게 아니라 CreateWindow/CreateWindowEx라는 API를 이용해서 윈도우 자체를 하나 만드셔서 윈도우메세지를 처리할 수 있도록 해주시면 됩니다.

    ^^ 항상 즐코하세요...

  • Profile
    김재철 2007.12.20 18:44
    윈도우 핸들을 할당하는 방법에는 AllocateHWnd와 MakeObjectInstance 함수가 있는데
    MakeObjectInstance 함수는 메모리 릭이 발생한다고 해서 잘 안씁니다.

    <!--CodeS-->
    constructor TMyThread.Create;
    begin
      inherited Create(True);

      FWindowHandle := AllocateHWnd(WndProc); // 델파이 7 이상에서는 Classes.AllocateHWnd
    end;

    destructor TMyThread.Destroy;
    begin
      DeAllocateHWnd(FWindowHandle); // 델파이 7 이상에서는 Classes.DeAllocateHWnd

      inherited Destroy;
    end;

    procedure TMyThread.WndProc(var Message: TMessage);
    begin
      with Message do
      begin
        case Msg of
          WM_COMMAND:
          begin
            // 메세지 처리
          end;
        end;
        Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
      end;
    end;
    <!--CodeE-->