Tôi đang xây dựng ứng dụng máy tính để bàn Win7/8/10 x64 Direct3D11 cho phép người dùng chuyển đổi giữa chế độ cửa sổ và chế độ toàn màn hình. , không chỉ là cửa sổ tối đa *). Trên một thiết lập màn hình kép tôi đang gặp phải một số vấn đề.Chế độ toàn màn hình trên màn hình A trong quá trình thiết lập màn hình kép Khi di chuyển các cửa sổ từ màn hình B sang
Bản thân công tắc được thực hiện thủ công bằng cách sử dụng IDXGISwapChain::SetFullscreenState
và hoạt động như dự định: Màn hình chứa phần của cửa sổ sư tử (gọi là màn hình A) đi vào chế độ toàn màn hình chuyên dụng trong khi rời khỏi màn hình kia (màn hình B) cho phép người dùng tương tác bình thường với các cửa sổ trên B cũng như ứng dụng toàn màn hình trên A.
Tuy nhiên, nếu cửa sổ trên B bị kéo hoặc đổi kích thước để nó chuyển sang A, trạng thái toàn màn hình của ứng dụng sẽ bị quấy rầy : Đôi khi nó chỉ trở lại chế độ cửa sổ (để biến theo dõi nội bộ của ứng dụng không đồng bộ), đôi khi nó vẫn ở chế độ toàn màn hình gần như có vẻ như từ chối các công tắc chế độ tiếp tục, v.v. Điều tương tự cũng xảy ra nếu cửa sổ chồng lên cả A và B trước khi ứng dụng chuyển sang chế độ toàn màn hình được lấy nét.
Có cách nào để ngăn chặn điều này không?
Tôi muốn hệ điều hành sẽ tôn trọng chế độ toàn màn hình chuyên dụng của ứng dụng và giữ ở trạng thái mạnh mẽ ngay cả khi các cửa sổ khác được kéo vào màn hình đó. Tôi muốn hành vi tương tự như có một "cửa sổ không biên giới luôn ở trên cùng, tối đa trên cùng", tức là có các cửa sổ khác "biến mất sau" và không ảnh hưởng đến trạng thái cửa sổ toàn màn hình của tôi.
Tôi đã thử một số cách giải quyết, như ứng phó với WM_KILLFOCUS
và tạm thời chuyển đổi ứng dụng của tôi thành một "cửa sổ maximixed không biên giới" cho đến khi nó nhận được WM_SETFOCUS
một lần nữa, nhưng thông điệp WM_KILLFOCUS
có độ trễ trong thời gian đó còn thời gian cho một người dùng để kéo khác cửa sổ vào khu vực mà sau đó vẫn còn trong chế độ toàn màn hình, do đó đặt tôi trở lại một hình vuông.
* Lý do tôi muốn tính năng này chứ không phải chỉ đơn giản là sử dụng một cửa sổ viền tối đa hóa (mà cũng là một chế độ hỗ trợ, btw) đã làm với nó cho phép thấp hơn nhiều độ trễ chuột phong trào-to-rendering, kiểm soát vsync (ON/OFF) vv .. tất cả đều - trong ngắn hạn - quan trọng đối với bản chất của ứng dụng này (không phải là một trò chơi).