Главная » C#, Компоненты » Прямая обработка очереди сообщений

0

Если стандартной функциональности режима разработки не хватает, можно напрямую обрабатывать очередь сообщений Windows, также как это делается компонентом в режиме выполнения. Отличие состоит в том, что дизайнер компонента (в отличие от самого компонента) будет получать сообщения только в режиме разработки.

Для обработки очереди сообщений нужно перекрыть метод wndproco класса ControiDesigner. Библиотека .NET Framework является мультиплатформен- ной, поэтому специальных констант, описывающих коды сообщений Windows, она не содержит. Приходится описывать их самостоятельно. В листинге 6.12 показан пример обработки щелчка кнопки мыши. Код сообщения в этом случае равен 0x201. В случае получения этого кода мы будем выводить небольшое сообщение. Для того чтобы отсечь нажатия вне границ компонента, нужно проверять координаты точки, в которой находится курсор мыши. Аналогично можно получать не только сообщения о действиях мыши, но и любые другие сообщения.

Листинг 6 12 Оьработка щелчка мыши

using System;

using System.Collections;

using System. Collections .Generic;

using System. Text;

using System.Windows.Forms.Design;

using System.Drawing;

using System.ComponentModel;

using System.Windows. Forms;

namespace MyControl

{

class GradientLabelDesigner : ControiDesigner {

protected const int WM_LBUTTONCLICK = 0x201;

protected override void WndProc(ref Message rn)

f

if (m.Msg == WM_LBUTTONCLICK)

{

point pt = Control.PointToClient(Cursor.Position);

if ((pt.X > 0) ss (pt.X < Control.Width)

&& (pt.Y > 0) && (pt.Y < Control.Height))

[

MessageBox.Show("Нажата левая кнопка мыши! " + pt.X);

}

)

base.WndProc(ref m) ,-

}

)

}

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии