Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 3D рамка CView и клиентской области 
V
    Опции темы
Hrundel
Дата 29.8.2012, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 5.8.2012

Репутация: нет
Всего: нет



Всем привет.

Есть ли возможность выключить 3D рамку для CView и клиентской области?
Если не выключить, то, хотя бы, превратить в сплошную тонкую линию. 

user posted image

В литературе ответа нет. И даже в нете тоже нет.
Подозреваю, что нужно просто в Creat какой-то стиль добавить, (уже много перепробовал) но пока не получается.

Всем спасибо.

Это сообщение отредактировал(а) Hrundel - 30.8.2012, 10:19
PM MAIL   Вверх
Earnest
Дата 30.8.2012, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Обрати внимание на вот какой код (MFC)
Код

BOOL CView::PreCreateWindow(CREATESTRUCT & cs)
{
    ASSERT(cs.style & WS_CHILD);

    if (cs.lpszClass == NULL)
    {
        VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG));
        cs.lpszClass = _afxWndFrameOrView;  // COLOR_WINDOW background
    }

    if (cs.style & WS_BORDER)
    {
        cs.dwExStyle |= WS_EX_CLIENTEDGE;
        cs.style &= ~WS_BORDER;
    }

    return TRUE;
}

Т.е. простой BORDER MFC заменяет на CLIENTEDGE. Так что для начала нужно убрать BORDER при создании. Но может и не помочь: там есть код, который уже фрейму принудительно приписывает CLIENTEDGE, а потом его убирает, если он есть у вида. Где-то в районе CFrameWnd. 
Так что нужно найти правильное место, чтобы все это дело отшибить. Возможно, OnCreate - после того, как MFC все свои манипуляции выполнит. Только при отшибании стиля не забудь передать флаг SWP_FRAMECHANGED. Ну и Спай тебе поможет посмотреть, у кого какой стиль, т.к. рамка может быть как у фрейма, так и у вида.


--------------------
...
PM   Вверх
Hrundel
Дата 30.8.2012, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 5.8.2012

Репутация: нет
Всего: нет



О великая гуру, Earnest, позволь преклонить колени в благодарности и глубоком респекте к твоим познаниям. smile

Короче, написал так:

Код

BOOL CSisible_viewView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    LOGBRUSH lgbr;
    lgbr.lbColor = RGB(158,158,158);
    lgbr.lbHatch =0;
    lgbr.lbStyle = BS_SOLID;
    HBRUSH gray_brush=CreateBrushIndirect(&lgbr);

    ASSERT(cs.style & WS_CHILD);
    if (cs.lpszClass == NULL)
    {
        VERIFY( AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW  ,0, gray_brush));
        cs.lpszClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW  ,0, gray_brush);  // COLOR_WINDOW background
    }
    if (cs.style & WS_BORDER)
    {
        cs.dwExStyle |=  WS_EX_TRANSPARENT;
        cs.style &= ~BF_FLAT; 
    }
    
    return TRUE;
}

int CSisible_viewView::OnCreate(LPCREATESTRUCT lpcs)
{
    this->Create(NULL, NULL, WS_EX_TRANSPARENT|BF_FLAT|SWP_FRAMECHANGED ,CRect(100, 100, 250, 250), this, AFX_IDW_PANE_FIRST, NULL);

    return 0;
}



и получил вот это:

user posted image

Красиво!!!

Earnest, не устаю тебя благодарить! smile
PM MAIL   Вверх
Earnest
Дата 30.8.2012, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



 smile 
В параметрах ф-и Create Добавлять флаг SWP_FRAMECHANGED не надо, это даже опасно - вдруг он с каким-то битом совпадет, а это не стиль.
Я имела в виду, что в C...View::OnCreate после вызова базового метода проверить флаги, а потом отшибить ненужные через ModifyStyle или ModifyStyleEx, вот туда и нужно FRAMECHANGED последним параметром, иначе рамка не пересчитается.
А если тебе хватило Create с нужными стилями + PreCreate, то и слава богу, убери нафиг SWP_FRAMECHANGED.


--------------------
...
PM   Вверх
Hrundel
Дата 30.8.2012, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 5.8.2012

Репутация: нет
Всего: нет



Ага, уяснил. Еще раз - спасибо. smile

Это сообщение отредактировал(а) Hrundel - 30.8.2012, 20:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.