// TLiteFrame

// ___________________________________________________________

// Функции обработки сообщений

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

// Функция обратного вызова для получения оконных сообщений

////////////////////////////////////////////////////////////////////////////////

function TLiteFrame.WindowCallback(hWnd: HWnd;

Msg, WParam, LParam: Integer): Longint;

var

  WindowMsg : TMessage;

begin

  // Запоминаем дескриптор окна, если это первый вызов

// оконной процедуры

  if FWndHandle = 0 then FWndHandle := hWnd;

  // Формируем сообщение

  WindowMsg.Msg    := Msg;

  WindowMsg.WParam := WParam;

  WindowMsg.LParam := LParam;

  // Обрабатываем его

  WindowProcedure(WindowMsg);

  // Возвращаем результат обратно системе

  Result := WindowMsg.Result;

end;

////////////////////////////////////////////////////////////////////////////////

// Виртуальная функция для обработки оконных сообщений

////////////////////////////////////////////////////////////////////////////////

procedure TLiteFrame.WindowProcedure(var Msg: TMessage);

begin

  // Распределяем сообщения по обработчикам

  Dispatch(Msg);

end;

Реализация оконного класса TLiteWindow

////////////////////////////////////////////////////////////////////////////////

// TLiteWindow

// _______________________________________________

// Инициализация / финализация

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

// Конструктор

////////////////////////////////////////////////////////////////////////////////

constructor TLiteWindow.Create(AWndParent: THandle);

begin

  inherited;

  // Формируем параметры окна

  CreateWindowParams(FWndParams);

  // Регистрируем класс окна

  RegisterClass(FWndParams.WindowClass);

  // Создаем окно

  with FWndParams do

    CreateWindowEx(ExStyle, WindowClass.lpszClassName, Caption,

      Style, X, Y, Width, Height,

      WndParent, WndMenu, hInstance, Param

    );

end;

////////////////////////////////////////////////////////////////////////////////

// Конструктор элемента с субклассингом

////////////////////////////////////////////////////////////////////////////////

constructor TLiteWindow.CreateSubclassed(AWnd: THandle);

begin

  inherited Create(GetParent(AWnd));

  // Сохраняем оконную функцию

  FWndSubclass := Pointer(GetWindowLong(AWnd, GWL_WNDPROC));

  // Сохраняем дескриптор окна

  FWndHandle   := AWnd;

  // Устанавливаем свою оконную функцию

Перейти на страницу:

Похожие книги