首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎样处理无窗体窗口,该怎么解决

2012-03-23 
怎样处理无窗体窗口从网上下载一个例程,该工程无窗体,运行之即打开一个窗口,播放音频文件同时在该窗口显示

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

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

热点排行