Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » "Детский" вопрос по поп-меню.

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сделать context-menu в 2-е строки без "мусора" ?
Есть такой код:

Код:
 
CString sText(GetStringDesc());
...................
menu.InsertMenu(0, MF_BYPOSITION | MF_STRING | MF_DISABLED, 0, sText);
menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); // display the popup menu
 

"Специфика" в том, что GetStringDesc() динамически строит длинный string..., и посередине применяет + "\r\n" для перевода строки. В итоге в menu есть 2 строки... , но в начале второй, в месте "\r\n" "мусор" (два квадратика)...
Как "побороть" это?

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 18:31 23-12-2003
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihas83
Не использовать эту процедуру. . Чем тебе не нравиться стандартный подход? А если ее использование обязательно, тогда попробуй ручками удалять лишние сиволы. Извини пример привести не могу, под С не пишу, вот если бы Дельфи. Кстати, что это за вещь  

Цитата:
GetStringDesc()
в АПИ я ее не нашел . Поэтому не знаю как именно она работает.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:06 24-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Чем тебе не нравиться стандартный подход

Так это и есть стандартный подход...

Цитата:
ручками удалять лишние символы

Кто тогда будет делать перевод строки? Что применить вместо "\r\n"?

Цитата:
в АПИ я ее не нашел . Поэтому не знаю как именно она работает.  

...это наша функция - динамически строит длинный string...

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 07:53 24-12-2003 | Исправлено: mihas83, 07:57 24-12-2003
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Кто тогда будет делать перевод строки?

Я чего то не понял тебе надо, чтобы пункт меню был в несколько строчек что ли? Тогда сам ручками его отрисовывай. Просто не понятно

Цитата:
Как сделать context-menu в 2-е строки без "мусора" ?

Что именно в нем сделать в две строки пункт или само меню. Уточни плизззз

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:43 24-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Что именно в нем сделать в две строки пункт или само меню. Уточни плизззз  

1 пункт в две строки...

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 09:46 24-12-2003
ssx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно  не \r\n  а просто \n

Всего записей: 500 | Зарегистр. 06-10-2003 | Отправлено: 10:01 24-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ssx

Цитата:
Нужно  не \r\n  а просто \n

Тогда строкa не переводится и вместо двух квадратиков "мусора" один...

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 10:18 24-12-2003
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihas83
Сделай первый пункт меню OwnerDraw, в событии WM_MeusureItem переопределяй его высоту, а в WM_DRAWITEM отрисовывай в нем свои две строчки. Пример работы с таким меню есть в MSDK.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:30 25-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Сделай первый пункт меню OwnerDraw, в событии WM_MeusureItem переопределяй его высоту, а в WM_DRAWITEM отрисовывай в нем свои две строчки. Пример работы с таким меню есть в MSDK.

Об этом "способе" знаю с самого начала (с MSDN и codeguru.com), но задача стоит поправить существующую реализацию путем замены спец. символов...  
Hеужели не решается  ...без переопределeния виртуальныx функций DrawItem и MeasureItem?

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 08:02 25-12-2003
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
задача стоит поправить существующую реализацию путем замены спец. символов...

Если честно то я нигде не видел, чтобы это можно было осуществить при помощи спец символов. Если это где-нибудь реализовано, тогда это возможно. Просто я в таких случаях поступал как уже выше сказано, сам отрисовывал.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:45 26-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Если честно то я нигде не видел, чтобы это можно было осуществить при помощи спец символов.

И я, к сожалению, ничего не нашел...

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 11:41 26-12-2003
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihas83
Похоже никак...
Из MSDN

Цитата:
MENUITEM Statement
The MENUITEM resource-definition statement creates a menu item.  
 
MENUITEM text, result, [[optionlist]]  MENUITEM SEPARATOR
Parameters
text  
A string that indicates the name of the menu item.  
The string can contain the escape characters \t and \a. The \t character inserts a tab in the string and is used to align text in columns. Tab characters should be used only in menus, not in menu bars. (For information on menus, see POPUP Resource.) The \a character aligns all text that follows it flush right to the menu bar or pop-up menu.

 
Видимо, кроме \a и \t другие esc-последовательности не разбираются.
Хотя, что имеется в виду под

Цитата:
The \t character inserts a tab in the string and is used to align text in columns.

я не понимаю.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 14:50 26-12-2003
ollv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
  Да точно OnDrawItem или OnCustomDraw т.к. это все делается драв текстом скорее всего в базовом меню они могут там и не обрабатывать еск. последовательности и я не помню на самом деле рисует ли ДравТекст в две строки, по моему нет ..

Всего записей: 165 | Зарегистр. 25-12-2003 | Отправлено: 14:59 26-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ollv

Цитата:
скорее всего в базовом меню они могут там и не обрабатывать еск. последовательности  

В итоге в menu есть 2 строки... , но в начале второй, в месте "\r\n" "мусор" (два квадратика)..., т.е. получается обрабатывaeт еск. последовательности, но "коряво"!

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 15:49 26-12-2003
ollv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у мя просто своя библиотека по отрисовке менюшек, там видимо не обрабатывается при подстановке \r\n они пишутся в одну строку, а вместо \r\n бред ... Дык шо ..  
 А ща попробую как в базовой будет ... пджди..    

Всего записей: 165 | Зарегистр. 25-12-2003 | Отправлено: 17:02 26-12-2003
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Просто меню отображается функцией не поддерживающей многострочный ввод.
Переписывай DRAW.

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 17:04 26-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Просто меню отображается функцией не поддерживающей многострочный ввод.

Ты об InsertMenu(...)? Но все-таки строкa переводится...  

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 17:22 26-12-2003 | Исправлено: mihas83, 17:25 26-12-2003
ollv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CMenu men;
men.CreatePopupMenu ();
CString p; p.Format("FFFF \r\n rrr");
men.InsertMenu (0,MF_BYPOSITION | MF_STRING , CMD1, _T("uuuu \0xd\n bbb"));
men.InsertMenu (1,MF_BYPOSITION, CMD1, p);
men.TrackPopupMenu (TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,point.x,point.y,this);
 
  Не знаю как у тя получается у меня выводится одна строка
т.е. на чистой строке еск.послед-сти не отрабатываются ни в каком виде...  
 
что делает GetStringDesc ?

Всего записей: 165 | Зарегистр. 25-12-2003 | Отправлено: 17:26 26-12-2003
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ollv

Цитата:
Не знаю как у тя получается у меня выводится одна строка  

Свой "вариант" кода я привел в самом верхнем (первом) посте...

Цитата:
что делает GetStringDesc ?

...динамически строит длинный string..., и посередине применяет "\r\n" - для перевода строки.

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 17:35 26-12-2003
ollv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
что делает GetStringDesc ?
 
...динамически строит длинный string..., и посередине применяет "\r\n" - для перевода строки.

 
Это твоя ф-ция ?? А проверь ради интереса от CString s = "TEXT \r\n TEXT ";  будет она строить двустрочный итем ? .. У меня не строит, не знаю .., думаю дальше искать нет смысла он будет либо некорректен, либо дыряв, а значит есть вероятность, что он где-то  не отработает. Корректно ОнДравитем и трпр. мое мнение, ... может я неправ.. ))

Всего записей: 165 | Зарегистр. 25-12-2003 | Отправлено: 17:50 26-12-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » "Детский" вопрос по поп-меню.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru