WndProc Крюк lParam к xy шнурам? - PullRequest
2 голосов
/ 17 марта 2012

Я пытаюсь получить провода мыши после использования ловушки WndProc для получения сообщений от Win32 API ..

Ниже приведен мой код .. Он не длинный и должен быть достаточно легким для понимания .. ЯЯ учусь всему этому на ходу и просто не могу понять, как поменять lParam на точки x и y ..

Любая помощь будет хорошей, Спасибо:)

    private const int WM_LEFTBUTTONDOWN = 0x0201;
    private const int WM_LEFTBUTTONUP = 0x0202;
    private const int WM_MOUSEMOVE = 0x0200;
    private const int WM_MOUSEWHEEL = 0x020A;
    private const int WM_RIGHTBUTTONDOWN = 0x0204;
    private const int WM_RIGHTBUTTONUP = 0x0205;


    public MainWindow()
    {
        InitializeComponent();
    }

    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);
        HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
        source.AddHook(WndProc);
    }

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {

        if (msg == WM_MOUSEMOVE)
        {
            label1.Content = "Msg: " + msg + " wParam: " + wParam + " lParam: " + lParam;
        }

        return IntPtr.Zero;
    }

Ответы [ 2 ]

5 голосов
/ 11 декабря 2012

Вы можете использовать конструктор Point(int dw):

Point point = new Point(lParam.ToInt32());
...

Из MSDN о параметре int dw:

Младшие 16 битов параметра dw указываютгоризонтальная x-координата и старшие 16 битов определяют вертикальную y-координату для новой точки.

4 голосов
/ 17 марта 2012

Координата x находится в младших 16 битах, y - в следующих 16 битах.Взломайте это так:

int x = (short)lParam.ToInt32();
int y = lParam.ToInt32() >> 16;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...