从网上下载一个例程,该工程无窗体,运行之即打开一个窗口,播放音频文件同时在该窗口显示频谱图像。我想问的是怎样在主程序中实现对这个窗口的控制、操作(位置、大小)?比如把这个窗口放到一个容器控件中,其大小也能随容器控件的改变而改变。有关代码如下:
unit Unit1;
interface
uses
  Windows, Messages, CommDlg,  dialogs,MMSystem;
const   
  SPECWIDTH = 568;
  SPECHEIGHT = 127;
  BANDS = 36;   var   
  Window        : HWND = 0;
  Msg           : TMsg;
  WndClass      : TWndClassEX;  PosX, PosY    : Integer;
  SizeX, SizeY  : Integer;  Timer : DWORD = 0;   
  Chan : DWORD;     
  SpecDC : HDC = 0;
  SpecBmp : HBITMAP = 0;
  SpecBuf : Pointer;     procedure WinMain;  
  implementation
……
……
procedure WinMain;
begin
  Window := FindWindow(szAppName, NIL);
  if Window <> 0 then
  begin
    if IsIconic(Window) then
      ShowWindow(Window, SW_RESTORE);
    SetForegroundWindow(Window);
    Halt(254);
  end;  // check the correct BASS was loaded
  if HIWORD(BASS_GetVersion) <> BASSVERSION then
  begin
    MessageBox(0, 'An incorrect version of BASS.DLL was loaded', '', MB_ICONERROR);
    Exit;
  end;  // register window class and create the window
  FillChar(WndClass, SizeOf(TWndClassEx), 0);
  WndClass.cbSize        := SizeOf(TWndClassEx);
  WndClass.style         := CS_HREDRAW or CS_VREDRAW;
  WndClass.lpfnWndProc   := @SpectrumWindowProc;
  WndClass.cbClsExtra    := 0;
  WndClass.cbWndExtra    := 0;
  WndClass.hInstance     := hInstance;
  WndClass.hCursor       := LoadCursor(0, IDC_ARROW);
  WndClass.hbrBackGround := GetSysColorBrush(COLOR_BTNFACE);
  WndClass.lpszClassName := szAppName;  if RegisterClassEx(WndClass) = 0 then
    Halt(255);  SizeX := SPECWIDTH  + 2 * GetSystemMetrics(SM_CXDLGFRAME);
  SizeY := SPECHEIGHT + 2 * GetSystemMetrics(SM_CYDLGFRAME) + GetSystemMetrics(SM_CYCAPTION);  PosX := (GetSystemMetrics(SM_CXSCREEN) - SizeX) div 2;
  PosY := (GetSystemMetrics(SM_CYSCREEN) - SizeY) div 2;  Window := CreateWindowEx(0, szAppName, 'BASS spectrum example (click to toggle mode)',
                        WS_POPUPWINDOW or WS_CAPTION,
PosX, PosY, SizeX, SizeY, 0, 0, hInstance, NIL);  ShowWindow(Window, SW_SHOWNORMAL);  while (GetMessage(Msg, 0, 0, 0)) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;  Halt(Msg.wParam);
end;begin
  WinMain;
end.