)) Да уж это у меня наверное не отнять .. ))
» "Детский" вопрос по поп-меню.
Как сделать 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
Есть такой код:
Код:
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
mihas83
Не использовать эту процедуру. . Чем тебе не нравиться стандартный подход? А если ее использование обязательно, тогда попробуй ручками удалять лишние сиволы. Извини пример привести не могу, под С не пишу, вот если бы Дельфи. Кстати, что это за вещь
Цитата:
Не использовать эту процедуру. . Чем тебе не нравиться стандартный подход? А если ее использование обязательно, тогда попробуй ручками удалять лишние сиволы. Извини пример привести не могу, под С не пишу, вот если бы Дельфи. Кстати, что это за вещь
Цитата:
GetStringDesc()в АПИ я ее не нашел . Поэтому не знаю как именно она работает.
ShIvADeSt
Цитата:
Так это и есть стандартный подход...
Цитата:
Кто тогда будет делать перевод строки? Что применить вместо "\r\n"?
Цитата:
...это наша функция - динамически строит длинный string...
Цитата:
Чем тебе не нравиться стандартный подход
Так это и есть стандартный подход...
Цитата:
ручками удалять лишние символы
Кто тогда будет делать перевод строки? Что применить вместо "\r\n"?
Цитата:
в АПИ я ее не нашел . Поэтому не знаю как именно она работает.
...это наша функция - динамически строит длинный string...
Цитата:
Кто тогда будет делать перевод строки?
Я чего то не понял тебе надо, чтобы пункт меню был в несколько строчек что ли? Тогда сам ручками его отрисовывай. Просто не понятно
Цитата:
Как сделать context-menu в 2-е строки без "мусора" ?
Что именно в нем сделать в две строки пункт или само меню. Уточни плизззз
ShIvADeSt
Цитата:
1 пункт в две строки...
Цитата:
Что именно в нем сделать в две строки пункт или само меню. Уточни плизззз
1 пункт в две строки...
Нужно не \r\n а просто \n
ssx
Цитата:
Тогда строкa не переводится и вместо двух квадратиков "мусора" один...
Цитата:
Нужно не \r\n а просто \n
Тогда строкa не переводится и вместо двух квадратиков "мусора" один...
mihas83
Сделай первый пункт меню OwnerDraw, в событии WM_MeusureItem переопределяй его высоту, а в WM_DRAWITEM отрисовывай в нем свои две строчки. Пример работы с таким меню есть в MSDK.
Сделай первый пункт меню OwnerDraw, в событии WM_MeusureItem переопределяй его высоту, а в WM_DRAWITEM отрисовывай в нем свои две строчки. Пример работы с таким меню есть в MSDK.
ShIvADeSt
Цитата:
Об этом "способе" знаю с самого начала (с MSDN и codeguru.com), но задача стоит поправить существующую реализацию путем замены спец. символов...
Hеужели не решается ...без переопределeния виртуальныx функций DrawItem и MeasureItem?
Цитата:
Сделай первый пункт меню OwnerDraw, в событии WM_MeusureItem переопределяй его высоту, а в WM_DRAWITEM отрисовывай в нем свои две строчки. Пример работы с таким меню есть в MSDK.
Об этом "способе" знаю с самого начала (с MSDN и codeguru.com), но задача стоит поправить существующую реализацию путем замены спец. символов...
Hеужели не решается ...без переопределeния виртуальныx функций DrawItem и MeasureItem?
Цитата:
задача стоит поправить существующую реализацию путем замены спец. символов...
Если честно то я нигде не видел, чтобы это можно было осуществить при помощи спец символов. Если это где-нибудь реализовано, тогда это возможно. Просто я в таких случаях поступал как уже выше сказано, сам отрисовывал.
ShIvADeSt
Цитата:
И я, к сожалению, ничего не нашел...
Цитата:
Если честно то я нигде не видел, чтобы это можно было осуществить при помощи спец символов.
И я, к сожалению, ничего не нашел...
mihas83
Похоже никак...
Из MSDN
Цитата:
Видимо, кроме \a и \t другие esc-последовательности не разбираются.
Хотя, что имеется в виду под
Цитата:
я не понимаю.
Похоже никак...
Из 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.
я не понимаю.
Да точно OnDrawItem или OnCustomDraw т.к. это все делается драв текстом скорее всего в базовом меню они могут там и не обрабатывать еск. последовательности и я не помню на самом деле рисует ли ДравТекст в две строки, по моему нет ..
ollv
Цитата:
В итоге в menu есть 2 строки... , но в начале второй, в месте "\r\n" "мусор" (два квадратика)..., т.е. получается обрабатывaeт еск. последовательности, но "коряво"!
Цитата:
скорее всего в базовом меню они могут там и не обрабатывать еск. последовательности
В итоге в menu есть 2 строки... , но в начале второй, в месте "\r\n" "мусор" (два квадратика)..., т.е. получается обрабатывaeт еск. последовательности, но "коряво"!
у мя просто своя библиотека по отрисовке менюшек, там видимо не обрабатывается при подстановке \r\n они пишутся в одну строку, а вместо \r\n бред ... Дык шо ..
А ща попробую как в базовой будет ... пджди..
А ща попробую как в базовой будет ... пджди..
Просто меню отображается функцией не поддерживающей многострочный ввод.
Переписывай DRAW.
Переписывай DRAW.
UncoNNecteD
Цитата:
Ты об InsertMenu(...)? Но все-таки строкa переводится...
Цитата:
Просто меню отображается функцией не поддерживающей многострочный ввод.
Ты об InsertMenu(...)? Но все-таки строкa переводится...
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 ?
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 ?
ollv
Цитата:
Свой "вариант" кода я привел в самом верхнем (первом) посте...
Цитата:
...динамически строит длинный string..., и посередине применяет "\r\n" - для перевода строки.
Цитата:
Не знаю как у тя получается у меня выводится одна строка
Свой "вариант" кода я привел в самом верхнем (первом) посте...
Цитата:
что делает GetStringDesc ?
...динамически строит длинный string..., и посередине применяет "\r\n" - для перевода строки.
Цитата:
что делает GetStringDesc ?
...динамически строит длинный string..., и посередине применяет "\r\n" - для перевода строки.
Это твоя ф-ция ?? А проверь ради интереса от CString s = "TEXT \r\n TEXT "; будет она строить двустрочный итем ? .. У меня не строит, не знаю .., думаю дальше искать нет смысла он будет либо некорректен, либо дыряв, а значит есть вероятность, что он где-то не отработает. Корректно ОнДравитем и трпр. мое мнение, ... может я неправ.. ))
ollv
Цитата:
Cтроит... Может влияет то, что у нас разные флаги в функции...
Но это - не важно, так как "мусор побороть" не удается...
Цитата:
А проверь ради интереса от CString s = "TEXT \r\n TEXT "; будет она строить двустрочный итем ? .. У меня не строит, не знаю ..,
Cтроит... Может влияет то, что у нас разные флаги в функции...
Но это - не важно, так как "мусор побороть" не удается...
Может системы разные, т.к. в конечном счете отрисовкой меню занимаются апи, во всяком случае я сталкивался с теми случаями когда интерфейсные фичи работали в 2000 и не работали в 98.. и наоборот. А флаги я вроде все перебрал да там в примере , только Disable нет..) А длинная строка это что ? Случаем не уникод ?
ollv
Цитата:
... Как правило, справедливо 2000 -> 98, но не наоборот
(98 -> 2000)... В данном случае всегда Win 2000.
Цитата:
А какая в этом контексте разница?
Цитата:
в конечном счете отрисовкой меню занимаются апи, во всяком случае я сталкивался с теми случаями когда интерфейсные фичи работали в 2000 и не работали в 98
... Как правило, справедливо 2000 -> 98, но не наоборот
(98 -> 2000)... В данном случае всегда Win 2000.
Цитата:
А длинная строка это что ? Случаем не уникод ?
А какая в этом контексте разница?
Ну это оффтоп получается 98 -> 2000 но были случаи.. )) Правда можно сказать не работала именно фича по определению т.е. это когда по логике так не должно быть, но было... Да ладно не важно опустим.
/*
А какая в этом контексте разница?
*/
Ну вообще разный код может отрабатывать при уникоде и без,.. вот и кстати, если не стоит #define UNICODE, то multibyte string вообще не должна по идее отрабатывать, псевдографикой должна идти. Я сам вообще не любитель в юникоде работать, но вот писал под винЦЕ, там уникод.. по умолчанию стоял, вот и писал в уникоде.
А по сабжу,.. мне не досуг сейчас лезть все проверять досконально, извини. Но есть у меня классец BCMenu называется, может и у тебя он есть, но если нет, то свистни там все эти функции перегружены, и иконки нормально подгружаются тулбар видом. Сможешь дописать нужную тебе часть .. по моему задороже такой подход будет.
/*
А какая в этом контексте разница?
*/
Ну вообще разный код может отрабатывать при уникоде и без,.. вот и кстати, если не стоит #define UNICODE, то multibyte string вообще не должна по идее отрабатывать, псевдографикой должна идти. Я сам вообще не любитель в юникоде работать, но вот писал под винЦЕ, там уникод.. по умолчанию стоял, вот и писал в уникоде.
А по сабжу,.. мне не досуг сейчас лезть все проверять досконально, извини. Но есть у меня классец BCMenu называется, может и у тебя он есть, но если нет, то свистни там все эти функции перегружены, и иконки нормально подгружаются тулбар видом. Сможешь дописать нужную тебе часть .. по моему задороже такой подход будет.
ollv
Цитата:
Не помню... А чем он тебе понравился? Откуда? Много заготовок есть на codeguru.com...
Цитата:
Но есть у меня классец BCMenu называется, может и у тебя он есть, но если нет, то свистни там все эти функции перегружены, и иконки нормально подгружаются тулбар видом.
Не помню... А чем он тебе понравился? Откуда? Много заготовок есть на codeguru.com...
ollv
Цитата:
Нет, в данном случае не UNICODE...
Цитата:
Ну вообще разный код может отрабатывать при уникоде и без,.. вот и кстати, если не стоит #define UNICODE
Нет, в данном случае не UNICODE...
/* А чем он тебе понравился? Откуда? Много заготовок есть на codeguru.com */
Да валялся на винте понабилось поюзал.., в принципе я сейчас другими библиотеками пользуюсь, но они в комплекте, идут забыл ссылки на RSDN-Е хтось советовал, надо будет поискать на работе потом.. В общем и целом они мне нравятся, ну если не очень подходят дописываю , удобно .. Что - то типа студио.нет интерфейс..
/*
Нет, в данном случае не UNICODE...
*/ а ну приду на работу гляну, если CMenu отрисовка в SRC-шниках лежит, и опять таки если досуг будет
А хотя смысл ? Ты вроде как уже собрался ОнДравИтем перегружать или нет ??))
Да валялся на винте понабилось поюзал.., в принципе я сейчас другими библиотеками пользуюсь, но они в комплекте, идут забыл ссылки на RSDN-Е хтось советовал, надо будет поискать на работе потом.. В общем и целом они мне нравятся, ну если не очень подходят дописываю , удобно .. Что - то типа студио.нет интерфейс..
/*
Нет, в данном случае не UNICODE...
*/ а ну приду на работу гляну, если CMenu отрисовка в SRC-шниках лежит, и опять таки если досуг будет
А хотя смысл ? Ты вроде как уже собрался ОнДравИтем перегружать или нет ??))
ollv
Цитата:
Всегда полезно посмотреть... "Самообразование - великая вещь"...
Цитата:
А хотя смысл ? Ты вроде как уже собрался ОнДравИтем перегружать или нет ?
Всегда полезно посмотреть... "Самообразование - великая вещь"...
/* Всегда полезно посмотреть... "Самообразование - великая вещь".
*/
Ага, если в это время тебя не беспокоят вопросами : "Ну и где.. когда уже на конец ??" ))
*/
Ага, если в это время тебя не беспокоят вопросами : "Ну и где.. когда уже на конец ??" ))
Предыдущая тема: Assembler IDE
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.