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

10.01.2008
8
0
#1
требуется скрыть заголовок дочернего окна, просто 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, если его убрать то ничего не работает, чем его заменить в С++ не знаю.
 
04.09.2006
2 566
3
#2
Рискну предположить, что так:
Код:
void TMDIChild::CreateParams(TCreateParams *Params)
{
TForm::CreateParams(Params);
Params->Style ^= WS_CAPTION;
};
Для: muaddib
Вот еще для тебя ссылочку нашел
 
04.09.2006
2 566
3
#8
<!--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]
Я слишком давно использовал Билдер, чтобы ответить на этот вопрос.
 
10.01.2008
8
0
#9
появляются ошибки:

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'
 
04.09.2006
2 566
3
#10
Для: sax_ol
А разница?
Для: muaddib
Попробуй вместо WS_CAPTION поставить WS_VISIBLE. В этом случае окно должно стать не видимым.
Насколько я помню, в TCreateParams есть HWND окна, тогда стиль можно изменить при помощи АПИ-шной функции SetWindowLong
 
10.01.2008
8
0
#12
использую Borland Builder C++ 6.0

ни WS_VISIBLE, ни WS_POPUP никак себя не проявили, ничего не изменилось, значит дело не в флагах
 
10.01.2008
8
0
#13
помучившись, получилось итак код должен быть следующий:

Код:
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 уже включает себя запрет на растягивание окна? Как это можно запретить?
 
10.01.2008
8
0
#14
Код:
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 была одна ошибка.
 
10.01.2008
8
0
#15
Этот код тоже не работает:

Код:
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;
};

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