2009-12-09 27 views

Trả lời

5

Bạn có thể sử dụng API Win32 BringWindowToTop. Phải mất một HWND.

Bạn cũng có thể sử dụng API Win32 SetWindowPos cũng cho phép bạn thực hiện những việc như làm cho cửa sổ trở thành cửa sổ cấp cao nhất.

+0

Liên kết seccond là không chính xác, bạn có nghĩa là http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx Bạn cũng có thể đề xuất một ví dụ về chức năng này không? –

+0

@Levo: Cảm ơn tôi không được sao chép nó vào khay nhớ tạm chính xác trước khi tôi dán. –

10
SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 

BringWindowToTop di chuyển cửa sổ để phía trên cùng của Z-trật tự (bây giờ) nhưng không không làm cho nó một cửa sổ trên cùng.

+0

Bạn có thể cho ví dụ được không? –

+1

@Levo: chỉ thay thế tay cầm của cửa sổ bạn muốn trên đầu thay cho 'that_window_handle' trong đoạn mã trên. –

+0

Điều này phải được chấp nhận câu trả lời. – Neolisk

3

BringWindowToTop() không có tác dụng nếu bạn muốn đưa cửa sổ ứng dụng từ phía sau (hoặc thu nhỏ) lên phía trước. Các mã sau đây làm thủ thuật này đáng tin cậy:

ShowWindow(hwnd, SW_MINIMIZE); 
ShowWindow(hwnd, SW_RESTORE); 
+0

Nó là chậm trong win XP. – ahoo

+0

Làm việc như một sự quyến rũ! –

0
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) { 
    wchar_t buff[255]; 

    if (IsWindowVisible(hWnd)) { 
     GetWindowText(hWnd, (LPWSTR) buff, 254); 
     //wprintf(L"%s\n", buff); 
     wstring ws = buff; 
     if (ws.find(L"Firefox") != ws.npos) 
     { 
      ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); 
     } 
    } 
    return TRUE; 
} 

int main(){ 
    BOOL enumeratingWindowsSucceeded = ::EnumWindows(EnumWindowsProc, NULL); 
} 
Các vấn đề liên quan