• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Таймер в приложении Win32

  • Автор темы SaV94
  • Дата начала
S

SaV94

Здравствуйте. У меня вот какая проблема. Создаю таймер по всем правилам, функцией SetTimer, но обработчик сообщений его вовсе не видит. WM_TIMER не обрабатывается.
 
G

grigsoft

код покажи - создания и обработки.
 
S

SaV94

<!--shcode--><pre><code class='CPP'>LRESULT CALLBACK MessageProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HDC hDc; //дескриптор устройства
RECT rect;
switch(msg)
{
case WM_CREATE:
//=ИНИЦИАЛИЗАЦИЯ=
{
hDc = GetDC(hWnd);
GetClientRect(hWnd, &rect);
//=СОЗДАНИЕ ТАЙМЕРА=
/*if(*/SetTimer(hWnd,TIMER,1000,NULL)/*)
MessageBox(hWnd, L"Таймер не был создан", L"ERROR", MB_OK)*/;

SetGraphicsMode(hDc,GM_ADVANCED);
return 0;
}
case WM_PAINT:
//=РИСОВАНИЕ=
{
//=РИСОВАНИЕ ИГРОВОЙ ОБЛАСТИ=
HPEN hPen1 = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
SelectObject(hDc, hPen1);
MoveToEx(hDc, 15, 40, NULL);
LineTo(hDc,15,460);
LineTo(hDc,380,460);
LineTo(hDc,380,40);
LineTo(hDc,15,40);
DeleteObject(hPen1);
//=====РИСОВАНИЕ ОБЬЕКТОВ=====
pl1.Draw(hDc);
pl2.Draw(hDc);
return 0;
}
case WM_KEYDOWN:
//=НАЖАТИЕ КЛАВИШИ=
{
switch(wParam)
{
case VK_LEFT:
{
pl1.Hide(hDc);
if (pl1.x>17)
{
pl1.x-=5;
}
pl1.Draw(hDc);
break;
}
case VK_RIGHT:
{
pl1.Hide(hDc);
if (pl1.x<277)
{
pl1.x+=5;
}
pl1.Draw(hDc);
break;
}
case 0x41:
{
pl2.Hide(hDc);
if (pl2.x>17)
{
pl2.x-=5;
}
pl2.Draw(hDc);
break;
}
case 0x44:
{
pl2.Hide(hDc);
if (pl2.x<277)
{
pl2.x+=5;
}
pl2.Draw(hDc);
break;
}
case VK_ESCAPE:
ReleaseDC(hWnd, hDc);
PostQuitMessage(0);
return 0;
}
UpdateWindow(hWnd);
return 0;
}
case WM_TIMER:
//=ОБРАБОТКА ТАЙМЕРОВ=
{
switch(wParam)
{
case TIMER://=ТАЙМЕР 1=
{
MessageBox(NULL, L"TIMER", L"OK", MB_OK);
}
}
}
case WM_DESTROY:
//=ЗАВЕРШЕНИЕ РАБОТЫ ПРИЛОЖЕНИЯ=
{
KillTimer(hWnd,TIMER);
ReleaseDC(hWnd, hDc);
PostQuitMessage(0);
return 0;
}
default:
return (DefWindowProc(hWnd, msg,wParam,lParam));
}
}[/CODE]

Вчера все заработало, только если таймер создается в условии оператора if

Добавлено: Кто-нибудь может дать пример использования таймера?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!