Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Как поступить с Animate?


Автор: Edik 30.4.2007, 15:00
Вот господа у меня есть код:
Код

void CAnimateDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    HWND hAnim;
    GetDlgItem(IDC_ANIMATE1, hAnim);
    Animate_Open (hAnim,"Cd.avi");    
}

Который выдает следующую ошибку в строке GetDlgItem:
error C2664: 'void __thiscall CWnd::GetDlgItem(int,struct HWND__ ** ) const' : cannot convert parameter 2 from 'struct HWND__ *' to 'struct HWND__ ** '
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Автор: zkv 30.4.2007, 15:19
Код

GetDlgItem(IDC_ANIMATE1, &hAnim);

Автор: Edik 30.4.2007, 20:43
Спасибо, получилось. Но почему &hAnim а не просто hAmin?

Добавлено через 1 минуту и 39 секунд
А! Вобще понятно- так в MSDN пишеться. Спасибо.

Добавлено через 12 минут и 37 секунд
В принципе понятно. Но еще вопросик. Почему в MSDN пишеться HWND *phWnd, в смысле из объявления void CWnd::GetDlgItem( int nID, HWND* phWnd) const; а в реальной программе у нас &hAmin а не *hAnim?

Автор: zkv 30.4.2007, 21:19
Цитата(Edik @  30.4.2007,  20:43 Найти цитируемый пост)
Добавлено через 1 минуту и 39 секунд
А! Вобще понятно- так в MSDN пишеться. Спасибо.

Добавлено через 12 минут и 37 секунд
В принципе понятно. Но еще вопросик. Почему в MSDN пишеться HWND *phWnd, в смысле из объявления void CWnd::GetDlgItem( int nID, HWND* phWnd) const; а в реальной программе у нас &hAmin а не *hAnim? 

чувствую не все понятно smile
Код

//есть такая штука, что в ней лежит и сколько места в памяти занимает нам поровну сейчас
HWND hAnim;
//далее есть функция
//void CWnd::GetDlgItem( int nID, HWND* phWnd)
//ей нужен указатель на этот объект(по значению его она принять не может, так
//как ей надо изменить его значение, сорри за тафталогию :))
//передаем ей адрес объекта
GetDlgItem(IDC_ANIMATE1, &hAnim);
//осталось передать полученный объект в следущую функцию (она принимает по его значению, так как менять его ей не нужно)
Animate_Open (hAnim,"Cd.avi");    


кстати можно было бы написать так:
Код

Animate_Open ( GetDlgItem(IDC_ANIMATE1), "Cd.avi");   

Автор: Edik 1.5.2007, 12:41
Спасибо большое! Разобрался! Но я не совсем пойму терминологию указателя (может это отвлечение от моей темы). Так вот почему когда говориться указатель в программе, но мне неизвестно что писать- со "звездочкой" или просто ту же переменную указателя без "звездочки", что бы имелся в виду адрес. Когда имеется в виду адрес, а когда значение адреса, то есть "звездочка"?

Автор: zkv 1.5.2007, 13:07
Цитата(Edik @  1.5.2007,  12:41 Найти цитируемый пост)
Но я не совсем пойму терминологию указателя (может это отвлечение от моей темы). Так вот почему когда говориться указатель в программе, но мне неизвестно что писать- со "звездочкой" или просто ту же переменную указателя без "звездочки", что бы имелся в виду адрес. Когда имеется в виду адрес, а когда значение адреса, то есть "звездочка"? 

тут в двух словах не объяснить.. В "общих вопросах" столько раз уже обсуждалось.

Вкратце:
Код

int a =10; //a - целое
int *b = &a; //b - указатель на целое, в нем теперь адрес а
int c = *b;  //в c теперь лежит 10
*b = 23;  //в a теперь лежит 23, в c по прежнему 10


Вообщем миллион раз говорилось, и лучше чем я объяснятели есть smile

Автор: Edik 1.5.2007, 14:24
Спасибо, в принципе я так все и представлял. Спасибо еще раз.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)