accessing parent variables from dialog mfc??
-
bimgot wrote:
...it just does nothing...
Which means "nothing" without any supporting data. Does
GetParent()
return the correct parent address? How about a snippet of code that shows what does not work?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
OnTimer in the dialog class: void CDlg::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); dlg_level = dlg_sldr.GetPos(); CformView* form = (CformView*) GetParent(); form->form_level = dlg_level; form->UpdateData(TRUE); UpdateData(TRUE); } then from form view class: void CformView::OnViewDlg() { CDlg dialog; dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); } hope this makes sense
-
OnTimer in the dialog class: void CDlg::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); dlg_level = dlg_sldr.GetPos(); CformView* form = (CformView*) GetParent(); form->form_level = dlg_level; form->UpdateData(TRUE); UpdateData(TRUE); } then from form view class: void CformView::OnViewDlg() { CDlg dialog; dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); } hope this makes sense
UpdateData (TRUE) puts the values currently in the controls into the variables. You need to call UpdateData (FALSE) to move the variable values into the screen controls. Note that I have added a line. This is so that if you have other controls on the screen, you won't lose the values the user might have changed on the screen when you call UpdateData (FALSE).
void CDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
dlg_level = dlg_sldr.GetPos();CformView* form = (CformView*) GetParent();
UpdateData (TRUE);
form->form_level = dlg_level;
form->UpdateData(FALSE);UpdateData(TRUE);
}Judy
-
UpdateData (TRUE) puts the values currently in the controls into the variables. You need to call UpdateData (FALSE) to move the variable values into the screen controls. Note that I have added a line. This is so that if you have other controls on the screen, you won't lose the values the user might have changed on the screen when you call UpdateData (FALSE).
void CDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
dlg_level = dlg_sldr.GetPos();CformView* form = (CformView*) GetParent();
UpdateData (TRUE);
form->form_level = dlg_level;
form->UpdateData(FALSE);UpdateData(TRUE);
}Judy
JudyL_FL wrote:
UpdateData (TRUE) puts the values currently in the controls into the variables. You need to call UpdateData (FALSE) to move the variable values into the screen controls.
All the more reason why
UpdateData()
should rarely, if ever, be used.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
OnTimer in the dialog class: void CDlg::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); dlg_level = dlg_sldr.GetPos(); CformView* form = (CformView*) GetParent(); form->form_level = dlg_level; form->UpdateData(TRUE); UpdateData(TRUE); } then from form view class: void CformView::OnViewDlg() { CDlg dialog; dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); } hope this makes sense
How does this answer the question, "Does
GetParent()
return the correct parent address?"void CDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
dlg_level = dlg_sldr.GetPos();CformView\* form = (CformView\*) GetParent(); // what is the value of 'form' here? form->form\_level = dlg\_level; form->UpdateData(TRUE); UpdateData(TRUE);
}
void CformView::OnViewDlg()
{
CDlg dialog;
// what is the value of the 'this' pointer here?
dialog.dlg_level = form_sldr.GetPos();
dialog.DoModal();
}Since
CDlg
is a modal dialog, I question whether this will even work, since messages sent to its parent will be blocked untilDoModal()
returns.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
UpdateData (TRUE) puts the values currently in the controls into the variables. You need to call UpdateData (FALSE) to move the variable values into the screen controls. Note that I have added a line. This is so that if you have other controls on the screen, you won't lose the values the user might have changed on the screen when you call UpdateData (FALSE).
void CDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
dlg_level = dlg_sldr.GetPos();CformView* form = (CformView*) GetParent();
UpdateData (TRUE);
form->form_level = dlg_level;
form->UpdateData(FALSE);UpdateData(TRUE);
}Judy
thanks very much, i understand UpdateData a bit more now, i think i must have initialised something incorrectly, this still doesnt seem to update the values in the form.. the pointer to the main form is working correctly, if i call something like form->CloseWindow() during OnTimer it works.. i'm using OnTimer() in the main form to actually call the function which sets the volume: void CformView::OnTimer(UINT_PTR nIDEvent) { CFormView::OnTimer(nIDEvent); SetVolume(form_level); UpdateData(FALSE); } would this still get called during the life of the dialog or do i need to set the volume somewhere else? also is it possible some of the properties of the dialog could be effecting things?? really racking my brain here.. thanks
-
How does this answer the question, "Does
GetParent()
return the correct parent address?"void CDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
dlg_level = dlg_sldr.GetPos();CformView\* form = (CformView\*) GetParent(); // what is the value of 'form' here? form->form\_level = dlg\_level; form->UpdateData(TRUE); UpdateData(TRUE);
}
void CformView::OnViewDlg()
{
CDlg dialog;
// what is the value of the 'this' pointer here?
dialog.dlg_level = form_sldr.GetPos();
dialog.DoModal();
}Since
CDlg
is a modal dialog, I question whether this will even work, since messages sent to its parent will be blocked untilDoModal()
returns.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
void CDlg::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); dlg_level = dlg_sldr.GetPos(); CformView* form = (CformView*) GetParent(); // form points to the main form class correctly form->form_level = dlg_level; form->UpdateData(TRUE); UpdateData(TRUE); } void CformView::OnViewDlg() { CDlg dialog; // this points to the main form class as this is a member function dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); } i did consider a modal dialog as bieng inappropriate for this but was unsure as i dont actually need to control the main window whilst the dialog is open, i just want to update some variables..
-
void CDlg::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); dlg_level = dlg_sldr.GetPos(); CformView* form = (CformView*) GetParent(); // form points to the main form class correctly form->form_level = dlg_level; form->UpdateData(TRUE); UpdateData(TRUE); } void CformView::OnViewDlg() { CDlg dialog; // this points to the main form class as this is a member function dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); } i did consider a modal dialog as bieng inappropriate for this but was unsure as i dont actually need to control the main window whilst the dialog is open, i just want to update some variables..
bimgot wrote:
...i dont actually need to control the main window whilst the dialog is open, i just want to update some variables..
So why call
UpdateData()
then?void CformView::OnViewDlg()
{
CDlg dialog;
dialog.dlg_level = form_sldr.GetPos();
dialog.DoModal();
// is form_level correct at this point?
}
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
bimgot wrote:
...i dont actually need to control the main window whilst the dialog is open, i just want to update some variables..
So why call
UpdateData()
then?void CformView::OnViewDlg()
{
CDlg dialog;
dialog.dlg_level = form_sldr.GetPos();
dialog.DoModal();
// is form_level correct at this point?
}
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
i dont believe it is no.. if i call void CformView::OnViewDlg() { CDlg dialog; dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); form_sldr.SetPos(dialog.dlg_level); } this updates the variable when the dialog is closed, but i want to update the variable as the dialog is running.. trying the same but with: form_sldr.SetPos(form_level); after DoModal(); doesnt update the control in the same way..
-
i dont believe it is no.. if i call void CformView::OnViewDlg() { CDlg dialog; dialog.dlg_level = form_sldr.GetPos(); dialog.DoModal(); form_sldr.SetPos(dialog.dlg_level); } this updates the variable when the dialog is closed, but i want to update the variable as the dialog is running.. trying the same but with: form_sldr.SetPos(form_level); after DoModal(); doesnt update the control in the same way..
bimgot wrote:
i want to update the variable as the dialog is running
Which contradicts your earlier statement of, "...i dont actually need to control the main window whilst the dialog is open." :confused:
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
bimgot wrote:
i want to update the variable as the dialog is running
Which contradicts your earlier statement of, "...i dont actually need to control the main window whilst the dialog is open." :confused:
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne