October 1, 2005

Про кнопки MFC WinCE

Дорогая раедакция, снова здравствуй. Стало тут мне надобно сделать кнопочек собственную отрисовку. Да только не все тут так просто. Кнопка со стилем BS_OWNERDRAW просто-напросто пропускает нажатия... Причем, без этого стиля все в принципе путем.

Так как у нас собственный CButton, то первая проблемма всем давно известна - баг с ::SHRecognizeGesture() в MFC. Тут переопределяем обработчик WM_LBUTTONDOWN на Default() и всего делов. Красные точки после этого исчезают навеки, а вот нажатия кнопка все-равно пропускает.

Оказалось, что owner-draw кнопке приходит помимо сообщения WM_LBUTTONDOWN, сообщение WM_LBUTTONDBLCLK (!!!), которого там вообще быть не должно... Ну что-ж, лечим:

LRESULT CSkinnedButton::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if (message == WM_LBUTTONDBLCLK)
		message = WM_LBUTTONDOWN;
	return CButton::DefWindowProc(message, wParam, lParam);
}

--Доктор JohnCapfull.