Как определить значение, представленное атрибутами WParam и Laram в классе Message в C#
В следующем классе атрибуты WParam
а также LParam
являются IntPtr
типа, но я не знаю значение, которое они представляют. Я нашел их в определении C++. Это довольно хлопотно. Есть ли способ быстро узнать два вышеуказанных атрибута?
namespace System.Windows.Forms
{
public struct Message
{
public int Msg { get; set; }
public IntPtr WParam { get; set; }
public IntPtr LParam { get; set; }
public IntPtr Result { get; set; }
public static Message Create(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
public override bool Equals(object o);
public override int GetHashCode();
public object GetLParam(Type cls);
public override string ToString();
public static bool operator ==(Message a, Message b);
public static bool operator !=(Message a, Message b);
}
}
1 ответ
wParam и lParam не имеют внутреннего значения. Это просто переменные "полезной нагрузки", которые содержат данные, которые передает каждое сообщение, и их значение (или их отсутствие) изменяется для каждого конкретного сообщения.
Например, в сообщении WM_SETTEXT (которое устанавливает текст окна, например строку заголовка окна), MSDN дает вам следующее:
wParam: этот параметр не используется.
lParam: указатель на завершающуюся нулем строку, которая является текстом окна.
Находясь в WM_SHOWWINDOW (который показывает / скрывает окно), документы показывают это:
WPARAM:
Указывает, отображается ли окно. Если wParam TRUE, окно показывается. Если wParam ЛОЖЬ, окно скрыто.
LPARAM
Статус отображаемого окна. Если lParam равно нулю, сообщение было отправлено из-за вызова функции ShowWindow; в противном случае lParam является одним из следующих значений.
- SW_OTHERUNZOOM - 4 - Окно открывается, потому что окно максимизации было восстановлено или свернуто.
- SW_OTHERZOOM - 2 - Окно закрывается другим окном, которое было развернуто.
- SW_PARENTCLOSING - 1 - Окно владельца окна свернуто.
- SW_PARENTOPENING - 3 - Окно владельца окна восстанавливается.
Как видите, стандартного, фиксированного значения нет. Вы даже не можете предположить, что в сообщениях, которые содержат дескриптор окна (hWnd), это wParam
это будет нести в то время как lParam
несет другие данные. Это зависит только от индивидуального сообщения.