Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2009, 16:26   #11
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Цитата:
Я не разобрался сходу, зачем нужен TranslateMessage(&msg); (в Олеговом коде), но работать должно и без него.
Да, разумеется, в данном случае, эта функция, по сути, не нужна. Я оставил ее потому что, целью было показать создание не только самой движущейся синусоиды, а самого окна, которое может послужить основной для других приложений, а так же модификаций текущего, если кто-то решит разбираться с этим примером и пробовать что-то свое, как то улучшать. А нужна эта функция для преобразования скан-кодов нажатых клавиш, помогает устранять некоторые проблемы с совместимостью программ. А в данном случае, т.к. нет никакой обработки нажатых клавиш - то надобность в этой функции и отпадает...

Цитата:
Вопрос Олегу: SetTimer() находится в WindowProcedure(). То есть при любом событии (при движении мышки, и т. д) будет устанавливаться таймер? Странно, если это работает...
Да, понимаю что это выглядит несколько странно... и может глупо, но тем не менее, как это не удивительно, очень даже работоспособно, в чем каждый может убедиться, скомпилировав исходник.

Я сам не являюсь большим знатоком WinAPI, просто стараюсь поделиться тем, что знаю и в чем разобрался. Придерживаюсь концепции, что лучший способ что-то изучить и закрепить изученное - это объяснять это кому то другому
oleg kutkov вне форума Ответить с цитированием
Старый 06.08.2009, 16:30   #12
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Цитата:
Сообщение от RomT24 Посмотреть сообщение
Добрый день!
Как в Dev C++ запустить эту программу , "закрыв глаза" на эти ошибки (преобразование типов и тд)? Компилятор закрывать на это глаза не хочет, как настроить его, чтобы все запустилось?
Перед тем как опубликовать исходник здесь, я проверил, как код компилируется в Dev C++ (4.9.9.2), все работало. Во время компиляции выдается длинный список Warning-ов, но они помешать компиляции не могут, прерывают компиляцию только Error-ы. Если Ваш компилятор выдает какие то ошибки, при компиляции этого кода - напишите их сюда, будем разбираться.
oleg kutkov вне форума Ответить с цитированием
Старый 06.08.2009, 16:45   #13
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Радость

Вот, я скопировал все ошибки (для удобства сделав в формате кода):
Код:
Компилятор: Default compiler
Выполнение  g++.exe...
g++.exe "C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp" -o "C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.exe"   -pg -g3  -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include"  -I"C:\Dev-Cpp\include\c++\3.4.2\backward"  -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32"  -I"C:\Dev-Cpp\include\c++\3.4.2"  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib" -lgmon -pg  -g3 
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp: In function `void DrawDiagram(HWND__*, HDC__*, int)':
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:101: warning: passing `double' for converting 2 of `BOOL SetViewportOrgEx(HDC__*, int, int, tagPOINT*)'

C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:118: warning: converting to `int' from `double'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:119: warning: converting to `int' from `double'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:123: warning: converting to `int' from `double'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:131: warning: converting to `int' from `double'

C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:132: warning: converting to `int' from `double'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:135: warning: converting to `int' from `double'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:155: warning: passing `double' for converting 3 of `BOOL MoveToEx(HDC__*, int, int, tagPOINT*)'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:157: warning: converting to `int' from `double'

C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:158: warning: passing `double' for converting 2 of `BOOL LineTo(HDC__*, int, int)'
C:\Users\VENIAMIN\AppData\Local\Temp\Rar$DI08.906\main.cpp:158: warning: passing `double' for converting 3 of `BOOL LineTo(HDC__*, int, int)'

C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x3a7): In function `Z11DrawDiagramP6HWND(HDC__ *, int)':
C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:98: undefined reference to `SetMapMode@8'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x3cb):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:99: undefined reference to `SetWindowExtEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x3f1):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:100: undefined reference to `SetViewportExtEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x45a):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:101: undefined reference to `SetViewportOrgEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x542):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:114: undefined reference to `CreatePen@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x560):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:115: undefined reference to `SelectObject@8'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x614):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:124: undefined reference to `MoveToEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x633):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:125: undefined reference to `LineTo@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x682):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:126: undefined reference to `TextOutA@20'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x762):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:136: undefined reference to `MoveToEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x781):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:137: undefined reference to `LineTo@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x7cd):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:138: undefined reference to `TextOutA@20'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x802):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:142: undefined reference to `CreatePen@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x820):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:143: undefined reference to `SelectObject@8'
RomT24 вне форума Ответить с цитированием
Старый 06.08.2009, 16:45   #14
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Радость

Код:
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x846):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:145: undefined reference to `MoveToEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x866):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:145: undefined reference to `LineTo@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x88e):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:146: undefined reference to `MoveToEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x8ae):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:146: undefined reference to `LineTo@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x8cd):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:149: undefined reference to `CreatePen@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x8eb):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:150: undefined reference to `SelectObject@8'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0x98d):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:155: undefined reference to `MoveToEx@16'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0xa3d):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:158: undefined reference to `LineTo@12'
C:\Users\VENIAMIN\AppData\Local\Temp/cckhbaaa.o(.text+0xa68):C:/Users/VENIAMIN/AppData/Local/Temp/Rar$DI08.906/main.cpp:161: undefined reference to `SelectObject@8'
collect2: ld returned 1 exit status

Выполнение завершено
Буду ждать советов!
RomT24 вне форума Ответить с цитированием
Старый 06.08.2009, 17:01   #15
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Цитата:
Цитата:
Вопрос Олегу: SetTimer() находится в WindowProcedure(). То есть при любом событии (при движении мышки, и т. д) будет устанавливаться таймер? Странно, если это работает...
Да, понимаю что это выглядит несколько странно... и может глупо, но тем не менее, как это не удивительно, очень даже работоспособно, в чем каждый может убедиться, скомпилировав исходник.

Я сам не являюсь большим знатоком WinAPI, просто стараюсь поделиться тем, что знаю и в чем разобрался. Придерживаюсь концепции, что лучший способ что-то изучить и закрепить изученное - это объяснять это кому то другому
Я тоже только начал разбираться с Win32API в C++, но так действительно не совсем правильно...
В этом можно убедиться щёлкая мышкой в окне программы - синусоида перестаёт двигаться...

Предлагаю чуть подправить:
Код:
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	RECT rect;
	static int offset = 0;
	switch (message)
	{
		case WM_CREATE:
			SetTimer(hWnd, 1, 1, NULL); // "включаем" таймер при запуске
			return 0;
		case WM_TIMER:
			GetClientRect(hWnd, &rect);
			InvalidateRect(hWnd, &rect, true);
			UpdateWindow(hWnd);
			++offset;
			SetTimer(hWnd, 1, 150, NULL); // таймер сам задаёт через сколько ему повторяться...
			return 0;
		case WM_PAINT:
			PAINTSTRUCT ps;
			HDC hdc;
			hdc = BeginPaint(hWnd, &ps);
			DrawDiagram(hWnd, hdc, offset);
			EndPaint(hWnd, &ps);
			return 0;
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
P.S. Там ещё какие-то заморочки с break/return есть... В разных самоучителях всегда по-разному пишут что надо ставить...
Я обычно return пишу, а то с break у меня один очень неприятный глюк был...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 06.08.2009, 17:01   #16
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Все понятно, Вы создаете проект "Консольное приложение" (Console application), а нужно "Приложение Windows" (Windows Application).
Просто в Вашем случае получается, что во время компиляции не происходит подключение нужных библиотек, а подключается только windows.h, в результате компиялятор имеет только объявления функций, но не их реализацию, о чем он нам и говорит:
Код:
main.cpp:161: undefined reference to `SelectObject@8'
Создайте правильный тип проекта и пробуйте, все должно получится.
oleg kutkov вне форума Ответить с цитированием
Старый 06.08.2009, 17:07   #17
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

DomiNick, спасибо за исправление, так действительно намного корректнее, что-то я не догадался прицепиться к событию создания окна, оно ж один раз, за время выполнения приложения, происходит...

Что-то глючит и задвоился мой пост. Модераторы, удалите, пожалуйста, один.
oleg kutkov вне форума Ответить с цитированием
Старый 23.08.2009, 23:59   #18
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Эх... Допустил я всё таки ошибку...
С таймером вот так правильнее (я наверное сначала с JavaScript попутал):
Код:
		case WM_CREATE:
			SetTimer(hWnd, 1, 150, NULL); // "включаем" таймер
			return 0;
		case WM_TIMER:
			GetClientRect(hWnd, &rect);
			InvalidateRect(hWnd, &rect, true);
			UpdateWindow(hWnd);
			++offset;
			return 0;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 13.09.2009, 02:47   #19
s20
Заблокирован
 
Регистрация: 10.09.2009
Сообщений: 10
По умолчанию

Error 1 error C2440: 'initializing' : cannot convert from 'const char [12]' to 'TCHAR []' c:\users\администратор\documents\vi sual studio 2008\projects\osc\osc\1.cpp 10 osc
Error 2 error C2440: 'initializing' : cannot convert from 'const char [7]' to 'TCHAR []' c:\users\администратор\documents\vi sual studio 2008\projects\osc\osc\1.cpp 11 osc
Error 3 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [32]' to 'LPCWSTR' c:\users\администратор\documents\vi sual studio 2008\projects\osc\osc\1.cpp 38 osc
Error 4 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [21]' to 'LPCWSTR' c:\users\администратор\documents\vi sual studio 2008\projects\osc\osc\1.cpp 44 osc
Error 9 error C2664: 'TextOutW' : cannot convert parameter 4 from 'char *' to 'LPCWSTR' c:\users\администратор\documents\vi sual studio 2008\projects\osc\osc\1.cpp 125 osc
Error 13 error C2664: 'TextOutW' : cannot convert parameter 4 from 'char *' to 'LPCWSTR' c:\users\администратор\documents\vi sual studio 2008\projects\osc\osc\1.cpp 140 osc

вот такие ошибки выдает мне
s20 вне форума Ответить с цитированием
Старый 26.09.2009, 23:28   #20
AlexWM
 
Аватар для AlexWM
 
Регистрация: 26.09.2009
Сообщений: 4
По умолчанию

объявление стабильного тайера еще реализовывается вот так:
Код:
SetTimer(hWnd, 1, 150, NULL);
while(GetMessage(&msg, NULL, 0, 0)) 
{ 
	TranslateMessage(&msg);
	DispatchMessage(&msg);
}
KillTimer(hwnd, 1);
т.е запускаем при цикле обработки сообщений и уничтожаем после WM_DESTROY
AlexWM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимированный Gif в компоненте Image Ermiss Мультимедиа в Delphi 17 12.09.2010 06:11
БД на WinApi yngwie Win Api 3 09.03.2009 20:54
Анимированный фон Delph1n Мультимедиа в Delphi 11 31.01.2009 14:47
USB осцилограф Toha Chorniy Помощь студентам 1 13.10.2008 19:47
WinApi Andr Безопасность, Шифрование 3 17.06.2007 13:38