C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 11.18.2.1 - Обработка сообщения WM_CONTEXTMENU / Меню. / Win32 API

11.18.2.1 - Обработка сообщения WM_CONTEXTMENU

Сообщение WM_CONTEXTMENU создается тогда, когда оконная процедура прикладной программы посылает функции DefWindowProc сообщение WM_RBUTTONUP или WM_NCRBUTTONUP. Приложение может обработать это сообщение, чтобы показать на экране контекстное меню, в соответствующей конкретной части экрана. Если прикладная программа не показывает на экране контекстное меню, она должна передать это сообщение в DefWindowProc для обработки по умолчанию.

Ниже следует пример обработки сообщения WM_CONTEXTMENU, как оно может фигурировать в оконной процедуре прикладной программы. Младшие и старшие слова параметра lParam определяют экранную систему координат мыши, когда отпускается правая кнопка мыши. Определяемая программой функция OnContextMenu возвращает значение ИСТИНА (TRUE), если она показывает на экране контекстное меню или ЛОЖЬ (FALSE) если она этого не делает.

case WM_CONTEXTMENU:
	if (!OnContextMenu(hwnd, LOWORD(lParam), HIWORD(lParam)))
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	break;

Следующая определяемая программой функция OnContextMenu показывает на экране контекстное меню, если определяемая позиция мыши внутри рабочей области окна. Более сложная функция могла бы показывать на экране одно из нескольких различных меню, в зависимости оттого, которая часть рабочей области определена. Чтобы фактически показывать на экране контекстное меню, этот пример вызывает определяемую программой функцию по имени DisplayContextMenu. За описанием этой функции, обратитесь к статье Отображение на экране контекстного меню.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y)
{
	RECT rc;		// рабочая область окна
	POINT pt = { x, y };	// место, где был щелчок мышью
	// Получим ограничительный прямоугольник рабочей области.
	GetClientRect(hwnd, &rc);
	// Преобразуем позицию мыши в координаты рабочей области.
	ScreenToClient(hwnd, &pt);
	// Если позиция находится в рабочей области, 
	// показать контекстное меню.
	if (PtInRect(&rc, pt)) {
		ClientToScreen(hwnd, &pt);
		DisplayContextMenu(hwnd, pt);
		return TRUE;
	}
	// Возвратить значение ЛОЖЬ (FALSE), если 
	// не отображается никакого меню
	return FALSE;
}

| |
Автор Владимир Соковиков.
[AD]