Poruszanie oknem w WinApi (WM_WINDOWPOSCHANGING)

0

Cześć! Wiem Wiem, jest sezon ogórkowy, ale ja coś tam sobie drapie i
natknąłem się na pewne trudności liczę na waszą pomoc.

Programik jest w WinAPI. Do SysMenu dodaje 2 nowe pozycje
aby je teraz obsłużyć muszę przechwytywać je w sekcji
WM_SYSCOMMAND: a to blokuje wszystkie standardowe zdarzenia w sysmenu
i muszę je sam obsłużyć. Wiem jak obsłużyć SC_CLOSE czyli
zamknięcie okna, ale nie wiem jak obsłużyć poruszanie okna za pomocą
myszki, co powinno odbywać się w sekcji WM_WINDOWPOSCHANGING:

Jeśli ktoś wie jak rozwiązać ten problem, niech napisze.

program TimeINFO;

uses
  Windows,
  Messages;

const
AppName : PChar = 'TimeINFO';
  idWassup = 100;
  idZmieniacz = 101;

function WindProc(Wnd: HWND; uMsg: UINT; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall;
begin
 Result := 0;
 case uMsg of

  WM_CREATE:
     begin
  AppendMenu (GetSystemMenu (Wnd, FALSE),
    MF_SEPARATOR, 0, '');
  AppendMenu (GetSystemMenu (Wnd, FALSE),
    MF_STRING, idWassup, 'Wassup');
  AppendMenu (GetSystemMenu (Wnd, FALSE),
    MF_STRING, idZmieniacz,'Zmieniacz tapet...');
end;

WM_SYSCOMMAND: // przez ten komunikat nie moge poruszac oknem
  case wPar of
   idWassup:  MessageBox(Wnd,'TimeINFO','TimeInfo click na Wassup',0);
   SC_CLOSE:  PostQuitMessage(0);
 end;
 
  WM_WINDOWPOSCHANGING:
    begin
  // jak obsłużyć poruszanie okna za pomocą myszki ?
    end;
    
  WM_DESTROY:
    begin
     PostQuitMessage(0);
     end;
  else Result := DefWindowProc(Wnd, uMsg, wPar, lPar);
 end;
end;

var
 Wnd: TWndClass; 
 Msg: TMsg;

begin
  Wnd.lpfnWndProc := @WindProc; 
  Wnd.hInstance := hInstance; 
  Wnd.lpszClassName := AppName; 
  Wnd.hbrBackground := COLOR_WINDOW; 
  windows.RegisterClass(Wnd); 

 CreateWindowEX(WS_EX_TOOLWINDOW or WS_EX_TOPMOST,AppName, '          00:00:00',
    ws_Overlapped+WS_SYSMENU+WS_VISIBLE,
    2*(GetSystemMetrics(SM_CXSCREEN) div 3), 0, 126, 24,
    0, 0, hInstance, nil);

 while GetMessage(msg, 0, 0, 0) do DispatchMessage(msg);
end.
0

Dla tych WM_SYSCOMMAND, których nie obsługujesz wywołuj DefWindowProc

case wPar of
  idWassup: MessageBox(Wnd,'TimeINFO','TimeInfo click na Wassup',0);
  else DefWindowProc(Wnd, uMsg, wPar, lPar);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1