CW_USEDEFAULT, узнать координаты формы до загрузки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

CW_USEDEFAULT, узнать координаты формы до загрузки

Сообщение EUGY » 18.11.2007 (Вс) 0:14

Вот, казалось бы:
Form1.Show ' StartUpPosition =3 (Windows default)
Предполагаю, что при загрузке формы идет вызов CreateWindowEx
c параметром CW_USEDEFAULT.
Вопрос, как узнать координаты окна, которое может быть потенциально загружено. Иначе: какой механизм использует операционка, чтобы подставить реальные координаты вместо CW_USEDEFAULT.

Decimal
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.11.2007 (Пн) 14:39

Сообщение Decimal » 18.11.2007 (Вс) 16:35

Я понял так:

Тебе нужно: узнать координаты окна до его отображения на экране монитора, выяснить выполнение некоторого условия, и если текущии координаты окна не соответствуют конкретным условиям, то выставить необходимые значения координат и отобразить окно в нужном месте.

Если так, то думаю подойдет такой вариант:

Предположим, у нас есть форма Form1, на которой расположена кнопка Command1. При нажатии на кнопку Command1 мы отображаем форму Form2, в случае необходимости, задав ей нужные координаты.

Модуль формы Form1:

Option Explicit

Private Sub Command1_Click()

Load Form2

With Form2
If .Left <> 1000 And .Top <> 1000 Then
.Move 1000, 1000
End If

.Show
End With

End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 18.11.2007 (Вс) 17:57

Тебе нужно: узнать координаты окна до его отображения на экране монитора, выяснить выполнение некоторого условия, и если текущии координаты окна не соответствуют конкретным условиям, то выставить необходимые значения координат и отобразить окно в нужном месте.

С чего бы это?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 18.11.2007 (Вс) 18:25

Decimal, к сожалению нет.
Проверить случайные координаты одного окна, загрузив другое - не мой вариант. Задача: вообще не загружать окна, но узнать, какие координаты подставит windows будущему окну.
Сейчас копаю в направлении STARTUPINFO, но похоже - тоже не то.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.11.2007 (Вс) 18:31

А зачем всё это, если не секрет?
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 18.11.2007 (Вс) 18:48

Я написал свою оконную библиотеку по типу MFC (меня устраивает).
Но некоторые вопросы остались, этот из разряда теоретических.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 19.11.2007 (Пн) 11:44

EUGY
Если следовать логике Билла :) то можно предположить, что в ядре винды заложены заранее предустановленные значения появляющихся окон и перебираются по очереди.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Decimal
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.11.2007 (Пн) 14:39

Сообщение Decimal » 19.11.2007 (Пн) 17:20

Я вот тут на досуге "репу почесал" по этому поводу. Может быть я не прав, но по логике получается такая картина:

Передавая в качестве параметров x и y значение константы CW_USEDEFAULT в функцию CreateWindowEx, фактически, мы "оповещаем" функцию о том, что координаты для будущего окна должны генерироваться "по ее усматрению". Можно предположить, что механизм выбора потенциальных координат реализован непосредственно в теле самой функции. Тогда получается при обработке "сообщения" CW_USEDEFAULT функция динамически вычисляет наиболее благоприятный сектор для размещения окна. А результат вычислений зависит от размера видимой области экрана, количества и Z-порядка окон, загруженных в память, и т.д. и т.п.

Стало быть структуры типа STARTUPINFO здесь ни при чем. Скорее всего, нужно искать алгоритм генерации координат в зависимости от текущего состояния "оконной среды" системы.

P.S. Может быть, я не прав. Тогда поправте.
If you wanna be OK
Kiss your woman every day.
If you wanna be expert
Write your code in VB.NET


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 56

    TopList