2012-09-22 72 views
0

當調用Perl Win32::GUI::BrowseForFolder()時,桌面(自然地)有幾個較早的窗口。事實證明,這些窗口隱藏着BrowseForFolder()窗口。這有時會令人困惑和煩人,因爲您可能沒有意識到該程序要求您提供文件夾名稱,並且您可能認爲存在錯誤。 (這與(例如)Win32::GUI::GetOpenFileName()GetSaveFileName()不同,它會在前臺彈出!)。BrowseForFolder()窗口未在前臺打開,隱藏(Perl Win32 :: GUI)

我的問題是:如何讓BrowseForFolder()走到前臺?

一種可能性是找到它的手柄,然後將其提升到前景。

請注意,-addexstyle => WS_EX_TOPMOST沒有效果(見下文)。

這是一個完整的(可編譯和運行的)代碼示例。 (5.014不是必需的)

use strict; 

use warnings; 
use 5.014;  
use Win32::GUI(); 
use Win32::GUI qw{ WS_EX_TOPMOST}; 
my ($InputDir, $TopDir, $InputFileName, $dw, $dh, $desktop, $Window); 

$TopDir = 'D:\My documents'; # Change this to an existing direcotry of yours 
$desktop = Win32::GUI::GetDesktopWindow(); 
$dw = Win32::GUI::Width($desktop); 
$dh = Win32::GUI::Height($desktop); 
$Window = Win32::GUI::Window->new(-name => 'main', -text => 'Main window', 
    -pos => [20/100*$dw, 20/100*$dh], -size => [50/100*$dw, 60/100*$dh], 
    -onTerminate => \&TerminateWindow, 
    -addexstyle => WS_EX_TOPMOST, -dialogui => 1, -tabstop => 1, -cancel => 1,); 
$Window -> AddButton (-name => 'ButtonCommit', -pos => [10,10], 
    -size =>[16/100*$dw,3.5/100*$dh], -text => 'Commit changes', -onClick => \&Commit); 
sub Commit { 
$InputDir = Win32::GUI::BrowseForFolder(-root => $TopDir, -includefiles => 1, 
       -title => 'Select directory for parameter file', 
       -text =>'Selext directory for parameter file', 
       -size => [50/100*$dw, 50/100*$dh], -addexstyle => WS_EX_TOPMOST,); 
$InputFileName = Win32::GUI::GetOpenFileName(-title => 'Select the input file', 
    -directory => $InputDir, -file => "\0" . " " x 256, 
    -filter => ["Text files (*.txt)" => "*.txt", "All files", "*.*", ], 
    -text => 'text Select input file'); 
} # end sub Commit 
$Window ->Show(); 
Win32::GUI::Dialog(); 
sub TerminateWindow { 
return -1; 
} 

點擊「提交更改」按鈕,然後最小化主窗口,然後纔看到「隱藏」 BrowseForFolder()窗口。

請注意,BrowseForFolder()窗口隱藏在其他窗口的後面,您需要最小化其他窗口才能到達它。所有其他Perl Win32::GUI窗口在前臺打開。

此外,請注意-addexstyle => WS_EX_TOPMOST沒有效果,但它通常在Perl Win32::GUI窗口中。

注意:將D:\My documents更改爲現有目錄。

相關問題:如何找到桌面的窗口句柄?如果我們能找到BrowseForFolder()的句柄,我們可以將它提升到前臺。

(注:類似的問題,同時張貼在PerlMonks:http://perlmonks.org/?node_id=994815

回答

3

如果刪除

-addexstyle => WS_EX_TOPMOST, 
從主窗口

(也是從瀏覽器),它跳到前臺。該標誌用於應位於頂部的窗口,無論它是什麼 - 通常是一些小部件。