Бутон в заглавната лента
Обикновено прозорците на приложения имат 3 бутона в заглавната лента, минимизиране, максимизиране и затваряне. Тази страница ще ви каже как да добавите свой собствен бутон към заглавието на прозореца. Ако проявявате интерес, нека започваме.
След кратко капене в недрата на windows API, успяхме да постигнем желания резултат. Ето резултата: изходен код за основния модул.
Цялата основна работа по изчертаването на бутона в заглавната лента се извършва в процедуратаDrawBtn. Нека разгледаме кода по-подробно.
ПроменливатаWDcсъдържа контекста на устройството на прозореца, получен от функциятаGetWindowsDc. Ще е необходимо да нарисувате прозореца. С помощта на няколко извиквания на функциятаGetSystemMetricsоткриваме размера на стандартния бутон за заглавие на прозореца. След това изчисляваме позицията и размера на правоъгълника, в който ще бъде нарисуван бутонът. И най-важното, извикваме функциятаDrawFrameControl.Тази функция рисува стандартна контрола от посочения тип и стил. Използвайки типаDFC_BUTTON, рисуваме бутон. Задаването на стилаDFCS_BUTTONPUSHрисува бутона в нормално състояние, задаването на стилаDFCS_BUTTONPUSH или DFCS_PUSHEDрисува бутона в натиснато състояние. ПроменливатаPressсъдържа състоянието, в което трябва да бъде изчертан бутонът. В края на работата освобождаваме контекста.
Сега за най-неприятното. За да работи всичко това, е необходимо да се обработят куп съобщения, които Windows изпраща на приложението.Куп, разбира се, е силно казано, но получих 7, плюс 1, което дефинирах за проследяване на кликвания. Тези съобщения са:
- WM_NCPAINT
- WM_NCACTIVATE
- WM_NCLBUTTONDOWN
- WM_NCHITTEST
- WM_SIZE
- WM_NCLBUTTONUP
- WM_LBUTTONUP
PS: Възможно е да комбинирате бутона в заглавието на прозореца и елемента от системното меню, описан в страницата за манипулиране на системното меню