Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Доработка интерфейса

407
14 сентября 2005 года
shupik
160 / / 15.09.2004
Доброго времени суток всем! Давно меня в эфире не было...
Требуется подсказка - хочу интерфейс одной программки доработать. Нужно вот что: щелчком по нужной строке списка вызвать диалог (в котором каким-то образом будет зафиксирована эта указанная строка - например, в заголовке, чтобы пользователю было ясно, тот ли элемент списка он выбрал), ввести определенные значения и нажать клавишу "запомнить". По нажатию клавиши диалог должен закрыться и передать эти самые определенные значения главному окну программы, точнее, в другой список. Таким образом, пройдя по одному из списков, я должен сформировать второй с некоторыми изменениями. Чтобы было понятнее, приведу иллюстрацию сказанного (в прикрепленном файле)

А это кусок кода:

//обработка двойного щелчка по исходному списку
void CMainDlg::OnDblclkListPercentage(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CSelectedMarkDlg window;
window.DoModal();
*pResult = 0;
}
Здесь: CMainDlg - класс главного диалогового окна, к которому относится исходный и конечные списки,
CSelectedMarkDlg - класс диалога для корректировки параметров.

Подскажите пример технической реализации такой идеи, пожалуйста.
1.8K
15 сентября 2005 года
_const_
229 / / 26.11.2003
Цитата:
Originally posted by shupik
Доброго времени суток всем! Давно меня в эфире не было...
Требуется подсказка - хочу интерфейс одной программки доработать. Нужно вот что: щелчком по нужной строке списка вызвать диалог (в котором каким-то образом будет зафиксирована эта указанная строка - например, в заголовке, чтобы пользователю было ясно, тот ли элемент списка он выбрал), ввести определенные значения и нажать клавишу "запомнить". По нажатию клавиши диалог должен закрыться и передать эти самые определенные значения главному окну программы, точнее, в другой список. Таким образом, пройдя по одному из списков, я должен сформировать второй с некоторыми изменениями. Чтобы было понятнее, приведу иллюстрацию сказанного (в прикрепленном файле)

А это кусок кода:

//обработка двойного щелчка по исходному списку
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 для диалога.

407
20 ноября 2005 года
shupik
160 / / 15.09.2004
Цитата:
Originally posted by _const_
Если я правильно все понял, то примерно так:

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)
{
}
А что, собственно, будет теперь заключаться между фигурными скобками метода? Подскажите, пожалуйста.

14K
20 ноября 2005 года
0007
3 / / 18.10.2005
1. Нужно определить public CString str переменную в CSelectedMarkDlg.
2. В OnInitDialog CSelectedMarkDlg написать
 
Код:
SetWindowText(str);
3. В OnDblclkListPercentage перед DoModal() присвоить значение этой переменной, напр.
 
Код:
window.str = "текущая_строка_листбокса";
if(window.DoModal()==IDOK)...
4. Переопределить OnOK событие CSelectedMarkDlg,
а именно записать в другую переменную (напр. str2), что нужно
и вызвать EndDialog(IDOK);
для закрытия окна.
5. Читать это значение в главном окне
 
Код:
void CMainDlg::OnDblclkListPercentage(NMHDR* pNMHDR, LRESULT* pResult)
{
  ...
  window.str = "текущая_строка_листбокса";
  if(window.DoModal()==IDOK)
  {
    CString переменная = window.str2;
    ...
}
1.8K
20 ноября 2005 года
_const_
229 / / 26.11.2003
Цитата:
Originally posted by shupik
Что-то я затупил, видимо... X)- Никак не пойму, как переопределить DoModal(). Я попытался следующим образом: вписал в header-file класса вызываемого диалогового окна строку afx_msg void DoModal(NMITEMACTIVATE* pNMHDR); После этого написал в *.cpp-файле этого класса:
void CSelectedMarkDlg:: DoModal(NMITEMACTIVATE *pNMHDR)
{
}
А что, собственно, будет теперь заключаться между фигурными скобками метода? Подскажите, пожалуйста.



Во-первых, DoModal - совсем не afx_msg void, а

 
Код:
INT_PTR DoModal(NMITEMACTIVATE *pNMHDR);


А во-вторых, в фигурных скобках вытаскивашь необходимую для диалога информацию об элементе списка в поля самого диалога. Затем исользуешь эту информацию по своему усмотрению (в OnInitDialog, например). Ну для чего-то она требуется же?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог