1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
use crate::msg::*;
/// Parameters of a message which can be sent. Implemented by
/// [all defined messages](crate::msg).
///
/// Allows the conversion to the generic [`WndMsg`](crate::msg::WndMsg)
/// parameters, and also defines the return type of the message.
///
/// Used in functions like
/// [`SendMessage`](crate::prelude::user_Hwnd::SendMessage) and
/// [`DefWindowProc`](crate::prelude::user_Hwnd::DefWindowProc).
///
/// # Safety
///
/// Messages manipulate pointers, copies and window states. Improper use may
/// lead to undefined behavior.
pub unsafe trait MsgSend {
/// The specific type of the value returned by the message.
type RetType;
/// Converts the generic `isize` return value to the specific type returned
/// by the message.
#[must_use]
fn convert_ret(&self, v: isize) -> Self::RetType;
/// Converts the specific message parameters struct into the generic
/// [`WndMsg`](crate::msg::WndMsg) message struct.
#[must_use]
fn as_generic_wm(&mut self) -> WndMsg;
}
/// Parameters of a message which can be sent and handled (received).
/// Implemented by [`WndMsg`](crate::msg::WndMsg) and all
/// [msg::wm](`crate::msg::wm`) messages.
///
/// Allows the conversion from and to the generic [`WndMsg`](crate::msg::WndMsg)
/// parameters, and also defines the return type of the message.
///
/// # Safety
///
/// Messages manipulate pointers, copies and window states. Improper use may
/// lead to undefined behavior.
pub unsafe trait MsgSendRecv: MsgSend {
/// Converts the generic [`WndMsg`](crate::msg::WndMsg) parameters struct
/// into the specific message struct.
#[must_use]
fn from_generic_wm(parm: WndMsg) -> Self;
}