Tôi cũng cần giải quyết một vấn đề tương tự gần đây. Câu trả lời của Abel đặt tôi đi đúng hướng. Dưới đây là một ví dụ đầy đủ về cách tôi đã làm nó, bằng cách thay đổi một cửa sổ bình thường vào một tin nhắn chỉ cửa sổ:
class MessageWindow : Form {
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
public MessageWindow() {
var accessHandle = this.Handle;
}
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
ChangeToMessageOnlyWindow();
}
private void ChangeToMessageOnlyWindow() {
IntPtr HWND_MESSAGE = new IntPtr(-3);
SetParent(this.Handle, HWND_MESSAGE);
}
protected override void WndProc(ref Message m) {
// respond to messages here
}
}
Chú ý đến các nhà xây dựng: Tôi đã phát hiện ra rằng tôi cần phải truy cập vào các tài sản Xử lý hoặc phương thức OnHandleCreated sẽ không được gọi. Không chắc chắn lý do, có lẽ ai đó có thể giải thích tại sao.
Tôi tin rằng mẫu mã của tôi cũng sẽ trả lời một câu hỏi liên quan: How do I create a message-only window from windows forms?
Bạn đã từng nhìn vào 'NC_ * 'tin nhắn? Cũng giống như di chuột trong thanh tiêu đề, đây cũng có thể là "khu vực không phải khách hàng". Ngoài ra: bạn có ý gì với các thông điệp cửa sổ? Giống như khi chuột được di chuột qua biểu mẫu thu nhỏ? – Abel