Почему в этой программе переменная объявлена дважды? (C++, WinAPI) - Вопросы по С+
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Почему в этой программе переменная объявлена дважды? (C++, WinAPI)

Регистрация
7 Май 2013
Сообщения
98
Репутация
-3
Спасибо
0
Монет
0
Первый HWND hwnd и есть дескриптор создаваемого окна. Можно понаделать HWND hwnd1 = CreateWindow(... HWND hwnd2 = CreateWindow(... HWND hwnd3 = CreateWindow(... WndProc - это callback фукнкция. Окно работает в ином потоке чем сама программа. Тот поток смотрит что за действия были сделаны и потом посылает сообщение, грубо говоря делает так int num_of_windows = GetNumOfCreatedWindows(); // 3 окна мы сделали for( int i = 0; i < num_of_windows; ++i ){ HWND hWnd = GetCreatedWindowById( i ); if( GetWindowMessage( hWnd ) ){ // если есть какое сообщение WndProc( hWnd, 1, 0, 0 ); // посылаем какое-то сообщение в программу } } ============================= В самой функции можно написать тут hwnd = параметр LONG WINAPI WndProc(HWND hwnd;, UINT Message, WPARAM wparam, LPARAM lparam) { if( hwnd == hWnd1 ) printf( "Это первое окно
" ); if( hwnd == hWnd2 ) printf( "Это второе окно
" ); if( hwnd == hWnd3 ) printf( "Это третье окно
" ); }
 
Регистрация
30 Июл 2013
Сообщения
71
Репутация
0
Спасибо
0
Монет
0
Это разные переменные. Одну переменную нельзя объявить дважды. Прежде чем изучать Windows API, надо изучить язык программирования C или C++.
 
Регистрация
8 Июл 2013
Сообщения
73
Репутация
0
Спасибо
0
Монет
0
Почитай про область видимости переменных, есть глобальные переменные, есть локальные. Из функции WinMain() вторую перемененную hwnd из WinProc() не видно и наоборот. Следовательно, локальные переменные из разных функций модно называть одним и тем же именем. Всё остальное нельзя. (С приставкой static это уже отдельная тема)
 
Регистрация
7 Мар 2017
Сообщения
6
Репутация
0
Спасибо
0
Монет
0
void TEST( HWND hwnd )
{
printf( hwnd, "0x%08X");
}

void main()
{
HWND hwnd;

TEST( NULL );

TEST( hwnd );

hwnd = ::FindWindow("Notepad", NULL);

TEST( hwnd );
}
 
Последнее редактирование:
Регистрация
13 Мар 2017
Сообщения
314
Репутация
70
Спасибо
11
Монет
0
Это абсолютно разные переменные, переменную в С++ нельзя объявить дважды.
Прежде чем лезть в Windows API стоит изучить основы С\С++.
Изучи материал про область видимости переменных, существуют глобальные и локальные переменные. Из функции WinMain() вторую перемененную hwnd смотря на WinProc() не видно и наоборот. Следовательно, локальные переменные из разных функций модно называть одним и тем же именем.
 
Сверху Снизу