Доработка интерфейса
Требуется подсказка - хочу интерфейс одной программки доработать. Нужно вот что: щелчком по нужной строке списка вызвать диалог (в котором каким-то образом будет зафиксирована эта указанная строка - например, в заголовке, чтобы пользователю было ясно, тот ли элемент списка он выбрал), ввести определенные значения и нажать клавишу "запомнить". По нажатию клавиши диалог должен закрыться и передать эти самые определенные значения главному окну программы, точнее, в другой список. Таким образом, пройдя по одному из списков, я должен сформировать второй с некоторыми изменениями. Чтобы было понятнее, приведу иллюстрацию сказанного (в прикрепленном файле)
А это кусок кода:
//обработка двойного щелчка по исходному списку
void CMainDlg::OnDblclkListPercentage(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CSelectedMarkDlg window;
window.DoModal();
*pResult = 0;
}
Здесь: CMainDlg - класс главного диалогового окна, к которому относится исходный и конечные списки,
CSelectedMarkDlg - класс диалога для корректировки параметров.
Подскажите пример технической реализации такой идеи, пожалуйста.
Доброго времени суток всем! Давно меня в эфире не было...
Требуется подсказка - хочу интерфейс одной программки доработать. Нужно вот что: щелчком по нужной строке списка вызвать диалог (в котором каким-то образом будет зафиксирована эта указанная строка - например, в заголовке, чтобы пользователю было ясно, тот ли элемент списка он выбрал), ввести определенные значения и нажать клавишу "запомнить". По нажатию клавиши диалог должен закрыться и передать эти самые определенные значения главному окну программы, точнее, в другой список. Таким образом, пройдя по одному из списков, я должен сформировать второй с некоторыми изменениями. Чтобы было понятнее, приведу иллюстрацию сказанного (в прикрепленном файле)
А это кусок кода:
//обработка двойного щелчка по исходному списку
void CMainDlg::OnDblclkListPercentage(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CSelectedMarkDlg window;
window.DoModal();
*pResult = 0;
}
Здесь: CMainDlg - класс главного диалогового окна, к которому относится исходный и конечные списки,
CSelectedMarkDlg - класс диалога для корректировки параметров.
Подскажите пример технической реализации такой идеи, пожалуйста.
Если я правильно все понял, то примерно так:
void CMainDlg::OnDblclkListPercentage(NMHDR* pNMHDR, LRESULT* pResult)
{
NMITEMACTIVATE *pNMItem = reinterpret_cast<NMITEMACTIVATE *>(pNMHDR);
CSelectedMarkDlg window;
window.DoModal(pNMItem);
*pResult = 0;
}
В pNMItem - вся информация о выделенном элементе списка. Только надо переопределить DoModal для диалога.
Если я правильно все понял, то примерно так:
void CMainDlg::OnDblclkListPercentage(NMHDR* pNMHDR, LRESULT* pResult)
{
NMITEMACTIVATE *pNMItem = reinterpret_cast<NMITEMACTIVATE *>(pNMHDR);
CSelectedMarkDlg window;
window.DoModal(pNMItem);
*pResult = 0;
}
В pNMItem - вся информация о выделенном элементе списка. Только надо переопределить DoModal для диалога.
Что-то я затупил, видимо... X)- Никак не пойму, как переопределить DoModal(). Я попытался следующим образом: вписал в header-file класса вызываемого диалогового окна строку afx_msg void DoModal(NMITEMACTIVATE* pNMHDR); После этого написал в *.cpp-файле этого класса:
void CSelectedMarkDlg:: DoModal(NMITEMACTIVATE *pNMHDR)
{
}
А что, собственно, будет теперь заключаться между фигурными скобками метода? Подскажите, пожалуйста.
2. В OnInitDialog CSelectedMarkDlg написать
if(window.DoModal()==IDOK)...
а именно записать в другую переменную (напр. str2), что нужно
и вызвать EndDialog(IDOK);
для закрытия окна.
5. Читать это значение в главном окне
{
...
window.str = "текущая_строка_листбокса";
if(window.DoModal()==IDOK)
{
CString переменная = window.str2;
...
}
Что-то я затупил, видимо... X)- Никак не пойму, как переопределить DoModal(). Я попытался следующим образом: вписал в header-file класса вызываемого диалогового окна строку afx_msg void DoModal(NMITEMACTIVATE* pNMHDR); После этого написал в *.cpp-файле этого класса:
void CSelectedMarkDlg:: DoModal(NMITEMACTIVATE *pNMHDR)
{
}
А что, собственно, будет теперь заключаться между фигурными скобками метода? Подскажите, пожалуйста.
Во-первых, DoModal - совсем не afx_msg void, а
А во-вторых, в фигурных скобках вытаскивашь необходимую для диалога информацию об элементе списка в поля самого диалога. Затем исользуешь эту информацию по своему усмотрению (в OnInitDialog, например). Ну для чего-то она требуется же?