110,533
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 重载Win32窗口消息处理,目的是把Win32消息的参数转成C#可识别的参数
/// </summary>
/// <param name="hWnd">Win32窗口句柄</param>
/// <param name="msg">消息号</param>
/// <param name="wParam">参数1</param>
/// <param name="lParam">参数2</param>
/// <param name="handled">返回是否已处理该消息,如果设为true,则在C++端不再接收该消息</param>
/// <returns>返回消息处理结果,一般正常返回IntPtr.Zero</returns>
protected override IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case 0x0201: // WM_LBUTTONDOWN
case 0x0204: // WM_RBUTTONDOWN
case 0x0207: // WM_MBUTTONDOWN
{
// 鼠标被按下
int v0 = wParam.ToInt32();
int v1 = lParam.ToInt32();
bool ctrl = (v0 & 0x0008) == 0x0008;
int x = (int)(v1 & 0xffff);
int y = (int)((v1 & 0xffff0000) >> 16);
MouseButton btn = MouseButton.Left;
if (msg == 0x0201)
btn = MouseButton.Left;
else if (msg == 0x0204)
btn = MouseButton.Right;
else if (msg == 0x0207)
btn = MouseButton.Middle;
if (DoMouseDown != null)
handled = DoMouseDown(hwnd, btn, x, y, 0, ctrl);
}
break;
这段代码看不懂,主要想知道x y为什么要那样运算,运算之后的结果又代表什么意思