Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Галочка в меню и перенос по словам 
V
    Опции темы
BIV
Дата 1.6.2013, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем доброе время суток!
В одном маленьком куске кода столкнулся с 2мя сложностями:

1) Как делать и убирать перенос по словам?
2) Как выставлять и убирать галочку?

Код

//Перенос по словам

CMenu MainMenu, *SubMenu;
void CnotepadDlg::On32771()
{
    MainMenu.Detach();
    MainMenu.LoadMenu(IDR_MENU1);
    SubMenu = MainMenu.GetSubMenu(0);

    if(i==FALSE)
    {
        SubMenu->CheckMenuItem(ID_32771, MF_CHECKED);
        edit1.ModifyStyle(0,WS_HSCROLL, SWP_FRAMECHANGED);
//        edit1.ModifyStyle(0,WS_HSCROLL,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
        i=TRUE;
    }
    else
    {
        SubMenu->CheckMenuItem(ID_32771, MF_UNCHECKED);
        edit1.ModifyStyle(WS_HSCROLL,0, SWP_FRAMECHANGED);
//        edit1.ModifyStyle(WS_HSCROLL,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
        i=FALSE;
    }

}


У меня имеется созданный элемент класса CEdit и меню, который имеет подпунктом меню с идентификатором ID_32771 (перенос по словам). Хочу чтобы при нажатии на подменю "Перенос по словам" появилась\убралась галочка на против меню и переносились\не переносились слова которые выходят за рамки элемента Edit.
Где комментарии, это я пробовал различные варианты

Это сообщение отредактировал(а) BIV - 2.6.2013, 01:19
PM MAIL   Вверх
BIV
Дата 4.6.2013, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



С галочкой я разобрался, теперь мне осталось понять как делать и убирать перенос по словам.
Пока вижу только такое решение, это уничтожать и создавать заново объект класса CEdit:

Код

BOOL i=FALSE;
....
    CString str;

    if(i==FALSE)
    {
        edit1.GetWindowText(str);
        i=TRUE;
        CRect cr;
        GetClientRect(cr);
        edit1.DestroyWindow();
        edit1.Create(WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_BORDER | WS_VSCROLL 
                                 | WS_TABSTOP | WS_HSCROLL, CRect(0,0,cr.right,cr.bottom),this,IDC_EDIT1);
        edit1.SetWindowText(str);
    }
    else
    {
        edit1.GetWindowText(str);
        i=FALSE;
        CRect cr;
        GetClientRect(cr);
        edit1.DestroyWindow();
        edit1.Create(WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_BORDER | WS_VSCROLL 
                                   | WS_TABSTOP, CRect(0,0,cr.right,cr.bottom),this,IDC_EDIT1);
        edit1.SetWindowText(str);
    }
}


Знаю что этот способ неправильный, но все же как сделать/убирать перенос строк программно?

Код

edit1.ModifyStyle(ES_MULTILINE,WS_HSCROLL, SWP_FRAMECHANGED);
edit1.ModifyStyle(WS_HSCROLL,ES_MULTILINE, SWP_FRAMECHANGED);


Не помогают. Если нужно обновить, то как?

Это сообщение отредактировал(а) BIV - 4.6.2013, 16:47
PM MAIL   Вверх
Albor
Дата 4.6.2013, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для переноса по словам нужно убрать горизонтальный скроллинг.
PM MAIL ICQ   Вверх
BIV
Дата 4.6.2013, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albor @  4.6.2013,  15:40 Найти цитируемый пост)
Для переноса по словам нужно убрать горизонтальный скроллинг. 


Ну это понятно, но если это убирать во время работы программы, то текст все равно останется за приделами области

Это сообщение отредактировал(а) BIV - 4.6.2013, 19:03
PM MAIL   Вверх
Albor
Дата 5.6.2013, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В описании класса написано, что после создания объекта стили изменить нельзя, за исключением... дальше перечисляются стили, в том числе и ES_AUTOHSCROLL. Но чем его можно изменить не указывается. У меня пока не получилось, если что отпишусь. Здесь обсуждалось уже, может поможет

Это сообщение отредактировал(а) Albor - 5.6.2013, 07:52
PM MAIL ICQ   Вверх
Albor
Дата 5.6.2013, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



CRichEditCtrl имеет необходимый механизм изменения опций. Не подойдёт?

таки я не правильно понял "except as noted" - можно изменить стили у которых есть пометка, а нужные нам такой пометки не имеют, следовательно ваш подход с уничтожением/созданием контрола верен.

Это сообщение отредактировал(а) Albor - 5.6.2013, 22:25
PM MAIL ICQ   Вверх
BIV
Дата 5.6.2013, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albor @  5.6.2013,  14:23 Найти цитируемый пост)
таки я не правильно понял "except as noted" - можно изменить стили у которых есть пометка, а нужные нам такой пометки не имеют, следовательно ваш подход с уничтожением/созданием контрола верен.


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


 




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


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

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