Стиль WS_BORDER обводит вокрут контрола edit box только тонкую чёрную линию.
Нигде не раскопал, как сделать границы как в стандартном edit box? Или с помощью чего можно задать стиль границ?
Я пробовал последовательно применить каждый стиль.
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...
Здравствуйте, kero, Вы писали:
>>4. WS_EX_CLIENTEDGE — нет заметных изменений. >>5. WS_EX_STATICEDGE — нет заметных изменений.
K>Вы что, задавали WS_EX_-стили там же, где и WS_ ???
K>Вы проделали сизифов труд, не для того были указаны стили, ответственные за границы...
K>WS_EX_ => CreateWindowEx(WS_EX_*, etc)
K>Почитайте в MSDN о стилях окна, ну, хотя бы в статье о CreateWindowEx...
Ок, понятно.
Но всё же, можно ли как-нибудь узнать какие стили применены к стандартным классам окон?
>Но всё же, можно ли как-нибудь узнать какие стили применены к стандартным классам окон?
Оконных спаев тьма, первым вам всегда назовут Spy++
Но можете и сами соорудить на скорую руку:
WindowFromPoint + GetWindowLong (GWL_STYLE для WS_ / GWL_EXSTYLE для WS_EX_),
и полученные суммы стилей разлагаете на константы WS_*/WS_EX_*.
А вообще "стандартно" для Edit — WS_EX_CLIENTEDGE, который таки вносит "заметные изменения"
A_>Стиль WS_BORDER обводит вокрут контрола edit box только тонкую чёрную линию. A_>Нигде не раскопал, как сделать границы как в стандартном edit box? Или с помощью чего можно задать стиль границ?
Если речь о виде EDIT с темами, то надо WS_EX_CLIENTEDGE, и, кроме того, сабклассить и при WM_NCPAINT вызывать не старую оконную процедуру, а DefWindowProc.
Здравствуйте, kero, Вы писали:
AG>> и, кроме того, сабклассить и при WM_NCPAINT вызывать не старую оконную процедуру, а DefWindowProc.
K>Не перегружайте человека
А тут я проще вариантов не знаю, если с темами.
Если просто WS_EX_CLIENTEDGE, то получается верхний вариант, с сабклассингом внизу
Здравствуйте, Alexander G, Вы писали:
AG>Если просто WS_EX_CLIENTEDGE, то получается верхний вариант, с сабклассингом внизу
Все так, только тогда придется о сабклассинге, а ведь тут еще с оконными стилями...
P.S. Мне-то поначалу померещилось, что ТС заговорил о дурацкой особенности Edit-а (отличающей его от Static и Button):
если границу Edit-а задать как WS_BORDER, то результататом CreateWindowEx будет Edit с — всего лишь — рисованной рамкой, но без WS_BORDER (и без HTBORDER).
Здравствуйте, kero, Вы писали:
K>- как это у вас получилась плоская WS_BORDER-подобная рамка ?
K>У меня (на XP) так обычный утопленный WS_EX_CLIENTEDGE
1. Темы включить, тема не классическая
2. Настроить манифест, чтобы использовались common controls с поддержкой тем.
Здравствуйте, Alexander G, Вы писали:
AG>А тут я проще вариантов не знаю, если с темами. AG>Если просто WS_EX_CLIENTEDGE, то получается верхний вариант, с сабклассингом внизу AG>
SetThemeAppProperties (0)
SendMessage (hWnd_Edit,WM_THEMECHANGED,0,0)
SetThemeAppProperties (STAP_ALLOW_NONCLIENT or STAP_ALLOW_CONTROLS or STAP_ALLOW_WEBCONTENT)
Здравствуйте, Alexander G, Вы писали:
AG> Посмотрел, интересно, но мне всё равно больше с сабклассингом нравится — он как-то понятнее.
Сабклассинг тоже ничего, спасибо
Но суть обоих решений одна и та же: "локальный отказ" от халтурного XP стиля,
вдобавок к другим своим несуразностям еще и забывшего про WS_EX_CLIENTEDGE у Edit-а.