怎样处理无窗体窗口
时间: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.
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把这个窗口放到一个容器控件中
SetForegroundWindow窗体置前
setwindowpos操作(位置、大小)
setparent把这个窗口放到一个容器控件中
作者: funxu 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28