2012-06-05 26 views
5

Tôi có một số NSWindow mà tôi muốn có nó trước mọi thứ (mọi ứng dụng của máy tính, ứng dụng toàn màn hình, v.v.). Ngay cả khi tôi nhấp vào trong một ứng dụng nền, các NSWindow không thể đi đến nền. Và NSWindow phải theo màn hình người dùng nếu, ví dụ: người dùng chuyển máy tính để bàn sang máy tính để bàn2, v.v ... Tôi có thể làm như thế nào?
Cảm ơn!Làm thế nào để buộc một NSWindow ở trước mọi ứng dụng? Ngay cả ứng dụng toàn màn hình

Trả lời

9

Nếu bạn không cần hiển thị với các cửa sổ toàn màn hình của các ứng dụng khác, nó không quá khó.

Đầu tiên, để ở trước mọi thứ khác, chỉ cần setLevel: với NSFloatingWindowLevel hoặc cao hơn. Thử nghiệm với các giá trị khác nhau để xem có vẻ phù hợp với nhu cầu của bạn.

Tiếp theo, để ở phía trước ngay cả khi người dùng thay đổi Không gian, có thể bao gồm Exposé/Mission Control, setCollectionBehavior: với cặp cờ thích hợp hoặc sử dụng cài đặt Spaces và Exposé tương ứng trong Thanh tra thuộc tính nếu bạn đang tạo cửa sổ trong ngòi. Hoặc có thể tham gia tất cả các không gian hoặc di chuyển sang không gian hoạt động sẽ đảm bảo bạn luôn hiển thị trên mọi không gian theo các cách hơi khác nhau. Có thể bạn sẽ muốn Exposé đặt thành Văn phòng phẩm, hoặc có thể là Tạm thời. Một lần nữa, hãy thử cả hai cách và xem.

Tuy nhiên, Lion sẽ ẩn cả cửa sổ không gian và cửa sổ di chuyển đến không hoạt động khi người dùng chuyển sang không gian toàn màn hình hoặc tới Trang tổng quan hoặc Launchpad. Và nếu bạn xem, bạn sẽ thấy rằng nó thực hiện điều này theo nhiều cách khác nhau cho từng trường hợp. Và Snow Leopard đó làm những việc khác một chút, và sư tử núi cũng vậy.

Nếu bạn muốn giải quyết vấn đề cuối cùng, bạn cần một chút hackery — và các dạng tấn công khác nhau cho từng trường hợp và cho từng phiên bản hệ điều hành. Bí quyết cơ bản là nắm bắt các thông báo liên quan đến ẩn và tự bỏ ẩn mình vào thời điểm thích hợp.

+1

Cảm ơn bạn rất nhiều! Tôi đặt cấp độ cho NSFloatingWindowLevel, Spaces: Có thể tham gia tất cả Spaces và Exposé: Hành vi thoáng qua và nó hoạt động theo cách tôi muốn! NSWindow đang theo tôi khắp mọi nơi. Cảm ơn bạn! –

+0

Một ý nghĩ cuối cùng: Có thể phù hợp hơn khi sử dụng NSPanel thay vì NSWindow (và có thể sử dụng setFloatingPanel: YES thay vì setLevel: NSFloatingWindowLevel). – abarnert

4

Bạn nên sửa đổi thông tin của mình.plist và đặt Đơn là tác nhân cờ thành CÓ. Cửa sổ của tác nhân có thể được hiển thị trước cửa sổ toàn màn hình.