Как использовать SendMessage для передачи значений из дочернего диалогового окна (немодального) в родительское диалоговое окно? - PullRequest
0 голосов
/ 25 августа 2011

Предположим, я открыл всплывающее окно из родительского окна. Я рассчитал некоторые вычисления для дочернего окна при отправке значения из дочернего окна. Мне нужно отобразить вычисленное значение дочернего окна в текстовое поле родительского окна, когда я нажимаю кнопку во всплывающем окне. .

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Вариант 1:

Вы можете передать дескриптор родительского окна вашему дочернему окну в конструкторе и использовать его для вызова SendMessage. Однако, поскольку Send Message является блокирующим вызовом, вы можете использовать вместо него Post Post.

Вариант 2:

void CModeLess::OnOK() 
{
      //Get the value from the control
       m_ctrlEdit.GetWindowText(strVal);
       m_Parent->SetName(strVal);
       DestroyWindow(); 
}

Передача указателя родительского диалогового окна при создании дочернего диалогового окна. И используйте его для вызова функции-члена.

Внимание:

Когда вы закрываете дочернее окно, вы должны обязательно удалить память указателя дочернего окна, так как вы упомянули, что диалог является немодальным. Вы должны сообщить родительскому диалогу, что дочернее окно пропало, для чего вам нужно использовать postmessage.

void CModeLess::PostNcDestroy() 
{   
    CDialog::PostNcDestroy();
    GetParent()->PostMessage(WM_MODELESS_CLOSED,0,0);
    delete this;
}
0 голосов
/ 25 августа 2011

Ваше дочернее окно связано с классом.

Добавьте метод в класс дочернего окна, который будет возвращать вычисленное значение.т.е. ChildwindowClass :: GetCalculatedValue ()

Тогда ваше родительское окно может использовать этот метод для получения значения.

Я предполагаю, что вы используете CDialog :: DoModal, чтобы показатьдочернее окно.Поскольку DoModal является блокирующей функцией, легко узнать, когда будет создано дочернее окно.

Используйте PostMessage, чтобы сообщить родительскому диалоговому окну, что дочернее диалоговое окно выполнило свой расчет и что можно использовать GetCalculatedValue.Или вы можете передать вычисленное значение родительскому элементу в PostMessage.

Если вычисление займет много времени, используйте рабочий поток для выполнения этого и PostMessage результат, иначе вы заблокируете свой пользовательский интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...