1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем muaddib1981, 10 янв 2008.

  1. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    требуется скрыть заголовок дочернего окна, просто 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, если его убрать то ничего не работает, чем его заменить в С++ не знаю.
     
  2. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Рискну предположить, что так:
    Код:
    void TMDIChild::CreateParams(TCreateParams *Params)
    {
    TForm::CreateParams(Params);
    Params->Style ^= WS_CAPTION;
    };
    Для: muaddib
    Вот еще для тебя ссылочку нашел
     
  3. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    проверил, не работает
     
  4. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Не работает или не компилируется?
     
  5. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    компилируется но эффекта никакого
     
  6. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    А так?
    Код:
    Params->Style &= ~WS_CAPTION;
     
  7. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    тоже, может быть дело не только в этом в чем-то еще?
     
  8. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    <!--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]
    Я слишком давно использовал Билдер, чтобы ответить на этот вопрос.
     
  9. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    появляются ошибки:

    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'
     
  10. European

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

    gamecreator Гость

    Репутация:
    0
    попробуй флаг WS_POPUP
     
  12. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    использую Borland Builder C++ 6.0

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

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    помучившись, получилось итак код должен быть следующий:

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

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    Код:
    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 была одна ошибка.
     
  15. muaddib1981

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    Этот код тоже не работает:

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

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

    muaddib1981 Member

    Репутация:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    странно, очень странно
     
Загрузка...

Поделиться этой страницей