Здравствуйте.
Я сделал программу АппВизардом на основе CListView. В этот View выбираются данные из базы. Выбираются ссылки на файлы локальных FTP серверов. Всё хорошо. Далее, сделал при клике на строчку с ссылкой добавление оной в буфер обмена. Потом решил, что нужно это реализовать через контекстное меню.
Сначала мучался с попап меню.
Таким образом:
void CFTPSrchView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu menu;
CPoint point;
menu.LoadMenu(IDR_POPUP1);
CMenu *popup=menu.GetSubMenu(0);
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this);
}
Меню не вылезало вообще. Был варнинг: local variable 'point' used without having been initialized.
Потом ради интереса сделал так:
void CFTPSrchView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu menu;
CPoint point;
menu.LoadMenu(IDR_POPUP1);
CMenu *popup=menu.GetSubMenu(0);
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,100,100, this);
}
Меню вылезло без варнингов, но, естевственно по координатам 100 100.
Решил эксперементировать дальше. Иду в редактор меню. Хочу, как обычно, выбрав нужный пункт меню и нажам Ctrl+W, задать обработчик этому пункту. Хотел бы, но вылезает предложение создать класс.
Так вот каким образом мне релизовать:
1) Появлению меню, там где щёлкнули мышью.
2) Как сделать обработчик на пукнт меню.
Заранее спасибо за помощь.
Здравствуйте, Viatcheslav G. Malakhov, Вы писали:
VGM>Так вот каким образом мне релизовать:
VGM>1) Появлению меню, там где щёлкнули мышью.
WM_CONTEXTMENU
VGM>Хотел бы, но вылезает предложение создать класс.
Там не только новый класс можно создать, но и выбрать из уже существующих.
VGM>2) Как сделать обработчик на пукнт меню.
А можно и без wizard'а обойтись. Обработчик команды пишется вручную по аналогии с уже существующими. Или см. описание ON_COMMAND macro в MSDN.
kolam
Здравствуйте, Viatcheslav G. Malakhov, Вы писали:
VGM>Спасибо, всё сделал.
Да, ещё один момент. Есть замечательная такая функция ClientToScreen. Так вот ей можно передать то, что ты получил и на выходе координаты моника
Здравствуйте, Viatcheslav G. Malakhov, Вы писали:
VGM>Здравствуйте.
VGM>Я сделал программу АппВизардом на основе CListView. В этот View выбираются данные из базы. Выбираются ссылки на файлы локальных FTP серверов. Всё хорошо. Далее, сделал при клике на строчку с ссылкой добавление оной в буфер обмена. Потом решил, что нужно это реализовать через контекстное меню.
VGM>Сначала мучался с попап меню.
VGM>Таким образом:
VGM>VGM>void CFTPSrchView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
VGM>{
VGM> CMenu menu;
VGM> CPoint point;
VGM> menu.LoadMenu(IDR_POPUP1);
VGM> CMenu *popup=menu.GetSubMenu(0);
VGM> popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this);
VGM>}
VGM>
VGM>Меню не вылезало вообще. Был варнинг: local variable 'point' used without having been initialized.
Еще бы — ты не проинициализировал переменную point. В ней был мусор, который ты не мудрствуя лукаво передавал в метод TrackPopupMenu. А нужно было так:
>void CFTPSrchView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu menu;
CPoint point;
GetCursorPos(&point);
menu.LoadMenu(IDR_POPUP1);
CMenu *popup=menu.GetSubMenu(0);
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this);
}
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde