Return Value
标识了具有指定的类名或窗口名的窗口。如果没有找到这样的窗口,则返回NULL。
返回的CWnd*值可能是临时的,不能被保存以供将来使用。
假如当下载数据完成的时候自动关闭"进度条"窗口,在多线程下载数据完成后加入以下代码:
第一个方法:
CWnd* m_pWnd=FindWindow(NULL,"进度条");
if(m_pWnd)
{
::PostMessage(m_pWnd->m_hWnd,WM_CLOSE,0,0);//强迫退出
}
第二个方法:①在进度条窗体对象中,加入一个public类型的void OnClose函数.如下:
void CDDdlg::OnClose()
{
OnOK();
}
②在下载结束后的程序后面加入,注:生命进度条窗口 CDDdlg dlg;
{
dlg.OnClose();
}
FindWindow(
lpClassName, {窗口的类名}
lpWindowName: PChar {窗口的标题}
): HWND; {返回窗口的句柄; 失败返回 0}
//测试1: 试着找找新建程序主窗口的句柄
var
h: HWND;
begin
{现在我们知道窗口的标题是: Form1、窗口的类名是: TForm1}
h := FindWindow('TForm1', 'Form1');
ShowMessage(IntToStr(h)); {656180; 这是随机, 每次启动窗口肯定不一样}
{假如不知道类名}
h := FindWindow(nil, 'Form1');
ShowMessage(IntToStr(h)); {656180}
{假如不知道标题名}
h := FindWindow('TForm1', nil);
ShowMessage(IntToStr(h)); {656180}
{其实这个窗口的句柄不就是 Self.Handle 吗}
ShowMessage(IntToStr(Handle)); {656180}
end;
//测试2: 找计算器窗口的句柄(先打开计算器)
var
h: HWND;
begin
{如果不是简体中文系统, 这样可能不灵}
h := FindWindow(nil, '计算器');
ShowMessage(IntToStr(h)); {1508334}
{最好这样, 但你得提前知道计算器窗口的类名是: SciCalc}
h := FindWindow('SciCalc', nil);
ShowMessage(IntToStr(h)); {1508334}
end;