2008-12-08 39 views
5

Tôi đã tạo một bản sao phơi sáng cho Vista mà đôi khi cần khôi phục cửa sổ thu nhỏ. Tôi đã thực hiện việc này bằng chức năng SetWindowPlacement. Vấn đề là điều này cũng sơn lại cửa sổ trông giống như crap sau khi cửa sổ độc đáo đã trượt vào màn hình.Cách khôi phục cửa sổ thu nhỏ mà không nhấp nháy

Đây là mã tôi sử dụng để mang lại một cửa sổ để phía trên và cung cấp cho nó tập trung:

private static void ActivateWindow(IntPtr windowToShow) 
    { 
     RectAPI r = new RectAPI(); 
     Win32.GetWindowRect(windowToShow, ref r); 

     if (r.top == -32000) //r.top is -32000 if the window is in minimized state 
     { 
      WINDOWPLACEMENT wp = new WINDOWPLACEMENT(); 
      Win32.GetWindowPlacement(windowToShow, ref wp); 

      if (wp.flags == WindowPlacementFlags.WPF_RESTORETOMAXIMIZED) 
       wp.showCmd = cmdShow.SW_SHOWMAXIMIZED; 
      else 
       wp.showCmd = cmdShow.SW_RESTORE; 

      Win32.SetWindowPlacement(windowToShow, ref wp); 
     } 

     Win32.SetForegroundWindow(windowToShow); 
    } 

Nếu tôi sử dụng nó trên một cửa sổ đã được khôi phục lại nó sẽ chỉ gọi SetForegroundWindow và cửa sổ sẽ nhận được lên đầu đơn đặt hàng z và lấy nét mà không bị nhấp nháy.

Nhưng nếu tôi gọi nó trên cửa sổ thu nhỏ, tôi cũng phải sử dụng SetWindowPlacement để đưa trở lại cửa sổ về trạng thái được khôi phục. Đây là những gì làm cho cửa sổ để sơn lại và nhấp nháy:/

Phải có cách khôi phục cửa sổ thu nhỏ mà không bị nhấp nháy vì trình quản lý cửa sổ được tích hợp thực hiện việc này.

Trả lời

2

Một cách để thực hiện việc này là sử dụng kỹ thuật đệm đôi: vẽ lên bitmap ngoài màn hình, sau đó khôi phục, sau đó chuyển bitmap vào màn hình. Nhưng nó có vẻ như quá mức cần thiết nếu khôi phục lại một cửa sổ thu nhỏ là kịch bản duy nhất mà nó cần thiết. Có thể những người khác sẽ có ý tưởng tốt hơn? ..

Ngoài ra, nếu bạn vẽ toàn bộ khu vực cửa sổ của khách hàng, bạn có thể vô hiệu hóa WM_ERASEBKGND (hoặc đúng hơn là nói rằng bạn đã xử lý nó nhưng không làm gì cả) để tránh điền thông tin không cần thiết trình tự nền-sau-vẽ lại.

1

This link trên MSDN sẽ giải thích cách bạn muốn xử lý bức tranh cửa sổ trong trường hợp của bạn. Các sự kiện cửa sổ như làm mới cửa sổ hoặc thu nhỏ/tối đa hóa sẽ yêu cầu sơn lại cửa sổ của bạn hoặc vùng của cửa sổ.

Mã hóa hạnh phúc !!

0

Tôi OP ... đã vô tình ăn cookie của tôi.

Đã nghiên cứu cách cửa sổ flip3d và thanh tác vụ quản lý việc này gần hơn một chút và chúng thực sự sơn lại cửa sổ trước chúng bắt đầu hoạt ảnh của ngón cái. Cố gắng thu nhỏ cửa sổ và sau đó khôi phục lại bằng flip3d, bạn sẽ thấy một chớp nhỏ trên cửa sổ 3d trước khi cửa sổ được khôi phục.

Đã thử điều tương tự với ứng dụng của tôi và có vẻ tốt hơn, không hoàn hảo nhưng có thể chấp nhận:/

Các vấn đề liên quan