Форум для программистов - задавайте интересные вопросы - получайте квалифицированные ответы
Как изменить стиль "перенос по словам"?
  • OFFroadOFFroad June 2011
    Необходимо: динамически менять свойство у CEdit'а, отвечающее за перенос "вылезающего" текста на новую строку (в notePAD'е такое называется "перенос по словам").

    CEdit создаю динамически:
    Код

    m_pEdit = new CEdit();
    m_pEdit->Create(WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_TABSTOP, CRect(0,0,200,100),this,WM_APP+1);

    и по событию из меню добавляю горизонтальный ScrollBar:
    Код

    m_pEdit->ModifyStyle(0,WS_HSCROLL, SWP_FRAMECHANGED);

    горизонтальный ScrollBar появляется, но CEdit'om игнорируется.

    Если по событию из меню разрушать CEdit и пересоздать его со свойством WS_HSCROLL, работает:
    Код

    m_pEdit->DestroyWindow();
    m_pEdit->Create(WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_TABSTOP | WS_HSCROLL, CRect(0,0,200,100),this,WM_APP+1);


    Как решить вопрос без разрушения CEdit'a?
  • noJIiMoPqpnoJIiMoPqp June 2011
    Так тебе вроде менять ES_MULTILIBE нужно.
    Как я понимаю, нужно либо ES_MULTILINE, либо WS_HSCROLL.
    Т.е. либо m_pEdit->ModifyStyle (ES_MULTILINE, WS_HSCROLL, SWP_FRAMECHANGED), либо наоборот.
  • OFFroadOFFroad June 2011
    ES_MULTILINE - отвечает за наличие в CEdite более чем одной строки, а я хочу поменять/восстановить свойство при котором строки, длинной больше чем ширина CEdit'a, будут урезаться до ширины CEdit'a, а не поместившаяся часть перенесётся на новую строку.


    Вот пример со строкой = 'Это пример "переноса по словам". ', которая якобы не поместилась по длине ("-","|" - это границы поля CEdit):

    1) Перенос по словам включен
    CEdit---------------------
    |Это пример "перен|
    |оса по словам". |
    |Еще текст |
    ---------------------------
    2) Перенос по словам выключен
    CEdit---------------------
    |Это пример "перен|
    |Еще текст |
    | |
    ---------------------------

    Кстати при использовании такого кода:
    Код

    m_pEdit->ModifyStyle (ES_MULTILINE, WS_HSCROLL, SWP_FRAMECHANGED)

    m_pEdit по прежнему остается многострочным, а при пересоздании всё меняется!
    Видимо ошибка одна и таже, только вот какая?
  • WiperWiper June 2011
    Похожая проблема была.
    Нужно выставить правильно флаги
    Например добавим скролл
    m_Edit.ModifyStyle(0,WS_VSCROLL,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);

    BOOL ModifyStyle(
    DWORD dwRemove,
    DWORD dwAdd,
    UINT nFlags = 0
    );

    If nFlags is nonzero, ModifyStyle calls the Windows API function SetWindowPos and redraws the window by combining nFlags


    а вот уже из SetWindowPos читаем

    If you have changed certain window data using SetWindowLong, you must call SetWindowPos to have the changes take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

Добро пожаловать!

Похоже, что Вы здесь впервые. Если хотите поучаствовать, нажмите на одну из этих кнопок!

Sign In with Twitter Sign In with OpenID Sign In with Google Login with Facebook

Войти Зарегистрироваться

In this Discussion

Tagged

Webparadox - разработка мобильных приложений под iOS и Android.