Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 06:39
Оценка:
Как получить hwnd элемента диалога с другого класса?

Допустим, сижу в другом классе диалоге
и при одном событии сделать недоступной некоторую кнопку другого диалога класса:

void MyClass::MyFucntion()
{
...
CButton *myButton;
COtherDialog *otherDlg;

myButton=(CButton*)GetDlgItem(otherDlg, IDC_BUTTON)
myButton->EnableWindow(FALSE)
...
}
при компиляции не получается, Ошибка памяти (не туда read).
/LAPD/
Re: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 06:43
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>Как получить hwnd элемента диалога с другого класса?


LAPD>Допустим, сижу в другом классе диалоге

LAPD>и при одном событии сделать недоступной некоторую кнопку другого диалога класса:

LAPD>void MyClass::MyFucntion()

LAPD>{
LAPD>...
LAPD>CButton *myButton;
LAPD>COtherDialog *otherDlg;

LAPD>myButton=(CButton*)GetDlgItem(otherDlg, IDC_BUTTON)

myButton->>EnableWindow(FALSE)
LAPD>...
LAPD>}
LAPD>при компиляции не получается, Ошибка памяти (не туда read).

myButton=(CButton*)otherDlg->GetDlgItem(IDC_BUTTON)
!0xDEAD
Re[2]: Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 07:00
Оценка:
Все равно не пашет, вот фрагмент кода, обьяснение ниже:

void CPage1::OnShowWindow(BOOL bShow, UINT nStatus) 
{
    CDialog::OnShowWindow(bShow, nStatus);
CButton *myButton=new; 
CPage3 *page3; 
 
myButton=(CButton*)page3->GetDlgItem(IDC_APPLY);
myButton->EnableWindow(FALSE);
}


Сначала компилятор выдает предупреждение:
warning C4700: local variable 'page3' used without having been initialized.
При запуске та же самая ошибка!
Может проблема в выделении памяти?!?!?!? Как решить проблему? Срочно нужен фрагмент поправки кода...
/LAPD/
Re[3]: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 07:10
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>Все равно не пашет, вот фрагмент кода, обьяснение ниже:


LAPD>
LAPD>void CPage1::OnShowWindow(BOOL bShow, UINT nStatus) 
LAPD>{
LAPD>    CDialog::OnShowWindow(bShow, nStatus);
LAPD>CButton *myButton=new; 
LAPD>CPage3 *page3; 
LAPD> 
myButton=(CButton*)page3->>GetDlgItem(IDC_APPLY);
myButton->>EnableWindow(FALSE);
LAPD>}
LAPD>


LAPD>Сначала компилятор выдает предупреждение:

LAPD>warning C4700: local variable 'page3' used without having been initialized.
LAPD>При запуске та же самая ошибка!
LAPD>Может проблема в выделении памяти?!?!?!? Как решить проблему? Срочно нужен фрагмент поправки кода...

Так надо же присвоить указателю что-то
CPage3 *page3 = ???
Если я правильно тебя понял это у тебя PropertySheet и тебе надо закрыть кнопку на третьей странице ?

CButton *myButton; // = new не надо
CPropertySheet *pSheet = (CPropertySheet *) GetParent();
CPage3 *page3 = (CPage3 *) GetPage(2); // 0, 1, 2
myButton=(CButton*)page3->>GetDlgItem(IDC_APPLY);
!0xDEAD
Re: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 07:18
Оценка:
Здравствуйте LAPD, Вы писали:

Вдогонку Закралася ошибочка


CButton *myButton; // = new не надо 
CPropertySheet *pSheet = (CPropertySheet *) GetParent(); 
CPage3 *page3 = (CPage3 *) pSheet->GetPage(2); // 0, 1, 2 
myButton=(CButton*)page3->>GetDlgItem(IDC_APPLY);
!0xDEAD
Re[4]: Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 07:22
Оценка:
Здравствуйте Кирпа В.А., Вы писали:

Проблема в том, что это как раз не CPropertyPage,
а простой CTabCtrl (имитация CPropertyPage)
а в качестве вкладок используется отдельные классы — диалоги: CPage1,CPage2,Cpage3 — все порождены от CDialog.
Как и все нормальные диалоги они имеют свои эленменты — кнопки и пр.
Так вот.
На первой странице (CPage1) надо сделать одну проверку, если вдруг так и случиться, то в третьей странице отключить возможность нажатия кнопки "APPLY", которая само собой находится в другом классе и в другом диалоге.

Проблема имеет глобальный смысл. Я до сих пор не умею передавать и получать hwnd элементов и выделять под них память...Научите плз...
/LAPD/
Re[5]: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 07:31
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>Здравствуйте Кирпа В.А., Вы писали:


LAPD>Проблема в том, что это как раз не CPropertyPage,

LAPD>а простой CTabCtrl (имитация CPropertyPage)
LAPD>а в качестве вкладок используется отдельные классы — диалоги: CPage1,CPage2,Cpage3 — все порождены от CDialog.
LAPD>Как и все нормальные диалоги они имеют свои эленменты — кнопки и пр.
LAPD>Так вот.
LAPD>На первой странице (CPage1) надо сделать одну проверку, если вдруг так и случиться, то в третьей странице отключить возможность нажатия кнопки "APPLY", которая само собой находится в другом классе и в другом диалоге.

LAPD>Проблема имеет глобальный смысл. Я до сих пор не умею передавать и получать hwnd элементов и выделять под них память...Научите плз...


Судя по всему ты пользуеься каким то левым класом (неизвестным мне)
Но идея таже что и в PropertySheet

Поищи где этот класс хранит указатели на Dialogи
Ты же наверняка делаешь что то типа AddPage()
А значит должен быть метод GetPage()
Хочешь брось на моё мыло этот класс и я тебе отвечу как решить твою проблему
!0xDEAD
Re[6]: Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 07:41
Оценка:
Хмм.... CTabCtrl — это же обычный элемент везде и всюду встроенный (по крайней мере в VC6.0)
Он похож на CPropertyPage но гораздо проще, но зато ограничен в в своих фунцкиях. И никакого AddPage и GetPage там вроде нету.

Если намекнешь, то прямо сейчас кину. Сам увидешь там все просто. Ну так кинуть тебе на мыло?


/LAPD/
Re[7]: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 07:45
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>Хмм.... CTabCtrl — это же обычный элемент везде и всюду встроенный (по крайней мере в VC6.0)

LAPD>Он похож на CPropertyPage но гораздо проще, но зато ограничен в в своих фунцкиях. И никакого AddPage и GetPage там вроде нету.

LAPD>Если намекнешь, то прямо сейчас кину. Сам увидешь там все просто. Ну так кинуть тебе на мыло?



LAPD>


!0xDEAD
Re[6]: Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 08:01
Оценка:
Получил мессагу? Если возникнут вопросы, то по адресу
victor_id@sakha.ru
/LAPD/
Re[7]: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 08:16
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>Получил мессагу? Если возникнут вопросы, то по адресу

LAPD>victor_id@sakha.ru

Вот в том месте где был глюк надо делать так


 CTabCtrl    *pTab = (CTabCtrl *) GetParent();
 TCITEM tci;
 memset(&tci, 0, sizeof(tci));
 tci.mask = TCIF_PARAM;
 pTab->GetItem(2, &tci);
 CPage3 *pPage3 = (CPage3 *) tci.lParam;
 if (pPage3 != NULL && ::IsWindow(pPage3->m_hWnd))
 {
    CButton *myButton=(CButton*)pPage3->GetDlgItem(IDC_APPLY);
    myButton->EnableWindow(FALSE);
 }
!0xDEAD
Re[8]: Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 08:27
Оценка:
!!!!!! Так много надо писать чтобы получить контроль над одной кнопкой??? !!!!!! А проще никак?
Допустим что так оно и есть. А если я буду производить много разлчных операций над этой кнопкой, и не только кнопкой, а скажем CListBox ом или чем нибудь другим?
/LAPD/
Re[9]: Как получить hwnd контрола диалога с др. класса???
От: Кирпа В.А. Украина  
Дата: 23.04.02 08:32
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>!!!!!! Так много надо писать чтобы получить контроль над одной кнопкой??? !!!!!! А проще никак?

LAPD> Допустим что так оно и есть. А если я буду производить много разлчных операций над этой кнопкой, и не только кнопкой, а скажем CListBox ом или чем нибудь другим?

Ты не любишь кошек? Просто ты не умеешь их готовить!
!0xDEAD
Re[10]: Как получить hwnd контрола диалога с др. класса???
От: LAPD  
Дата: 23.04.02 08:39
Оценка:
Я так и предполагал что так ответишь.
Но все же...
/LAPD/
Re[9]: Как получить hwnd контрола диалога с др. класса???
От: Аноним  
Дата: 23.04.02 12:42
Оценка:
Здравствуйте LAPD, Вы писали:

LAPD>!!!!!! Так много надо писать чтобы получить контроль над одной кнопкой??? !!!!!! А проще никак?

LAPD> Допустим что так оно и есть. А если я буду производить много разлчных операций над этой кнопкой, и не только кнопкой, а скажем CListBox ом или чем нибудь другим?
а кто мешает добавить переменную в тот диалог где кнопка
ассоциировать ее с кнопкой один раз при инициализации диалога
а потом дергать каждый раз когда надо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.