musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Как запретить перетаскивать ленту на новый уровень, с возможностью изменения при этом ее ширины? Стиль $RBBS_TOPALIGN в данном случае не решает проблему. Реализовал следующим образом, но криво, мне не нравится. Я бы хотел, чтобы ширина ленты изменялась, но сама лента оставалась всегда сверху, не перемещалась на нижний уровень.
Так же не получается после создания Rebar'а установить для ленты ширину — минимальную, максимальную и текущую, фиксация ширины работает, но при отключении фиксации, ширина откатывается на первоначальную, с которой была создана. Что-то здесь накуралесили разрабы.. Хочу, чтобы при изменении размеров окна, правая лента оставалась в фиксированных размерах, а левая поджималась, но руками лента должна изменяться в размерах.
Код:
#include <GUIConstantsEx.au3>
#include <GuiReBar.au3>
#include <GuiToolbar.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
$Debug_RB = False
Global $iMemo, $hgui, $g_hReBar
_Main()
Func _Main()
$hgui = GUICreate(StringTrimRight(@ScriptName, 4), 600, 250, -1, -1, BitOR($WS_BORDER, $WS_CAPTION, $WS_GROUP, $WS_CLIPCHILDREN, $WS_SIZEBOX))
$g_hReBar = _GUICtrlRebar_Create($hgui, BitOR($CCS_TOP, $RBS_FIXEDORDER, $RBS_DBLCLKTOGGLE))
;WinSetTrans($g_hReBar, '', 5)
_GUICtrlRebar_AddBand($g_hReBar, GUICtrlGetHandle(GUICtrlCreateInput('', 0, 0, 300, 22)), 230, 300, "AddressBand", 0, BitOR($RBBS_CHILDEDGE, $RBBS_HIDETITLE, $RBBS_NOGRIPPER))
GUICtrlSetState(-1, $GUI_DISABLE)
_GUICtrlRebar_AddBand($g_hReBar, GUICtrlGetHandle(GUICtrlCreateInput('', 0, 0, 0, 22)), 90, 100, "SearchBox", 1, BitOR($RBBS_CHILDEDGE, $RBBS_HIDETITLE))
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc ;==>_Main
Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
If Not ($hWnd = $hgui) Then Return
Local $wPos = WinGetPos($hgui)
ControlMove($hgui, "", $g_hReBar, 0, 0, $wPos[2])
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
Local $tAUTOBREAK, $tAUTOSIZE, $tNMREBAR, $tCHEVRON, $tCHILDSIZE, $tOBJECTNOTIFY
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $g_hReBar
Switch $iCode
Case $RBN_AUTOBREAK
; Уведомляет родителя ReBar, что перенос на новую линию будет появляться в ReBar. Родитель определяет, делать ли перенос
$tAUTOBREAK = DllStructCreate($tagNMREBARAUTOBREAK, $lParam)
; Возвращаемое значение не используется
Case $RBN_AUTOSIZE
; Высылается ReBar'ом, созданным со стилем $RBS_AUTOSIZE, когда ReBar автоматически изменяет свои размеры
; Возвращаемое значение не используется
Case $RBN_BEGINDRAG
; Высылается ReBar'ом, когда пользователь начал перетаскивание ленты
Return 0 ; Позволяет ReBar'у продолжить операцию перетаскивания
;Return 1 ; иное, кроме ноль, чтобы прервать операцию перетаскивания
Case $RBN_CHEVRONPUSHED
; Высылается ReBar'ом, при нажатии шеврона (двойная угловая скобка)
; Когда приложение получает это уведомление, оно отвечает за отображение всплывающего меню с пунктами для каждой скрытой панели инструментов.
; Используйте поле rc структуры $tagNMREBARCHEVRON, чтобы найти правильную позицию для всплывающего меню
; Возвращаемое значение не используется
Case $RBN_CHILDSIZE
; Высылается ReBar'ом, когда дочернее окно ленты было изменено в размерах
If _GUICtrlRebar_GetBandStyleBreak($g_hReBar, 1) Then _GUICtrlRebar_SetBandStyleBreak($g_hReBar, 1, False)
; Возвращаемое значение не используется
Case $RBN_DELETEDBAND
; Высылается ReBar'ом после удаления ленты
; Возвращаемое значение не используется
Case $RBN_DELETINGBAND
; Высылается ReBar'ом при удалении ленты
; Возвращаемое значение не используется
Case $RBN_ENDDRAG
; Высылается ReBar'ом при завершении перетаскивания ленты пользователем
If _GUICtrlRebar_GetBandStyleBreak($g_hReBar, 1) Then _GUICtrlRebar_SetBandStyleBreak($g_hReBar, 1, False)
; Возвращаемое значение не используется
Case $RBN_GETOBJECT
; Высылается ReBar'ом, созданным со стилем $RBS_REGISTERDROP, когда объект перетаскивается над лентами ReBar
; Возвращаемое значение не используется
Case $RBN_HEIGHTCHANGE
; Высылается ReBar'ом, при изменении высоты
; Rebar с использованием стиля $CCS_VERT высылает это уведомление, когда его ширина изменилась
; Возвращаемое значение не используется
Case $RBN_LAYOUTCHANGED
; Высылается ReBar'ом, когда пользователь изменяет расположение лент
If _GUICtrlRebar_GetBandStyleBreak($g_hReBar, 1) Then _GUICtrlRebar_SetBandStyleBreak($g_hReBar, 1, False)
; Возвращаемое значение не используется
Case $RBN_MINMAX
; Высылается ReBar'ом, перед достижением максимального или минимального размера ленты
; Return 1 ; ненулевое значение, чтобы предотвратить операцию
Return 0 ; 0 позволяет продолжить
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Так же не получается после создания Rebar'а установить для ленты ширину — минимальную, максимальную и текущую, фиксация ширины работает, но при отключении фиксации, ширина откатывается на первоначальную, с которой была создана. Что-то здесь накуралесили разрабы.. Хочу, чтобы при изменении размеров окна, правая лента оставалась в фиксированных размерах, а левая поджималась, но руками лента должна изменяться в размерах.
Последнее редактирование: