Здравствуйте, Аноним, Вы писали:
А>Подскажите что неверно
А>Есть в диалоговом окне CListBox
А>Для данного контрла пишу код открытие меню правой кнопкой мыши:
А>void CMy_Link_Page::OnRclick() А>{ А> UINT nFlags; А> CPoint pt; А> CMenu MyMenu; А> HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu(); А> MyMenu.Attach( hmnu ); А> GetCursorPos(&pt); А> hmnu=MyMenu.Detach(); А> MyMenu.CreatePopupMenu(); А> m_list.ScreenToClient(&pt); А> MyMenu.AppendMenu(MF_STRING,0,"test1"); А> MyMenu.AppendMenu(MF_STRING,0,"test2"); А> ::GetCursorPos(&pt); А> int Cmd=MyMenu.TrackPopupMenu(TPM_LEFTALIGN ,pt.x,pt.y,this,0); А>}
А>в карте сообщений пишу: А>ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclick)
А>Если контрол наследован от CListCtrl и создается через Create() все нормально, а с CListBox не работает
А>Помогите пожалуйста!!!
а по моему (не буду утверждать) у CListBox из событий мыши только даблклик... рекомендую посмотреть LBN_messages
Здравствуйте, SchweinDeBurg, Вы писали:
ИВ>>Нужно юзать тривиальный ON_WN_RBUTTONUP
SDB>А не WM_CONTEXTMENU ?
А есть принципиальная разница?
Попробовал, работает и так, и эдак. Разница в том только, какие координаты пригоняются.
на WM_RBUTTON приходят клиентские, на WM_CONTEXTMENU — экранные...
Здравствуйте, Игорь Вартанов, Вы писали:
ИВ>И много в ней пользы? При ее нажатии меню активируется, но координаты приходят совершенно левые (-1, -1).
Для меня, я ей пользуюсь почти постоянно. Что касается координат — об этом в MSDN так и написано, вместо "левых" можно подставить, например, координаты левого верхнего угла активного окна, координаты выделенного элемента списка, координаты каретки в редакторе, etc.
ИВ>Так что, очень сильно зависит от задачи.
Ну, мэй би... не будем флеймить. Хотя формально — вся функциональсть приложения должна быть доступна как от мышки, так и от клавиатуры (AFAIK при невыполнении этого требования не удастся получить нашлепку "designed for Microsoft Windows").
[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by silence ]
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Ну, мэй би... не будем флеймить. Хотя формально — вся функциональсть приложения должна быть доступна как от мышки, так и от клавиатуры (AFAIK при невыполнении этого требования не удастся получить нашлепку "designed for Microsoft Windows").
Тогда Microsoft сама у себя бы не получила заветную нашлепку, т.к. листбокс не предоставляет желанной возможности разделять highlighted и selected элементы клавиатурными манипуляциями (а мышью — сколько угодно). Это реализовано только в listview.
Я ведь не зря привел пример с получением мышью произвольного айтема из листбокса в контекстное меню. Если пользоваться клавиатурой и WM_CONTEXTMENU, из состояния листбокса можно извлечь информацию максимум для выделенного элемента, но никак не для произвольного.
пробовал использовать эту функцию, конечно мне не повезло... оказалось — The CListBox member function ItemFromPoint() is not implemented in Win32s or Windows NT, but the documentation for the member function does not state this fact ( это на http://www.kbalertz.com/kb_Q148498.aspx )
там же предлагают альтернативу
int LBItemFromPt( HWND hLB,
POINT pt,
BOOL bAutoScroll
);
знал бы раньше, никогда б XP не поставил
по настоящему начинаешь ценить basic только изучая с++ (международная мудрость)
Здравствуйте, se-ga, Вы писали:
SG>...
ИВ>> UINT item = ItemFromPoint( pt, outside ); SG>...
SG>пробовал использовать эту функцию, конечно мне не повезло... оказалось — The CListBox member function ItemFromPoint() is not implemented in Win32s or Windows NT, but the documentation for the member function does not state this fact ( это на http://www.kbalertz.com/kb_Q148498.aspx )
NT бывают разные, например 3.51 (никогда в глаза не видел, и боюсь, что уже не увижу никогда, ибо я и четверку уже забывать начал).
MSDN:
LB_ITEMFROMPOINT Message
Message Information
Header Declared in Winuser.h, include Windows.h
Minimum operating systems Windows 95, Windows NT 4.0
Т.е. ты (со слов какого-то там kbalertz.com) хочешь сказать, что в четверке этот месседж не обрабатывается?
SG>там же предлагают альтернативу
SG>int LBItemFromPt( HWND hLB, SG> POINT pt, SG> BOOL bAutoScroll SG>);
ИВ>NT бывают разные, например 3.51 (никогда в глаза не видел, и боюсь, что уже не увижу никогда, ибо я и четверку уже забывать начал). ИВ>Т.е. ты (со слов какого-то там kbalertz.com) хочешь сказать, что в четверке этот месседж не обрабатывается?
Я думаю что на сегодня более распространён XP, чем NT. Поэтому ориентироваться надо на XP.
SG>>там же предлагают альтернативу
SG>>int LBItemFromPt( HWND hLB, SG>> POINT pt, SG>> BOOL bAutoScroll SG>>);
ИВ>А это хде???