我正在編寫一個基於MFC的舊庫的.NET包裝。它基於一個使用窗口消息發送通知的類;它有一個讓用戶把句柄傳遞給窗口的功能,並且該窗口將接收消息。我可以在沒有窗口的情況下發送/接收窗口消息嗎?
我可以只是要求我的包裝的用戶子類Control
並通過他們的控制手柄,以接收消息,但這是可怕的。我希望我的包裝類具有在舊庫發送消息時觸發的事件,然後我可以將消息解碼爲合理的東西。但是,我不希望我的包裝類必須成爲控件。
有沒有辦法讓我創建一個'虛擬'窗口句柄,並接收發送到該句柄的消息,而無需創建窗口?
我正在編寫一個基於MFC的舊庫的.NET包裝。它基於一個使用窗口消息發送通知的類;它有一個讓用戶把句柄傳遞給窗口的功能,並且該窗口將接收消息。我可以在沒有窗口的情況下發送/接收窗口消息嗎?
我可以只是要求我的包裝的用戶子類Control
並通過他們的控制手柄,以接收消息,但這是可怕的。我希望我的包裝類具有在舊庫發送消息時觸發的事件,然後我可以將消息解碼爲合理的東西。但是,我不希望我的包裝類必須成爲控件。
有沒有辦法讓我創建一個'虛擬'窗口句柄,並接收發送到該句柄的消息,而無需創建窗口?
有一個概念MessageOnly Windows它可以幫助你。您可以在包裝類中創建僅內部消息窗口,並將此句柄傳遞給舊庫。
你可以嘗試使用消息泵創建一個線程並將消息發送到該線程。線程然後引發您想要在您的C#代碼中處理的任何必要事件。
你不能沒有一個具有窗口創建一個窗口句柄,因爲窗口句柄是儘可能的Windows而言的窗口,但你可以使沒有WS_VISIBLE標誌設置窗口,並用它來消息中繼只要。我有時會使用這種技術在僅MFC應用程序中執行跨線程通信(不告訴任何人;))。您可以從CWnd派生一個(C++)類,讓它處理這些消息,並調用函數或爲接收到的每條消息發送信號。我想這會使它與你的C#代碼一起工作,儘管我沒有這方面的經驗。