Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

как заставить окно Пыгать? WIN32

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> как заставить окно Пыгать? WIN32
Имя
Сообщение << Старые топики   Новые топики >>
как заставить окно Пыгать? WIN32 - 2009-06-12 00:12:23.910000   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
вообщем читаю флёнова С++ глазами хакера.
там все както мудрёно..приложение создаётся по умолчанию и в него даписывается код.Я так пробывал работат.но ничего не понятно.
я изучил другую книгу по ВИН32 ФИногенова.вот мальца подругому описывается вся это.
Вообщем задача заставить Окно ПРЫГАТЬ. ф-ция из фленова.void DrawStartButton() { int i; HANDLE h; int toppos=GetSystemMetrics(SM_CYSCREEN)-23; //Отображаем окно ShowWindow(hWnd, SW_SHOW); //Установить верхнюю позицию окна в левый нижний угол экрана. SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW); UpdateWindow(hWnd); //Создаем пустой указатель h, который будем использовать для задержки. h=CreateEvent(0, true, false, "et"); // Сейчас будем поднимать кнопку // От 1 до 50 выполнять действия для изменения положения окна for (i=0; i&lt;50; i++) { toppos=toppos-4; SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW); WaitForSingleObject(h,15);//Задержка в 5 миллисекунд } // Опускаем кнопку вниз for (i=50; i&gt;0; i--) { toppos=toppos+4; SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW); WaitForSingleObject(h,15);//Задержка в 5 миллисекунд } }
Post #: 1
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 00:14:50.093333   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
quote:

ORIGINAL: 61.masquit

вообщем читаю флёнова С++ глазами хакера.
там все както мудрёно..приложение создаётся по умолчанию и в него даписывается код.Я так пробывал работат.но ничего не понятно.
я изучил другую книгу по ВИН32 ФИногенова.вот мальца подругому описывается вся это.
Вообщем задача заставить Окно ПРЫГАТЬ. ф-ция из фленова.void DrawStartButton() { int i; HANDLE h; int toppos=GetSystemMetrics(SM_CYSCREEN)-23; //Отображаем окно ShowWindow(hWnd, SW_SHOW); //Установить верхнюю позицию окна в левый нижний угол экрана. SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW); UpdateWindow(hWnd); //Создаем пустой указатель h, который будем использовать для задержки. h=CreateEvent(0, true, false, "et"); // Сейчас будем поднимать кнопку // От 1 до 50 выполнять действия для изменения положения окна for (i=0; i&lt;50; i++) { toppos=toppos-4; SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW); WaitForSingleObject(h,15);//Задержка в 5 миллисекунд } // Опускаем кнопку вниз for (i=50; i&gt;0; i--) { toppos=toppos+4; SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW); WaitForSingleObject(h,15);//Задержка в 5 миллисекунд } } так hWnd у меня ГЛОБАЛЬНЫЙ! тока куда вставлять Вызов этой ф-ци.или что-то надо изменить??? WinMain у мя следующий?int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int) { char szClassName[]="window"; char szTitle[]="Prog1";//заголовок программы MSG Msg; WNDCLASS wc; hI=hInst; ZeroMemory(&wc,sizeof(wc)); wc.lpfnWndProc=WndProc; wc.hInstance=hInst;//дискриптор приложения wc.hIcon= LoadIcon(NULL,IDI_APPLICATION); wc.hCursor= LoadCursor(NULL,IDC_ARROW); wc.hbrBackground= CreateSolidBrush(RGB(200,200,100)); wc.lpszMenuName="Main"; wc.lpszClassName=szClassName; RegisterClass(&wc); //////////////////////////////////////////// HWND hwnd=CreateWindow(szClassName,szTitle,WS_OVERLAPPEDWINDOW, 0,0,10,60, HWND_DESKTOP, NULL, hInst, NULL);//hwndMain дискпиптор главного окна! ShowWindow(hwnd,SW_SHOWNORMAL); BOOL DrawStartButton(HWND,LPCREATESTRUCT); //void DrawStartButton(); while (GetMessage(&Msg,0,0,0)) { void DrawStartButton(); TranslateMessage(&Msg); DispatchMessage(&Msg); } return 0;че не так извините за дерзость…..8|

Post #: 2
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 00:33:56.010000   
Dazem

Сообщений: 2
Оценки: 0
Присоединился: 2009-05-30 14:51:10.636666
Прыгать ? Всмысле прыгать? Просто сделай перемещение его , с последующим возвратом)) Непонятно что ты подозреваешь под словом "Прыгать"
Post #: 3
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 01:05:59.556666   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
вообщем надо чтоб окно перемещалось по экрану.ВОТ
Post #: 4
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 01:46:45.606666   
QunneD

Сообщений: 833
Оценки: 0
Присоединился: 2008-11-09 20:54:38.113333
После прочтения твоего поста, глаза до сих пор болят.


Post #: 5
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 02:16:23.600000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Чёто-то не понятно, в чём заключается вопрос автора. написать за него прогу?
Post #: 6
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 02:20:54.483333   
QunneD

Сообщений: 833
Оценки: 0
Присоединился: 2008-11-09 20:54:38.113333
Что-то типо того… А вообще гугл в помощь
Post #: 7
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 09:56:34.790000   
...Kill.|.Code...

Сообщений: 267
Оценки: 0
Присоединился: 2009-03-13 13:41:42.036666
Не в билдере пишешь /?[X(]
Post #: 8
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 10:37:05.730000   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
проблема в том что есть функция. я её вызываю но ничего не происходит.в чём причина? может для нее надо писать оброботчик какогонить сообщения??
Post #: 9
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 14:11:11.550000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
61.masquit, код не читал, но могу кое-что сказать. Понимаешь, в винде (и во всех системах) есть такая вещь как API. Окно - это часть винды, его тип в иерархии объектов TWinControl. У всех TWinControl-ов есть Handle, а точнее дескриптор. Нам надо что бы окно прыгало. Для начало нужно определится какое окно. Значит нам нужен его дескриптор. Запустим приложение "Калькулятор", и получим его дескриптор следующим образом:
HWND h; h=FindWindow(NULL, "Калькулятор"); Дескриптор получили, далее нужно заставить окно наше окно прыгать. Это значит, что нужно сначала сохранить старые координаты окна, далее переместить окно на позицию выше его позиции, сделать задержку, а потом вернуть окно на старые координаты. Я уже не буду описывать код, но скажу функции:
GetWindowPos - получить верний-левый угол окна.
MoveWindow - перемесить окно.
Можно также для плавного перемещения окна перемещать окно не сразу на новую позицию, а по частям, постепенно до нее доходя. Все это лучше делать по таймеру, или в цикле, но использовать еще Application->ProcessMessages для проверки очереди сообщений процесса, т.к. если цикл крутится, то ты не сможешь ни нажать кнопку, ни закрыть приложение. Короче, дальше сам.
Post #: 10
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 14:38:26.793333   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
да в том ТО и дело что Если Использовать "int APIENTRY _tWinMain" —котороя создаётся при создании проекта по умолчанию ТО! всё очень даже работает.
А если я использую свою муть как у Финагенова то ШИШ! в этом то и Вопрос.
Я ставил паузу и смотрел значение hwnd у мя одинаковое везде "0x000604a2".
Post #: 11
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 15:26:11.233333   
Hateman

Сообщений: 62
Оценки: 0
Присоединился: 2009-06-06 20:22:22.040000
Ты хочешь, чтобы у тебя было окно с кнопкой, которая перемещается вверх-вниз?

quote:

int APIENTRY _tWinMain

Ну и что тебе ещё нужно?

quote:

А если я использую свою муть как у Финагенова

Выбрось ты эту книжку. Хорошо хоть первую выбросил. Прочитай Бьярна (сам я не осилил, но всё ещё надеюсь на что-то).

Это что за бред ?:
//Создаем пустой указатель h, который будем использовать для задержки.
h=CreateEvent(0, true, false, "et");
Post #: 12
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 16:18:29.503333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Это таймеры через (_!_), на пару с WaitForSingleObject.
Post #: 13
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 17:19:30.360000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
_SaZ_, ответь мне на вопрос, этот код оптимизирован, и никак проще прыжок окна не сделать? Просто у меня такое ощущение, что 61.masquit
пропустил мой пост.
61.masquit, пойми, лучще все пробовать самому, а из книжек брать только небольшие примеры и теорию, потому что, если ты будешь копипастить из книжек целые программы, то с ними еще надо разобраться. Вот если ты напишешь эту прогу сам, без книги, то твой опыт заметно увеличится. Здесь надо поверхностно устойство винды (сообщения, потоки, процессы) и пару API-функций.
Post #: 14
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 19:49:39.330000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Я бы делал по таймеру. Максимально просто. :)
Post #: 15
RE: как заставить окно Пыгать? WIN32 - 2009-06-12 21:42:04.240000   
Hateman

Сообщений: 62
Оценки: 0
Присоединился: 2009-06-06 20:22:22.040000
2__Saz__:
quote:

Это таймеры через (_!_), на пару с WaitForSingleObject.

Надеюсь, что код не ты писал. Зачем нужно поименованное событие и что за бред в комментарии?
А через waitable, если так wait-функции любимы, тогда уж почему не сделать?
Post #: 16
RE: как заставить окно Пыгать? WIN32 - 2009-06-13 00:59:48.540000   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
ребят чёто вы в лес у шли. ворос стоит не в Силе ф-ции перемещения, а почему она не работает Вмоём winmain,но ПРЕКРАСНО пашет в int APIENTRY _tWinMain" —котороя создаётся по умолчанию при создании проекта.
Post #: 17
RE: как заставить окно Пыгать? WIN32 - 2009-06-13 01:11:35.313333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Нет, код не я писал )), я к нему вообще не имею никакого отношения.

P.S. у автора в сообщении написано, откуда код.
Post #: 18
RE: как заставить окно Пыгать? WIN32 - 2009-06-13 10:07:01.696666   
Hateman

Сообщений: 62
Оценки: 0
Присоединился: 2009-06-06 20:22:22.040000
quote:

P.S. у автора в сообщении написано, откуда код.

Я правда вчера не пил. "Бы" не отпарсил.
Post #: 19
RE: как заставить окно Пыгать? WIN32 - 2009-06-13 10:15:01.680000   
Hateman

Сообщений: 62
Оценки: 0
Присоединился: 2009-06-06 20:22:22.040000
quote:

а почему она не работает Вмоём winmain,но ПРЕКРАСНО пашет в int APIENTRY _tWinMain" —котороя создаётся по умолчанию при создании проекта.

Хм… Для начала:
1.) Почему бы тебе не использовать функцию, которая создаётся по умолчанию?
2.) В твоей функции всё остальное работает?
Post #: 20
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> как заставить окно Пыгать? WIN32







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.