powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WndProc + Mouse
2 сообщений из 2, страница 1 из 1
WndProc + Mouse
    #38070048
haicon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Подскажите как правильно реализовать перехват сообщений для собственного контрола.
Разрабатываю собственный контрол но никак не получается поймать правильные сообщения от мыши.

Пытаюсь реализовать следующим образом:

Код: c#
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.
49.
50.
51.
52.
53.
54.
using System;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using UpdateServer.Classes;

namespace UpdateServer.Controls.ServExplorer
{

    public partial class ServButton : UserControl
    {
        private const int WM_NCLBUTTONDBLCLK = 0x00A3;
        private const int WM_MOUSEFIRST = 0x0200;
        private const int WM_MOUSEMOVE = 0x0200;
        private const int WM_LBUTTONDOWN = 0x0201;
        private const int WM_LBUTTONUP = 0x0202;
        private const int WM_LBUTTONDBLCLK = 0x0203;
        private const int WM_RBUTTONDOWN = 0x0204;
        private const int WM_RBUTTONUP = 0x0205;
        private const int WM_RBUTTONDBLCLK = 0x0206;
        private const int WM_MBUTTONDOWN = 0x0207;
        private const int WM_MBUTTONUP = 0x0208;
        private const int WM_MBUTTONDBLCLK = 0x0209;
        private const int WM_PARENTNOTIFY = 0x210;

.....


        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_PARENTNOTIFY)
            {
                switch ((int)m.WParam)
                {
                    case WM_LBUTTONDOWN:
                    case WM_LBUTTONUP:
                    case WM_LBUTTONDBLCLK:
                    case WM_RBUTTONDOWN:
                    case WM_RBUTTONUP:
                    case WM_RBUTTONDBLCLK:
                    case WM_MBUTTONDOWN:
                    case WM_MBUTTONUP:
                    case WM_MBUTTONDBLCLK:
                        MessageBox.Show("MSG= " + m.Msg.ToString() + " WPARAM= " + m.WParam.ToInt64().ToString());
                        break;
                }
            }

            base.WndProc(ref m);
        }
    }
}



Но как-то глючно все работает. Перехватывает только одиночное нажатие кнопок мышей. Даблклик не получается поймать. Причем перехватывает даже клик через раз. В чем может быть косяк?
...
Рейтинг: 0 / 0
WndProc + Mouse
    #38070860
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haicon,

ну так код и не должон пахать
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 protected override void WndProc(ref Message m)
        {
                switch (m.Msg)
                {
                    case WM_LBUTTONDOWN:
                    case WM_LBUTTONUP:
                    case WM_LBUTTONDBLCLK:
                    case WM_RBUTTONDOWN:
                    case WM_RBUTTONUP:
                    case WM_RBUTTONDBLCLK:
                        MessageBox.Show("MSG= " + m.Msg + " WPARAM= " + m.WParam);
                        return;// наверно дальше и не надо. вернёмся.
                }
            base.WndProc(ref m);
        }
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WndProc + Mouse
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]