Стили формы, помогите разобраться

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
AdiSan
Сообщения: 3
Зарегистрирован: 30 дек 2007, 22:30

Короче использую такой код для создания окна (окно мне нужно плоское, без заголовка):
wnd = CreateWindowEx(&h00000100, WND_CLASS_NAME0, "window", &h14000000, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, null, null, instance, null)
В этой функции даю окну стиль = &h14000000 - стиль плоской формы.
Но почемуто плоской она не получается. Ну я ниже делаю так:
SetWindowLong(wnd, GWL_STYLE, &h14000000)
То есть даю опять уже созаднному окну тот же стиль: &h14000000 - все получилось плоская форма.
Скажите что я не так делаю в функции CreateWindowEx???????
И еще использую вначале CreateWindowEx, а потом SetWindowLong - заметно как форма меняет свою "форму", т.е. появляется с заголовком, и тут же он исчезает. Как этого избежать.
Помогите кто чем может. Пишу я это на FreeBasic, но перевариваю и С/С++, Дельфей думаю тож переварю(тока на АПИ). Спасибо!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А как класс окна регистришь, выложи сюда кусок кода.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
AdiSan
Сообщения: 3
Зарегистрирован: 30 дек 2007, 22:30

instance = GetModuleHandle(null)
InitCommonControls
register_classes
h_font = CreateFont(-13, 0, 0, 0, FW_NORMAL, 0, _
0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, _
DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, "Times New Roman")
create_wnd0
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Меня интересует имплементация register_classes.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

AdiSan писал(а):И еще использую вначале CreateWindowEx, а потом SetWindowLong - заметно как форма меняет свою "форму", т.е. появляется с заголовком, и тут же он исчезает. Как этого избежать?
Ты задаешь стиль окна (4-й параметр функции) как
14000000 = WS_VISIBLE | WS_CLIPSIBLINGS

То есть, CreateWindowEx сразу создает окно видимым.
Умери этот стиль, тогда окно создастся невидимым, сделай все необходимые изменения, и лишь после этого "покажи" окно (вызов ShowWindow (wnd, SW_SHOW) ; или, в твоей "нотации": ShowWindow (wnd, 5) :) )
AdiSan
Сообщения: 3
Зарегистрирован: 30 дек 2007, 22:30

Romeo писал(а):Меня интересует имплементация register_classes.
А при чем тут это, ну вот:
sub register_classes
dim wc as WNDCLASS

with wc
.cbClsExtra = 0
.cbWndExtra = 0
.hbrBackground = cast(hbrush, COLOR_3DFACE + 1)
.hCursor = LoadCursor(null, byval IDC_ARROW)
.hIcon = LoadIcon(null, byval IDI_APPLICATION)
.hInstance = instance
.lpszMenuName = null
.style = CS_PARENTDC or CS_DBLCLKS
end with

wc.lpfnWndProc = @wnd_proc0
wc.lpszClassName = strptr(WND_CLASS_NAME0)

RegisterClass @wc
end sub

BBB писал(а):Ты задаешь стиль окна (4-й параметр функции) как
14000000 = WS_VISIBLE | WS_CLIPSIBLINGS
То есть, CreateWindowEx сразу создает окно видимым.
Умери этот стиль, тогда окно создастся невидимым, сделай все необходимые изменения, и лишь после этого "покажи" окно (вызов ShowWindow (wnd, SW_SHOW) ; или, в твоей "нотации": ShowWindow (wnd, 5) :) )
Вообщем я разобрался с этим, чтобы окно было плоским надо было добавить к моим
&h14000000 WS_POPUP и убрать WS_VISIBLE и получилось &h84000000
Ответить