Tuyên bố từ chối: Tôi không quen với API Win32, đặc biệt là cách cửa sổ hoạt động.Cửa sổ chính bị đóng băng khi cửa sổ con bị đóng băng quá mức từ một quá trình khác
Tôi muốn làm cho cửa sổ của một số quá trình là cửa sổ con của một quá trình khác. Hai quy trình cũng là cha mẹ và con. Nhưng tôi không nghĩ rằng vấn đề. Cho đến nay, mọi thứ hoạt động như một nét duyên dáng - Cho đến khi tôi đóng băng luồng chính của cửa sổ con.
Hãy tưởng tượng một container.exe rằng notepad.exe và someApplication.exe 'host'
Khi tôi đình chỉ các chủ đề chính của someApplication.exe trong vài giây, cửa sổ của nó được đông lạnh cho số tiền mà thời gian. Điều đó hoàn toàn dễ hiểu. Nhưng cửa sổ của container.exe cũng sẽ cũng treo cùng một lúc. Cửa sổ con của các quy trình được lưu trữ khác (như notepad.exe) sẽ tiếp tục hoạt động tốt.
Tôi đang sử dụng lệnh SetParent
để thực hiện một cửa sổ phi con thường xuyên là con của container.exe của tôi:
SetParent(
childProcess.HWND,
myOwnHWND
);
Sau đó, tôi đang sử dụng setWindowPos
:
SetWindowPos(
childProcess.HWND,
HWND_TOP,
someXPos,
someYPos,
0,
0,
SWP_FRAMECHANGED or SWP_NOSIZE or SWP_SHOWWINDOW
)
Như số MSDN article on SetParent gợi ý, tôi cũng xóa thuộc tính kiểu WS_POPUP
và thêm thuộc tính WS_CHILD
. Vì điều đó không giúp được gì, tôi cũng đã thêm thuộc tính kiểu mở rộng WS_EX_NOACTIVATE
, cả hai bằng cách sử dụng lệnh SetWindowLongPtr
. Cuối cùng, tôi đã thử gửi cả hai cửa sổ WM_UPDATEUISTATE
và sau đó là thông báo WM_CHANGEUISTATE
nhưng điều đó cũng không thay đổi điều gì.
Điều khiến tôi bối rối là cửa sổ của quy trình gốc tiếp tục được vẽ bình thường, cho đến khi tôi chạm vào nó. Sau đó, nó đóng băng hoàn toàn cho đến khi cửa sổ con không hoạt động. Tôi nghi ngờ một thứ được gọi là hàng đợi nhập '. Các MSDN article về một thông báo WM_ACTIVATE
trạng thái:
Đã gửi đến cả hai cửa sổ đang được kích hoạt và cửa sổ bị hủy kích hoạt. Nếu cửa sổ sử dụng cùng một hàng đợi nhập, tin nhắn sẽ được gửi đồng bộ, trước tiên làm thủ tục cửa sổ của cửa sổ cấp cao bị hủy kích hoạt, sau đó đến quy trình cửa sổ của cửa sổ cấp cao nhất được kích hoạt. Nếu các cửa sổ sử dụng các hàng đợi đầu vào khác nhau, thông báo sẽ được gửi không đồng bộ, vì vậy cửa sổ sẽ được kích hoạt ngay lập tức.
Do đó, tôi đã hy vọng cao cho thuộc tính kiểu mở rộng WS_EX_NOACTIVATE
.
Để tổng hợp: Thực sự có thể lưu trữ cửa sổ của một quy trình khác và không đóng băng cửa sổ của riêng bạn khi cửa sổ con bị đóng băng không?
+1 Câu hỏi này cực kỳ kỹ lưỡng. –
Đọc liên quan: [Có hợp pháp để gọi có mối quan hệ cửa sổ cha/con hoặc chủ sở hữu/sở hữu chéo không?] (Http://blogs.msdn.com/b/oldnewthing/archive/2013/04/12/10410454 .aspx) – GSerg
* Tại sao * bạn có cần phải làm điều này? Tôi chắc chắn có cách tốt hơn và dễ dàng hơn để đạt được mục đích thực sự của bạn. Đừng rơi vào bẫy vấn đề XY. –