Границы edit box
От: Abyss_01  
Дата: 16.12.08 23:18
Оценка:
Создаю edit box.
    hText = CreateWindow("EDIT", "", WS_VISIBLE | WS_CHILD | WS_VSCROLL| ES_WANTRETURN | ES_MULTILINE | WS_BORDER,
                            140, 80, 350, 230, hWnd, NULL, hInstance, NULL);

Стиль WS_BORDER обводит вокрут контрола edit box только тонкую чёрную линию.
Нигде не раскопал, как сделать границы как в стандартном edit box? Или с помощью чего можно задать стиль границ?
Re: Границы edit box
От: kero Россия  
Дата: 16.12.08 23:31
Оценка:
1)
>Стиль WS_BORDER обводит вокрут контрола edit box только тонкую чёрную линию.

Ага, и этим Edit отличается от Static или Button

2)
WS_THICKFRAME, WS_DLGFRAME, WS_EX_DLGMODALFRAME, WS_EX_CLIENTEDGE, WS_EX_STATICEDGE, WS_EX_WINDOWEDGE
(WS_DLGFRAME+WS_BORDER=WS_CAPTION)
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: Границы edit box
От: Abyss_01  
Дата: 17.12.08 20:36
Оценка:
Здравствуйте, kero, Вы писали:

K>2)

K>WS_THICKFRAME, WS_DLGFRAME, WS_EX_DLGMODALFRAME, WS_EX_CLIENTEDGE, WS_EX_STATICEDGE, WS_EX_WINDOWEDGE
K>(WS_DLGFRAME+WS_BORDER=WS_CAPTION)
После экспериментов выяснилось следующее:

hAddress = CreateWindowA("EDIT", "\\\\.\\pipe\\MyPipe", WS_VISIBLE | WS_CHILD // | *,
                            140, 33, 350, 25, hWnd, NULL, hInstance, NULL);

Я пробовал последовательно применить каждый стиль.

1. WS_THICKFRAME — создаёт неприятную глазу толстую рамку. Позволяет менять размеры с помощью мыши.

2. WS_DLGFRAME — границы не так убоги, как в предыдущем примере, но всё равно слишком толсты. (Как бэ типа 3D-границы)

3. WS_EX_DLGMODALFRAME — граница не изменилась, изменилось только то, что текст посередине.

4. WS_EX_CLIENTEDGE — нет заметных изменений.

5. WS_EX_STATICEDGE — нет заметных изменений.

6. WS_EX_WINDOWEDGE — нет заметных изменений.

7. WS_CAPTION — за этот edit box приложению может и не стыдно, но нельзя редактировать текст.
Отображается без глюков если только в stdafx.cpp компоновщику с помощью #pragma comment указать архитектуру процессора x86 (Vista/MVS 2008).
#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64

Итого, нет ничего похожего на границы стандартного edit box. Может есть способы создания своих стилей? Или может быть надо комбинировать стили или задавать ещё какие-то параметры, чтобы получить что-то приличное?
По всем остальным элементам управления подгонка к стандартным контролам не вызвала проблем, но вот граница edit box...
Re[3]: Границы edit box
От: kero Россия  
Дата: 17.12.08 21:26
Оценка:
>4. WS_EX_CLIENTEDGE — нет заметных изменений.
>5. WS_EX_STATICEDGE — нет заметных изменений.

Вы что, задавали WS_EX_-стили там же, где и WS_ ???

Вы проделали сизифов труд, не для того были указаны стили, ответственные за границы...

WS_EX_ => CreateWindowEx(WS_EX_*, etc)

Почитайте в MSDN о стилях окна, ну, хотя бы в статье о CreateWindowEx...
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: Границы edit box
От: Abyss_01  
Дата: 17.12.08 22:21
Оценка:
Здравствуйте, kero, Вы писали:

>>4. WS_EX_CLIENTEDGE — нет заметных изменений.

>>5. WS_EX_STATICEDGE — нет заметных изменений.

K>Вы что, задавали WS_EX_-стили там же, где и WS_ ???


K>Вы проделали сизифов труд, не для того были указаны стили, ответственные за границы...


K>WS_EX_ => CreateWindowEx(WS_EX_*, etc)


K>Почитайте в MSDN о стилях окна, ну, хотя бы в статье о CreateWindowEx...


Ок, понятно.
Но всё же, можно ли как-нибудь узнать какие стили применены к стандартным классам окон?
Re[5]: Границы edit box
От: kero Россия  
Дата: 17.12.08 22:49
Оценка:
>Но всё же, можно ли как-нибудь узнать какие стили применены к стандартным классам окон?

Оконных спаев тьма, первым вам всегда назовут Spy++

Но можете и сами соорудить на скорую руку:
WindowFromPoint + GetWindowLong (GWL_STYLE для WS_ / GWL_EXSTYLE для WS_EX_),
и полученные суммы стилей разлагаете на константы WS_*/WS_EX_*.

А вообще "стандартно" для Edit — WS_EX_CLIENTEDGE, который таки вносит "заметные изменения"
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: Границы edit box
От: Alexander G Украина  
Дата: 17.12.08 23:09
Оценка: 4 (1)
Здравствуйте, Abyss_01, Вы писали:

A_>Создаю edit box.

A_>
A_>    hText = CreateWindow("EDIT", "", WS_VISIBLE | WS_CHILD | WS_VSCROLL| ES_WANTRETURN | ES_MULTILINE | WS_BORDER,
A_>                            140, 80, 350, 230, hWnd, NULL, hInstance, NULL);
A_>

A_>Стиль WS_BORDER обводит вокрут контрола edit box только тонкую чёрную линию.
A_>Нигде не раскопал, как сделать границы как в стандартном edit box? Или с помощью чего можно задать стиль границ?

Если речь о виде EDIT с темами, то надо WS_EX_CLIENTEDGE, и, кроме того, сабклассить и при WM_NCPAINT вызывать не старую оконную процедуру, а DefWindowProc.
Русский военный корабль идёт ко дну!
Re[2]: Границы edit box
От: kero Россия  
Дата: 18.12.08 00:11
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG> и, кроме того, сабклассить и при WM_NCPAINT вызывать не старую оконную процедуру, а DefWindowProc.


Не перегружайте человека
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[3]: Границы edit box
От: Alexander G Украина  
Дата: 18.12.08 07:02
Оценка:
Здравствуйте, kero, Вы писали:

AG>> и, кроме того, сабклассить и при WM_NCPAINT вызывать не старую оконную процедуру, а DefWindowProc.


K>Не перегружайте человека


А тут я проще вариантов не знаю, если с темами.
Если просто WS_EX_CLIENTEDGE, то получается верхний вариант, с сабклассингом внизу
Русский военный корабль идёт ко дну!
Re[4]: Границы edit box
От: kero Россия  
Дата: 18.12.08 07:49
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Если просто WS_EX_CLIENTEDGE, то получается верхний вариант, с сабклассингом внизу


Все так, только тогда придется о сабклассинге, а ведь тут еще с оконными стилями...

P.S. Мне-то поначалу померещилось, что ТС заговорил о дурацкой особенности Edit-а (отличающей его от Static и Button):
если границу Edit-а задать как WS_BORDER, то результататом CreateWindowEx будет Edit с — всего лишь — рисованной рамкой, но без WS_BORDER (и без HTBORDER).
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: Границы edit box
От: kero Россия  
Дата: 18.12.08 08:14
Оценка:
Впрочем —

AG>если с темами.

AG>Если просто WS_EX_CLIENTEDGE, то получается верхний вариант

— как это у вас получилась плоская WS_BORDER-подобная рамка ?

У меня (на XP) так обычный утопленный WS_EX_CLIENTEDGE
.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: Границы edit box
От: Alexander G Украина  
Дата: 18.12.08 08:20
Оценка:
Здравствуйте, kero, Вы писали:

K>- как это у вас получилась плоская WS_BORDER-подобная рамка ?


K>У меня (на XP) так обычный утопленный WS_EX_CLIENTEDGE


1. Темы включить, тема не классическая
2. Настроить манифест, чтобы использовались common controls с поддержкой тем.
Русский военный корабль идёт ко дну!
Re[7]: Границы edit box
От: kero Россия  
Дата: 18.12.08 08:28
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG> манифест


Ага, его не было
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: Границы edit box
От: Abyss_01  
Дата: 19.12.08 08:24
Оценка:
Здравствуйте, Abyss_01, Вы писали:

Спасибо всем за разъяснения, пока всё ясно.
Re[4]: Границы edit box
От: kero Россия  
Дата: 04.05.09 15:19
Оценка: 6 (1)
Здравствуйте, Alexander G, Вы писали:

AG>А тут я проще вариантов не знаю, если с темами.

AG>Если просто WS_EX_CLIENTEDGE, то получается верхний вариант, с сабклассингом внизу
AG>

Ну, а как вам такой, без сабклассинга:
http://files.rsdn.ru/42164/EditEdge.zip



(это мой вчерашний ответ на другом форуме, да вспомнился сей давний топик
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: EDIT + WS_EX_CLIENTEDGE + Themes
От: kero Россия  
Дата: 05.05.09 17:47
Оценка:
Забыл выделить ключевое место кода:
 SetThemeAppProperties (0)
 SendMessage (hWnd_Edit,WM_THEMECHANGED,0,0)
 SetThemeAppProperties (STAP_ALLOW_NONCLIENT or STAP_ALLOW_CONTROLS or STAP_ALLOW_WEBCONTENT)
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: EDIT + WS_EX_CLIENTEDGE + Themes
От: Alexander G Украина  
Дата: 05.05.09 18:29
Оценка:
Здравствуйте, kero, Вы писали:

K>Забыл выделить ключевое место кода:

K>
K> SetThemeAppProperties (0)
K> SendMessage (hWnd_Edit,WM_THEMECHANGED,0,0)
K> SetThemeAppProperties (STAP_ALLOW_NONCLIENT or STAP_ALLOW_CONTROLS or STAP_ALLOW_WEBCONTENT)
K>


Посмотрел, интересно, но мне всё равно больше с сабклассингом нравится — он как-то понятнее.
Русский военный корабль идёт ко дну!
Re[7]: EDIT + WS_EX_CLIENTEDGE + Themes
От: kero Россия  
Дата: 06.05.09 02:52
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG> Посмотрел, интересно, но мне всё равно больше с сабклассингом нравится — он как-то понятнее.


Сабклассинг тоже ничего, спасибо
Но суть обоих решений одна и та же: "локальный отказ" от халтурного XP стиля,
вдобавок к другим своим несуразностям еще и забывшего про WS_EX_CLIENTEDGE у Edit-а.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.