как скрыть заголовок дочернего окна

  • Автор темы muaddib1981
  • Дата начала
M

muaddib1981

требуется скрыть заголовок дочернего окна, просто Child->BorderStyle=bsNone; не помогает.
нашел как делается под Делфи:
Код:
type
TForm2 = class(TForm)
{ другой код выше }
procedure CreateParams(var Params: TCreateParams); override;
{ другой код ниже }
end;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style and (not WS_CAPTION);
end;

попробовал переписать под Си так:

class TMDIChild : public TForm
{
// другой код выше	
private:
void CreateParams(TCreateParams *Params);
// другой код ниже 
};

void TMDIChild::CreateParams(TCreateParams *Params)
{
inherited CreateParams(Params);
Params->Style = Params->Style& (!WS_CAPTION);
};

ругается на слово inherited, если его убрать то ничего не работает, чем его заменить в С++ не знаю.
 
E

European

Рискну предположить, что так:
Код:
void TMDIChild::CreateParams(TCreateParams *Params)
{
TForm::CreateParams(Params);
Params->Style ^= WS_CAPTION;
};

Для: muaddib
Вот еще для тебя нашел
 
E

European

Не работает или не компилируется?
 
M

muaddib1981

компилируется но эффекта никакого
 
M

muaddib1981

тоже, может быть дело не только в этом в чем-то еще?
 
E

European

<!--QuoteBegin-muaddib+10:01:2008, 13:41 -->
<span class="vbquote">(muaddib @ 10:01:2008, 13:41 )</span><!--QuoteEBegin-->тоже, может быть дело не только в этом в чем-то еще?
[snapback]92890" rel="nofollow" target="_blank[/snapback]​
[/quote]
Я слишком давно использовал Билдер, чтобы ответить на этот вопрос.
 
M

muaddib1981

появляются ошибки:

Build
[C++ Error] ChildWin.cpp(37): E2356 Type mismatch in redeclaration of '_fastcall TMDIChild::CreateParams(TCreateParams &)'
[C++ Error] ChildWin.h(26): E2344 Earlier declaration of '_fastcall TMDIChild::CreateParams(TCreateParams &)'

если без __fastcall, то ошибка одна и другая:

Build
[C++ Error] ChildWin.h(26): E2113 Virtual function 'TMDIChild::CreateParams(TCreateParams &)' conflicts with base class 'TCustomForm'
 
E

European

Для: sax_ol
А разница?
Для: muaddib
Попробуй вместо WS_CAPTION поставить WS_VISIBLE. В этом случае окно должно стать не видимым.
Насколько я помню, в TCreateParams есть HWND окна, тогда стиль можно изменить при помощи АПИ-шной функции SetWindowLong
 
M

muaddib1981

использую Borland Builder C++ 6.0

ни WS_VISIBLE, ни WS_POPUP никак себя не проявили, ничего не изменилось, значит дело не в флагах
 
M

muaddib1981

помучившись, получилось итак код должен быть следующий:

Код:
class TMDIChild : public TForm
{
__published:
//другой код выше
void __fastcall FormCreate(TObject *Sender);
private:

public:
virtual void __fastcall CreateParams(TCreateParams &Params);		
//другой код ниже
};

void __fastcall TMDIChild::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style ^= WS_CAPTION;
};

void __fastcall TMDIChild::FormCreate(TObject *Sender)
{
ClientHeight=100;
ClientWidth=100;
BorderStyle=bsNone;
}

дочернее окно создается без заголовка, но его можно растягивать, я думал bsNone уже включает себя запрет на растягивание окна? Как это можно запретить?
 
M

muaddib1981

Код:
void __fastcall TMDIChild::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style ^= WS_CAPTION;
Params.Style ^= WS_BORDER;
Params.Style ^= WS_POPUP;
};

Этот код не работает. При заходе в функцию вылетает с ошибкой:

Project mdiapp.exe raised exception class EOSError with message 'System Error. Code: 1411. Класс не существует'. Proccess stopped. Use Step or Run to continue.

Если убрать WS_POPUP то работает, но окно все равно растягивается. Может не те флажки, а вообще какие существуют флажки, где можно о них почитать, может ссылку дадите.

по поводу предыдущих ошибок, не там ставил __fastcall и в аргументе ставил указатель, с указателем без __fastcall была одна ошибка.
 
M

muaddib1981

Этот код тоже не работает:

Код:
void __fastcall TMDIChild::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style ^= WS_CAPTION;
Params.Style ^= WS_BORDER;
Params.Style |= WS_POPUP;
};

нашел в справке следующее

WS_CHILD - Создает дочернее окно. Этот стиль не может использоваться со стилем WS_POPUP.

WS_POPUP - Создает выскакивающее окно. Этот стиль не может использоваться со стилем WS_CHILD.

Добавил следующее

Код:
void __fastcall TMDIChild::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style ^= WS_CAPTION;
Params.Style ^= WS_BORDER;
Params.Style ^= WS_THICKFRAME;
};


все заработало, всем спасибо, кто старался мне помочь.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!