Что нового

Как убрать заголовок окна с кнопками

And

Новичок
Сообщения
36
Репутация
0
Как убрать (скрыть) у открытой программы заголовок окна с кнопками, чтобы сделать окно более компактным. Нажав в область линии где был заголовок с основными кнопками, окно не выбиралось.
 
A

Alofa

Гость
Вам нужно изменить стиль окна.
Если это окно сторонней программы, то вам поможет функция _WinAPI_SetWindowLong().
Примерно так (проверить нет возможности):
Код:
#include <WinAPI.au3>
#include <WinAPIConstants.au3>
$hWnd = ; Дескриптор окна
_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $WS_POPUP)


Или это GUI окно? Но так или иначе принцип такой же - меняйте стиль.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Корректнее вот так: (не забываем про старые стили)

Код:
#include <WinAPI.au3>
#include <WinAPIConstants.au3>

Local $iOldStyle, $hWnd = ; Дескриптор окна
; ---
$iOldStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
If Not BitAnd($iOldStyle, $WS_CHILD) Then _
	_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOr($iOldStyle, $WS_POPUP))
 
A

Alofa

Гость
firex сказал(а):
Корректнее вот так...
Однозначно.


Добавлено:
Сообщение автоматически объединено:

Но тут нужно иметь ввиду:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx сказал(а):
WS_POPUP
0x80000000L
The windows is a pop-up window. This style cannot be used with the WS_CHILD style.
 
Автор
A

And

Новичок
Сообщения
36
Репутация
0
В обоих примерах компилятор требует добавить Global $WS_POPUP, а во втором примере еще и Global $WS_CHILD. Но все же действие имеет только первый более короткий код, второй код ничего не изменяет в окне.

И еще вопрос можно ли еще средствами WinAPI убрать, а потом вернуть, если нужно, панель меню с основными вкладками (Файл - Настройки и т.д.), для еще большей компактности окна, если это возможно сделать, было бы более удобно с некоторыми окнами.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
And
Все верно, мой косяк, слепо скопировал шаблон.

Код:
#include <GuiMenu.au3>
#include <WinAPI.au3>
#include <WinAPIConstants.au3>
#include <WindowsConstants.au3>

Local $hMenu, $hWnd = WinWait('WinHex') ; Some window
; ---
_MakePopup($hWnd)

; Спрятать меню окна
$hMenu = _GUICtrlMenu_GetMenu($hWnd)
If $hMenu Then _
	_GUICtrlMenu_SetMenu($hWnd, 0)

; Восстановить
;_GUICtrlMenu_SetMenu($hWnd, $hMenu)

Func _MakePopup($hWnd)
	Local $iOldStyle
	; ---
	$iOldStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
	If BitAnd($iOldStyle, $WS_CHILD) Then  _
		Return SetError(1, 0, False)

	$iOldStyle = BitAnd($iOldStyle, BitNot($WS_CAPTION))
	_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOr($iOldStyle, $WS_POPUP))
	_WinAPI_SetWindowPos($hWnd, 0, 0, 0, 0, 0, BitOr($SWP_NOMOVE, $SWP_NOSIZE, $SWP_NOZORDER, $SWP_FRAMECHANGED))
	; ---
	Return True
EndFunc


Касательно меню учтите, что это может быть Toolbar или Custom-элементы, так что придется прятать не меню.
 
Верх