从网上下载一个例程,该工程无窗体,运行之即打开一个窗口,播放音频文件同时在该窗口显示频谱图像。我想问的是怎样在主程序中实现对这个窗口的控制、操作(位置、大小)?比如把这个窗口放到一个容器控件中,其大小也能随容器控件的改变而改变。有关代码如下:
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.
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.
解决方案 »
- 如何在打開Mdi窗口時主窗體的MainMeun增加一個菜單按扭
- 不懂是那里有错误了,请指教!
- 求助:IntraWeb开发资料!
- 一个sql语句问题!up有分!
- 如何用DBGrid向数据库中添加数据。
- 请各位高手不吝赐教!!!
- 如何编写这样的一个程序。。。。。。。
- 错误提示“Asynchronous socket error”可以在哪里得到祥解?
- TDBGrid中,怎样得到某单元格的左上角相对于窗体的坐标以及这单元格的高度?
- 请问大虾们从哪里可以下载到delphi 5的全部升级文件?
- 事务没有提交以前,使用里面的一些数据是否可行?
- project xxx.exe raise exception class EStackOverflow with message 'stack oveflow
SetForegroundWindow窗体置前
setwindowpos操作(位置、大小)
setparent把这个窗口放到一个容器控件中