Изменить размеры листера
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
Изменить размеры листера
Возникла необходимость сохранять и восстанавливать размеры листера. Собственно в этом и вопрос.
Есть неверное какое-то сообщение из разряда WM_, но роясь в winuser.h я ничего с похожим названием не нашел.
Спасибо
Есть неверное какое-то сообщение из разряда WM_, но роясь в winuser.h я ничего с похожим названием не нашел.
Спасибо
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
2D1P
То о чем ты говоришь это наверное параметры функции ShowWindow.
Но мне это не помогает.
Может я не совсем правильно описал суть вопроса.
Мне нужно при закрытии плагина сохранить его позицию (координаты верхнего левого угла, высоту, ширину), а потом когда плагин снова запустят восстановить эту самую позицию.
Просто так я доступ к его свойствам получить не могу, ибо я его не создавал, но у меня есть его хендл и собственно ему и надо послать какую-то команду дабы он изменил свою позицию.
Может есть и другое решение, но я даже не знаю в какую сторону рыть.
То о чем ты говоришь это наверное параметры функции ShowWindow.
Но мне это не помогает.
Может я не совсем правильно описал суть вопроса.
Мне нужно при закрытии плагина сохранить его позицию (координаты верхнего левого угла, высоту, ширину), а потом когда плагин снова запустят восстановить эту самую позицию.
Просто так я доступ к его свойствам получить не могу, ибо я его не создавал, но у меня есть его хендл и собственно ему и надо послать какую-то команду дабы он изменил свою позицию.
Может есть и другое решение, но я даже не знаю в какую сторону рыть.
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
Щас будем копать, спасибо.
И тут по ходу еще одна смешная проблема возникла:
На форме есть контрол со свойством alClient, листер себе открывается, максимизируется (ну т.е. на экране выглядит таковым), а когда в программе пытаешся получить допустим высоту оного контрола - получаешь его высоту так, как будто бы он находится в нормальном состоянии (wsNormal). Специально делат принт-скрины и проверял :)
Може кто-нить и с этим поможет.
Подлый этот листер :))
И тут по ходу еще одна смешная проблема возникла:
На форме есть контрол со свойством alClient, листер себе открывается, максимизируется (ну т.е. на экране выглядит таковым), а когда в программе пытаешся получить допустим высоту оного контрола - получаешь его высоту так, как будто бы он находится в нормальном состоянии (wsNormal). Специально делат принт-скрины и проверял :)
Може кто-нить и с этим поможет.
Подлый этот листер :))
Maximus
да с листером боротся приходится
я сделал так (думая разберешся)
СОХРАНЕНИЕ РАЗМЕРОВ
void __stdcall ListCloseWindow(HWND ListWin)
{
//какойто код
//esli ispol'zuetsya opciya zapominat' razmer okna
//tut sohranim razmer okna
if ((!QuickView) && (SaveWindowSize))
{
//fayl nastroek ArchView.ini
MIniFile fINI;
RECT rcClient;
fINI.SetFile(gp->pIniFile);
//sohranim razmeri
hParentWnd = ::GetParent(ListWin);
::GetWindowRect(hParentWnd, &rcClient);
LeftPos = rcClient.left;
TopPos = rcClient.top;
Width = gp->OriginalWidth;
Height = gp->OriginalHeight;
fINI.WriteKey(gp->sSettings.SectionsINI.SectWindow, "WidthWindow", rcClient.right - rcClient.left);
fINI.WriteKey(gp->sSettings.SectionsINI.SectWindow, "HeightWindow", rcClient.bottom - rcClient.top);
}
//какойто код
//esli ispol'zuetsya opciya zapominat' razmer okna
//tut vosstanovim stariy razmer okna listera
if ((!QuickView) && (SaveWindowSize))
{
//vosstanovim razmeri
::SetWindowPos(hParentWnd, HWND_TOP,
LeftPos, TopPos, Width, Height, SWP_DRAWFRAME);
}
//какойто код
}
ВОССТАНОВЛЕНИЕ РАЗМЕРОВ
HWND __stdcall ListLoad(HWND ParentWin,char* FileToLoad,int ShowFlags)
{
//какойто код
//dlya zapuska cherez F3 vozmojno nado ustanovit' razmer
if ((!gp->TypeQuickView) &&
(gp->sSettings.sSettingsWindow.SaveWindowSize))
{
//sohranim razmeri (чтобы восстановить после закрытия плагина, может нажали 4 и будет открыт другой плагин)
::GetWindowRect(ParentWin, &rcClient);
gp->OriginalWidth = rcClient.right - rcClient.left;
gp->OriginalHeight = rcClient.bottom - rcClient.top;
//proverim nashi razmeri
if (!gp->sSettings.sSettingsWindow.WidthWindow)
gp->sSettings.sSettingsWindow.WidthWindow = gp->OriginalWidth;
if (!gp->sSettings.sSettingsWindow.HeightWindow)
gp->sSettings.sSettingsWindow.HeightWindow = gp->OriginalHeight;
//ustanovim novie razmeri
::SetWindowPos(ParentWin, HWND_TOP,
rcClient.left, rcClient.top,
gp->sSettings.sSettingsWindow.WidthWindow,
gp->sSettings.sSettingsWindow.HeightWindow,
SWP_DRAWFRAME);
}
//какойто код
}
пример этой работы можешь увидеть в листер плагине ArchView
да с листером боротся приходится
я сделал так (думая разберешся)
СОХРАНЕНИЕ РАЗМЕРОВ
void __stdcall ListCloseWindow(HWND ListWin)
{
//какойто код
//esli ispol'zuetsya opciya zapominat' razmer okna
//tut sohranim razmer okna
if ((!QuickView) && (SaveWindowSize))
{
//fayl nastroek ArchView.ini
MIniFile fINI;
RECT rcClient;
fINI.SetFile(gp->pIniFile);
//sohranim razmeri
hParentWnd = ::GetParent(ListWin);
::GetWindowRect(hParentWnd, &rcClient);
LeftPos = rcClient.left;
TopPos = rcClient.top;
Width = gp->OriginalWidth;
Height = gp->OriginalHeight;
fINI.WriteKey(gp->sSettings.SectionsINI.SectWindow, "WidthWindow", rcClient.right - rcClient.left);
fINI.WriteKey(gp->sSettings.SectionsINI.SectWindow, "HeightWindow", rcClient.bottom - rcClient.top);
}
//какойто код
//esli ispol'zuetsya opciya zapominat' razmer okna
//tut vosstanovim stariy razmer okna listera
if ((!QuickView) && (SaveWindowSize))
{
//vosstanovim razmeri
::SetWindowPos(hParentWnd, HWND_TOP,
LeftPos, TopPos, Width, Height, SWP_DRAWFRAME);
}
//какойто код
}
ВОССТАНОВЛЕНИЕ РАЗМЕРОВ
HWND __stdcall ListLoad(HWND ParentWin,char* FileToLoad,int ShowFlags)
{
//какойто код
//dlya zapuska cherez F3 vozmojno nado ustanovit' razmer
if ((!gp->TypeQuickView) &&
(gp->sSettings.sSettingsWindow.SaveWindowSize))
{
//sohranim razmeri (чтобы восстановить после закрытия плагина, может нажали 4 и будет открыт другой плагин)
::GetWindowRect(ParentWin, &rcClient);
gp->OriginalWidth = rcClient.right - rcClient.left;
gp->OriginalHeight = rcClient.bottom - rcClient.top;
//proverim nashi razmeri
if (!gp->sSettings.sSettingsWindow.WidthWindow)
gp->sSettings.sSettingsWindow.WidthWindow = gp->OriginalWidth;
if (!gp->sSettings.sSettingsWindow.HeightWindow)
gp->sSettings.sSettingsWindow.HeightWindow = gp->OriginalHeight;
//ustanovim novie razmeri
::SetWindowPos(ParentWin, HWND_TOP,
rcClient.left, rcClient.top,
gp->sSettings.sSettingsWindow.WidthWindow,
gp->sSettings.sSettingsWindow.HeightWindow,
SWP_DRAWFRAME);
}
//какойто код
}
пример этой работы можешь увидеть в листер плагине ArchView
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
В дополнение:
Если листеру сказать чтобы он сделал свое состояние максимизированным вместо запомненного нормального или наоборот, то он это ни в какую делать не хочет. Если вставить этот код в событие OnShow формы. Но если положить таймер и поставить ему Интервал 0.5 сек (не меньше) и вкинуть код в событие OnTimer (тут же Таймер и запрещаем), то все будет ОК (ну или почти ОК). Правда, если у юзверя выставлена анимация при сворачивании-разворачивании окон, то возможно будет немного напрягать. Но зато для своего плага можно сделать настройки независимые от настроек Листера.
Та же ситуация и с изменением заколовка окна. Борется там же.
Если листеру сказать чтобы он сделал свое состояние максимизированным вместо запомненного нормального или наоборот, то он это ни в какую делать не хочет. Если вставить этот код в событие OnShow формы. Но если положить таймер и поставить ему Интервал 0.5 сек (не меньше) и вкинуть код в событие OnTimer (тут же Таймер и запрещаем), то все будет ОК (ну или почти ОК). Правда, если у юзверя выставлена анимация при сворачивании-разворачивании окон, то возможно будет немного напрягать. Но зато для своего плага можно сделать настройки независимые от настроек Листера.
Та же ситуация и с изменением заколовка окна. Борется там же.
Как получить Fullscreen режим?
Пытался
и
В первом случае мешает заголовок окна листера и рамка.Причем заголовок хоть за верхний край экрана можно увести(да и то вопрос как это будет выглядеть при включенных стилях XP), а вот рамка-никуда.
А во втором - отваливаются все хоткеи.
Пытался
Код: Выделить всё
SetWindowLong(GetParent(ListWin), GWL_EXSTYLE, GetWindowLong(ListWin, GWL_EXSTYLE) | WS_EX_TOPMOST);
SetWindowPos(GetParent(ListWin), HWND_TOPMOST,0,0,XScreenResolution,YScreenResolution,SWP_SHOWWINDOW);
Код: Выделить всё
SetParent(ListWin,GetDesktopWindow());А во втором - отваливаются все хоткеи.
Вообще не рисуется.VadiMGP писал(а):А что, оно совсем не рисуется или как-то покорежено?
Вообще-то отрисовка меню - это системная функция, Листер тут как бы не при делах.
вхожу в полноэкранный
Код: Выделить всё
SetWindowLong(GetParent(ListWin), GWL_STYLE, GetWindowLong(ListWin, GWL_STYLE) ^ WS_BORDER ^ WS_CAPTION );
SetWindowLong(GetParent(ListWin), GWL_EXSTYLE, GetWindowLong(ListWin, GWL_EXSTYLE) ^ WS_EX_TOPMOST );
SetWindowPos(GetParent(ListWin), HWND_TOPMOST,0,0,1280,1024,SWP_SHOWWINDOW);Код: Выделить всё
SetWindowLong(GetParent(ListWin), GWL_STYLE, GetWindowLong(ListWin, GWL_STYLE) | WS_BORDER | WS_CAPTION );
SetWindowLong(GetParent(ListWin), GWL_EXSTYLE, GetWindowLong(ListWin, GWL_EXSTYLE) ^ WS_EX_TOPMOST );
SetWindowPos(GetParent(ListWin), HWND_TOP ,30,30,1200,924,SWP_SHOWWINDOW);
И бордер кстати все еще заметен. Может быть я xorю неправомерно?