+ -
当前位置:首页 → 问答吧 → 怎样处理无窗体窗口

怎样处理无窗体窗口

时间:2011-12-26

来源:互联网

从网上下载一个例程,该工程无窗体,运行之即打开一个窗口,播放音频文件同时在该窗口显示频谱图像。我想问的是怎样在主程序中实现对这个窗口的控制、操作(位置、大小)?比如把这个窗口放到一个容器控件中,其大小也能随容器控件的改变而改变。有关代码如下:
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.

作者: qkyh19731003   发布时间: 2011-12-26

FindWindow//查询窗体句柄
SetForegroundWindow窗体置前
setwindowpos操作(位置、大小)
setparent把这个窗口放到一个容器控件中 
 

作者: funxu   发布时间: 2011-12-27

热门下载

更多