В программе MFC я пытаюсь получить доступ к элементам управления, которые находятся в одном окне (классе), из другого окна (братского или дочернего) с кодом в другом файле .cpp. Обычно доступ к элементу управления осуществляется с помощью переменной DDX_Control, определенной в файле класса .cpp.
DDX_Control(pDX, IDC_STATUS, m_Status);
Код другого окна находится в другом файле, поэтому у меня нет доступа к управляющей переменной (m_Status). Что я сделал, так это использовал FindWindow, чтобы найти главное окно, а затем GetDlgItem, чтобы найти интересующий меня элемент управления:
CWnd * tmpWnd = CWnd::FindWindow(NULL,"MainWindow"); // find the main dialog box
CStatic * tmpStatus = (CStatic*) tmpWnd->GetDlgItem(IDC_Status);
tmpStatus->SetWindowText(“Status Report);
Это прекрасно работает в отладчике, но терпит неудачу при выполнении вне отладчика. FindWindow правильно получает идентификатор окна, но GetDlgItem возвращает значение null.
В идеале я хотел бы получить доступ к управляющей переменной (m_Status) из другого окна, но я не знаю, как это сделать. Я понимаю, что GetDlgItem далеко не идеален ни при каких обстоятельствах.
Одним из решений было бы послать сообщение классу главного окна и сказать ему, что делать, но мне нужно было бы иметь подпрограмму для обработки каждого элемента управления и знать, как обрабатывать любые данные, которые я отправляю.
Есть ли «правильный» способ сделать это? Спасибо
Окончательный ответ - привести к исходному классу:
((CspDlg *)AfxGetMainWnd())->m_Status.SetWindowText("Отчет");