Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» "Детский" вопрос по поп-меню.

Автор: mihas83
Дата сообщения: 23.12.2003 17:31
Как сделать 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
Автор: ShIvADeSt
Дата сообщения: 24.12.2003 01:06
mihas83
Не использовать эту процедуру. . Чем тебе не нравиться стандартный подход? А если ее использование обязательно, тогда попробуй ручками удалять лишние сиволы. Извини пример привести не могу, под С не пишу, вот если бы Дельфи. Кстати, что это за вещь

Цитата:
GetStringDesc()
в АПИ я ее не нашел . Поэтому не знаю как именно она работает.
Автор: mihas83
Дата сообщения: 24.12.2003 06:53
ShIvADeSt

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

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

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

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

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

...это наша функция - динамически строит длинный string...
Автор: ShIvADeSt
Дата сообщения: 24.12.2003 08:43

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

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

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

Что именно в нем сделать в две строки пункт или само меню. Уточни плизззз
Автор: mihas83
Дата сообщения: 24.12.2003 08:46
ShIvADeSt

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

1 пункт в две строки...
Автор: ssx
Дата сообщения: 24.12.2003 09:01
Нужно не \r\n а просто \n
Автор: mihas83
Дата сообщения: 24.12.2003 09:18
ssx

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

Тогда строкa не переводится и вместо двух квадратиков "мусора" один...
Автор: ShIvADeSt
Дата сообщения: 25.12.2003 02:30
mihas83
Сделай первый пункт меню OwnerDraw, в событии WM_MeusureItem переопределяй его высоту, а в WM_DRAWITEM отрисовывай в нем свои две строчки. Пример работы с таким меню есть в MSDK.
Автор: mihas83
Дата сообщения: 25.12.2003 07:02
ShIvADeSt

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

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

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

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

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

И я, к сожалению, ничего не нашел...
Автор: f_serg
Дата сообщения: 26.12.2003 13:50
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.

я не понимаю.
Автор: ollv
Дата сообщения: 26.12.2003 13:59
Да точно OnDrawItem или OnCustomDraw т.к. это все делается драв текстом скорее всего в базовом меню они могут там и не обрабатывать еск. последовательности и я не помню на самом деле рисует ли ДравТекст в две строки, по моему нет ..
Автор: mihas83
Дата сообщения: 26.12.2003 14:49
ollv

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

В итоге в menu есть 2 строки... , но в начале второй, в месте "\r\n" "мусор" (два квадратика)..., т.е. получается обрабатывaeт еск. последовательности, но "коряво"!
Автор: ollv
Дата сообщения: 26.12.2003 16:02
у мя просто своя библиотека по отрисовке менюшек, там видимо не обрабатывается при подстановке \r\n они пишутся в одну строку, а вместо \r\n бред ... Дык шо ..
А ща попробую как в базовой будет ... пджди..
Автор: UncoNNecteD
Дата сообщения: 26.12.2003 16:04
Просто меню отображается функцией не поддерживающей многострочный ввод.
Переписывай DRAW.
Автор: mihas83
Дата сообщения: 26.12.2003 16:22
UncoNNecteD

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

Ты об InsertMenu(...)? Но все-таки строкa переводится...
Автор: ollv
Дата сообщения: 26.12.2003 16:26
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 ?
Автор: mihas83
Дата сообщения: 26.12.2003 16:35
ollv

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

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

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

...динамически строит длинный string..., и посередине применяет "\r\n" - для перевода строки.
Автор: ollv
Дата сообщения: 26.12.2003 16:50

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

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


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

Цитата:
А проверь ради интереса от CString s = "TEXT \r\n TEXT "; будет она строить двустрочный итем ? .. У меня не строит, не знаю ..,

Cтроит... Может влияет то, что у нас разные флаги в функции...
Но это - не важно, так как "мусор побороть" не удается...
Автор: ollv
Дата сообщения: 29.12.2003 13:17
Может системы разные, т.к. в конечном счете отрисовкой меню занимаются апи, во всяком случае я сталкивался с теми случаями когда интерфейсные фичи работали в 2000 и не работали в 98.. и наоборот. А флаги я вроде все перебрал да там в примере , только Disable нет..) А длинная строка это что ? Случаем не уникод ?
Автор: mihas83
Дата сообщения: 29.12.2003 21:03
ollv

Цитата:
в конечном счете отрисовкой меню занимаются апи, во всяком случае я сталкивался с теми случаями когда интерфейсные фичи работали в 2000 и не работали в 98

... Как правило, справедливо 2000 -> 98, но не наоборот
(98 -> 2000)... В данном случае всегда Win 2000.

Цитата:
А длинная строка это что ? Случаем не уникод ?

А какая в этом контексте разница?
Автор: ollv
Дата сообщения: 30.12.2003 09:42
Ну это оффтоп получается 98 -> 2000 но были случаи.. )) Правда можно сказать не работала именно фича по определению т.е. это когда по логике так не должно быть, но было... Да ладно не важно опустим.
/*
А какая в этом контексте разница?
*/
Ну вообще разный код может отрабатывать при уникоде и без,.. вот и кстати, если не стоит #define UNICODE, то multibyte string вообще не должна по идее отрабатывать, псевдографикой должна идти. Я сам вообще не любитель в юникоде работать, но вот писал под винЦЕ, там уникод.. по умолчанию стоял, вот и писал в уникоде.
А по сабжу,.. мне не досуг сейчас лезть все проверять досконально, извини. Но есть у меня классец BCMenu называется, может и у тебя он есть, но если нет, то свистни там все эти функции перегружены, и иконки нормально подгружаются тулбар видом. Сможешь дописать нужную тебе часть .. по моему задороже такой подход будет.
Автор: mihas83
Дата сообщения: 30.12.2003 19:42
ollv

Цитата:
Но есть у меня классец BCMenu называется, может и у тебя он есть, но если нет, то свистни там все эти функции перегружены, и иконки нормально подгружаются тулбар видом.

Не помню... А чем он тебе понравился? Откуда? Много заготовок есть на codeguru.com...
Автор: mihas83
Дата сообщения: 31.12.2003 08:14
ollv

Цитата:
Ну вообще разный код может отрабатывать при уникоде и без,.. вот и кстати, если не стоит #define UNICODE

Нет, в данном случае не UNICODE...
Автор: ollv
Дата сообщения: 04.01.2004 00:53
/* А чем он тебе понравился? Откуда? Много заготовок есть на codeguru.com */
Да валялся на винте понабилось поюзал.., в принципе я сейчас другими библиотеками пользуюсь, но они в комплекте, идут забыл ссылки на RSDN-Е хтось советовал, надо будет поискать на работе потом.. В общем и целом они мне нравятся, ну если не очень подходят дописываю , удобно .. Что - то типа студио.нет интерфейс..
/*
Нет, в данном случае не UNICODE...
*/ а ну приду на работу гляну, если CMenu отрисовка в SRC-шниках лежит, и опять таки если досуг будет
А хотя смысл ? Ты вроде как уже собрался ОнДравИтем перегружать или нет ??))
Автор: mihas83
Дата сообщения: 04.01.2004 07:06
ollv

Цитата:
А хотя смысл ? Ты вроде как уже собрался ОнДравИтем перегружать или нет ?

Всегда полезно посмотреть... "Самообразование - великая вещь"...
Автор: ollv
Дата сообщения: 05.01.2004 10:53
/* Всегда полезно посмотреть... "Самообразование - великая вещь".
*/
Ага, если в это время тебя не беспокоят вопросами : "Ну и где.. когда уже на конец ??" ))
Автор: mihas83
Дата сообщения: 05.01.2004 11:51
ollv

Цитата:
Ага, если в это время тебя не беспокоят вопросами : "Ну и где.. когда уже на конец ??" ))

Тем не менее, тебе ...хватает времени на музыку...

Страницы: 123

Предыдущая тема: Assembler IDE


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.