Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как скрыть заголовок дочернего окна
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
muaddib
требуется скрыть заголовок дочернего окна, просто 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, если его убрать то ничего не работает, чем его заменить в С++ не знаю.
European
Рискну предположить, что так:
void TMDIChild::CreateParams(TCreateParams *Params)
{
   TForm::CreateParams(Params);
   Params->Style ^= WS_CAPTION;
};


Для: muaddib
Вот еще для тебя ]]>ссылочку]]> нашел
muaddib
проверил, не работает
European
Не работает или не компилируется?
muaddib
компилируется но эффекта никакого
European
А так?
Params->Style &= ~WS_CAPTION;
muaddib
тоже, может быть дело не только в этом в чем-то еще?
European
Цитата(muaddib @ 10:01:2008, 13:41 )
тоже, может быть дело не только в этом в чем-то еще?
*

Я слишком давно использовал Билдер, чтобы ответить на этот вопрос.
sax_ol
а
virtual void __fastcall CreateParams(TCreateParams& Params)
и
Params.Style &= ~WS_CAPTION;
?
muaddib
появляются ошибки:

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'
European
Для: sax_ol
А разница?
Для: muaddib
Попробуй вместо WS_CAPTION поставить WS_VISIBLE. В этом случае окно должно стать не видимым.
Насколько я помню, в TCreateParams есть HWND окна, тогда стиль можно изменить при помощи АПИ-шной функции SetWindowLong
sax_ol
Для: European
А незнаю, но в ссылке из #2 так и есть smile.gif
Ну вообщето она virtual, а вот почему такие ошибки?
А какой Builder ? может что с версиями менялось ... бо ]]>тут]]> тоже похоже, но не virtual, хотя может просто забыли ...

В Delphi 7 проверил - работает.
gamecreator
попробуй флаг WS_POPUP
muaddib
использую Borland Builder C++ 6.0

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

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 уже включает себя запрет на растягивание окна? Как это можно запретить?
sax_ol
добавить WS_POPUP и/или (в смысле убрать) WS_BORDER


PS: а откуда тогда были ошибки #10? чет я не вижу разницы с #9
muaddib
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 была одна ошибка.
sax_ol
Для: muaddib
Про флажки - смотрите справку по CreateWindow.
WS_POPUP вы убрали, а надо добавить.

Цитата(muaddib @ 11:01:2008, 10:57 )
Project mdiapp.exe raised exception class EOSError with message 'System Error. Code: 1411. Класс не существует'. Proccess stopped. Use Step or Run to continue.

Вы опять что-то сами напортачили.
muaddib
Этот код тоже не работает:

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;
};



все заработало, всем спасибо, кто старался мне помочь.
sax_ol
Вот только что проверил в Delphi
procedure TMDIChild.CreateParams(var Paramas: TCreateParams);
begin
  inherited;
  Paramas.Style := Paramas.Style and WS_POPUP;
end;

все работает! huh.gif
muaddib
странно, очень странно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.