K
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
MyString=Copy(MyString,2,length(MyString)-1)+MyString[1];
case WM_TIMER:
TextOut(hdc,x,y,"Hello!",6);
InvalidateRect(hWnd,GetClientRect(hWnd),TRUE);
x++;
if(x>=800) x=0;
break;
в первом случае не понимаю, что делает Copy; а во втором, как я думаю, строка будет выводиться до 800го пикселя по иксу в окне, а потом начинаццо с начала окна. а мне надо, чтобы она всегда бежала, причем справа налевовыше написано: первый символ переводишь в конец строки и печатаешь строку заново.
void WndProc_OnTimer(HWND hwnd, UINT id)
{
HDC hdc=GetDC(hwnd);
GetClientRect(hwnd,&rect);
TextOut(hdc,xPos,yPos,"Hello!",6);//xPos=yPos=10 первоначально
InvalidateRect(hwnd,&rect,TRUE);
xPos++;
if(xPos>=800) xPos=0;
ReleaseDC(hwnd,hdc);
}
на 1 символу меня строка должна двигаться вперед на 1 пиксел
неправильно, не надо менять координаты, надо 1 символ из начала строки перенести в конец (Froex подробно все описал).Код:void WndProc_OnTimer(HWND hwnd, UINT id) { HDC hdc=GetDC(hwnd); GetClientRect(hwnd,&rect); TextOut(hdc,xPos,yPos,"Hello!",6);//xPos=yPos=10 первоначально InvalidateRect(hwnd,&rect,TRUE); xPos++; if(xPos>=800) xPos=0; ReleaseDC(hwnd,hdc); }
а смысл в том, что он существует независимо от остальных функций. если бы ты делала это в какой-то функции тем способом, что ты описываешь, то она повисла бы (и наверняка повесила бы все приложение).а смысл этого таймера? мне кажется, можно было это все циклом от х=0 до х=800 сделать, в который добавить какой-нибудь фор для задержки. или я неправильно понимаю все это?
конечно стирает.и не стирает ли InvalidateRect то, что только что вывел TextOut?
а. согласна. InvalidateRect же и отсылает в OnPaint этот rect. но в OnTimer'e убираю InvalidateRect - все равно не идетТы определись - или рисуй в OnTimer, но убери InvalidateRect, или перенеси отрисовку в OnPaint и оставь только InvalidateRect.
в случае с TextOut это же пиксел.на 1 символ
почему? (просто я так и делаю: не могу разобраться с таймером, не работает - и всеесли бы ты делала это в какой-то функции тем способом, что ты описываешь, то она повисла бы (и наверняка повесила бы все приложение)
нет, это две совершенно разные вещи. просто переноси по символу с начала строки в конец и отображай ее на экране с неизменными координатамив случае с TextOut это же пиксел.
потому чтотаймер выполняется параллельно с другими функциямипочему?
Обучение наступательной кибербезопасности в игровой форме. Начать игру!