Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Где WS_BORDER ? / 5 сообщений из 5, страница 1 из 1
16.04.2004, 13:14
    #32484183
PavelT100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где WS_BORDER ?
Создаю окно:

Код: plaintext
1.
2.
hWindow = CreateWindowEx(WS_EX_NOPARENTNOTIFY,  "edit" ,  0 , 
          WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_UPPERCASE|ES_AUTOHSCROLL, ....);

затем, сразу же смотрю:
Код: plaintext
DWORD dwStyle = GetWindowLong(hWindow, GWL_STYLE);

так нет в dwStyle стиля WS_BORDER - все остальные есть. Конечно, CreateWindowEx порождает различные сообщения, и при их обработке теоретически можно снять этот стиль. Но я смотрел внимательно код - и не заметил снятия. Может быть я плохо смотрел, но я в WM_PAINT также пишу
Код: plaintext
DWORD dwStyle = GetWindowLong(hWindow, GWL_STYLE);
и там тоже НИКОГДА не было этого стиля. Тем не менее на экране отрисовывается однопиксельная рамка.
смотрю
Код: plaintext
1.
GetClientRect(hWindow, &r);
       GetWindowRect(hWindow, &rw);
r - рамку не включает, а rw - это область с рамкой - все вроде правильно.

И еще, если я добавляю стиль WS_EX_CLIENTEDGE, то все становится на свои места. Стиль WS_BORDER нигде не пропадает, и конечно, отрисовывается трехмерная рамка. Вопрос: почему я не вижу стиля WS_BORDER, а рамка отрисовывается ?
...
Рейтинг: 0 / 0
19.04.2004, 07:46
    #32485738
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где WS_BORDER ?
хм...
ну может быть так:

за трёхмерную рамку рамку отвечает тока WS_EX_CLIENTEDGE.
По умолчанию, едит 3-х мерный и выставит ему простой бордер нельзя. Его, видимо, CreateWindowEx снимает, так как не хочет рисовать 2 бордера сразу, один на клиентедж, второй на бордер (скорее всего они просто занимают одно и тоже место в контроле).
Не факт, что это так, но возможно.

Чтобы получить WS_BORDER надо создать едит через CreateWindow, тогда всё будет ок.
...
Рейтинг: 0 / 0
19.04.2004, 10:51
    #32485943
PavelT100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где WS_BORDER ?
авторза трёхмерную рамку рамку отвечает тока WS_EX_CLIENTEDGE.
Ну с этим я согласен.
авторПо умолчанию, едит 3-х мерный и выставит ему простой бордер нельзя. - а эту фразу я не понял. По умолчанию, если флага WS_BORDER не указан, то контрол отрисовывается вообще без рамки, а если
WS_BORDER стоит, то с рамкой. Ну совершенно не понятно, как Windows различает эти два варианта, если не хранит WS_BORDER.
...
Рейтинг: 0 / 0
19.04.2004, 12:00
    #32486088
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где WS_BORDER ?
да, я там немного нагнал.

по умолчанию трёхмерный, если он в шаблоне ресурса диалога

если руками - то 2-хмерный, даже через CreateWindowEx

Вообще интересно, если WS_BORDER поставить, он есть, если его не поставить, то его нет. А вот если его потом пытаться поменять, то стиль меняется(GetStyle) а отрисовка нет. И в ту и в другую сторону.

WS_BORDER -> ~WS_BORDER
и
~WS_BORDER -> WS_BORDER

и с WS_EX_CLIENTEDGE та же фигня... стиль меняется, а бордер или отсутствие бордера остаётся.

с невидимостью флага - скорее всего какая-то защита от чего-то. Проверяется это флаг тока при создании объекта и потом признак какого-нить бордера держится внутри.
И эта фигня с Win32API так же как с MFC (правда, под Win32API я тока WS_EX_CLIENTEDGE проверял)
...
Рейтинг: 0 / 0
20.04.2004, 15:19
    #32487985
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где WS_BORDER ?
Сёдня узнал вообще интересные факты о Едитах (пора топик отдельный заводить )

Оказывается. Едит можно смело параллельно использовать из двух приложений. (у меня есть прикладуха, которая по хэндлам рулит окнами всячески)
Так вот.

Запускаем прогу с едитом(MFC-шную, например). Набираем чё-нить в едите, например "ууу". Хорошо. Достаём спай, ищем едит, видим, в окне - "". Ладно, берём мою прогу, говорим ей прописать в этот едит например "еее". Прописали. Рефрешим спай. Смотрим спаем едит - "еее"! Вызываем в MFC-проге DDX какой-нить. Получаем "ууу"!

И это не только в MFC. Это и в просто 32Апях.
Причём и нотивикации об апдейтах и ченджах посылал родителю - бесполезно. Как "ууу" было, так и осталось...

У кого какие мысли?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Где WS_BORDER ? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]