powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / голый си, winapi, пытался сделать прикол с убегающей кнопкой +
12 сообщений из 12, страница 1 из 1
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205081
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прохожий нагибается мышку подводишь к кнопке, а кнопка убегает

1)
пытался отследить событие WM_MOUSEMOVE, при движении над кнопкой не попадаю в обработчик главного окна
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  case WM_MOUSEMOVE: // мышка двигается
    if(_dbg) {
     GetClientRect(hWnd, &rc);      // нарисовать координаты мыши
     rc.top+=3*(lttH+1);
     rc.bottom+=lttH+3*(lttH+1);
     InvalidateRect(hWnd, &rc, TRUE);    

     wsprintf(wbuf4, L"coor y/x %d/%d", h, l);


2)
пока не нашел как изменить обработчик для окна кнопки.
3)
через WM_PARENTNOTIFY добился убегания кнопки после нажатия оной


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
  case WM_PARENTNOTIFY: // нажатие клавиши.
      fprintf(out, "+++PARENTNOTIFY : mouse position X/Y: %d/%d\n", (int)l, (int)h); 
      fwEvent = LOWORD(wParam);
      if (fwEvent == WM_LBUTTONDOWN){
         POINT mScrPos;
         POINT pos;
         mScrPos.x = l;
         mScrPos.y = h;
         fprintf(out, "   WM_click is here\n"); 
         GetWindowRect(hWndB, &rc);   // абсолютная позиция на экране кнопки
         ClientToScreen(hWnd, &mScrPos); // 
         fprintf(out, "   absolute mouse position X/Y:  %d/%d\n"
                                  , (int)(mScrPos.x), (int)(mScrPos.y)); 


         fprintf(out, "  button position:  left/top/right/bottom %d/%d/%d/%d \n"
              , rc.left      , rc.top, rc.right  , rc.bottom    );
         if (runFlag &&  mScrPos.y >= rc.top && mScrPos.y <= rc.bottom ) { // вертикальная координата попала в кнопку 
           fprintf(out, "    vertical is here \n");

           if (mScrPos.x >= rc.left && mScrPos.x <= rc.right)  {  // горизонтальная координата попала в кнопку
             fprintf(out, "    horisontal is here \n");

           pos.x   = BUTTON_X_POS;
           pos.y   = BUTTON_Y_POS;

           if(ClientToScreen(hWnd, &pos)==0)  // абсолютная начальная позиция кнопки
             fprintf(out, "  Error while ClientToScreen: %d \n", GetLastError());
             if (rc.left > pos.x  + BUTTON_X_SZ)   //текущая левая правее абсолютного правого края
               pos.x = BUTTON_X_POS;               // вернуть назад
             else 
               pos.x = BUTTON_X_SZ +BUTTON_X_POS *2;// сдвинуть вправо
	   }
	   pos.y = BUTTON_Y_POS;                   // вертикально не двигать
           if(MoveWindow(hWndB
             , pos.x
             , pos.y
             , BUTTON_X_SZ
             , BUTTON_Y_SZ
             , TRUE
             )==0) fprintf(out, "  Error while MoveWindow: %d \n", GetLastError());
         }
      }
    break;



пните, плиз, в правильном направлении, чтобы таки убегать без нажатия?
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205085
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205131
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

Сообщение от мышки поступает в то окно, над которым находится курсор, если не задана капча. Если задана, то в то окно, куда закапчено.
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205151
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205155
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM "Mouse Capture".

Но если мышь таки догнала кнопку, то убегать поздно, попалась голубушка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205160
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizвиноват
задать капчу в окне? это защита от спама?
....
или шото другое?шото другое: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646262%28v=vs.85%29.aspx
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205232
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после SetCapture еще хуже стало, видимо руки кривые и маркер мыши стал часами.
Но эта мысль
Но если мышь таки догнала кнопку, то убегать поздно, попалась голубушка
натолкнула на использование некой окрестности (DELTA) вокруг кнопки

попал в окрестность - кнопку сместил. Визуально - почти то, что надо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
  case WM_MOUSEMOVE: // мышка двигается
    {
    POINT mScrPos;
    POINT pos;
    if(_dbg) {
     GetClientRect(hWnd, &rc);      // нарисовать координаты мыши
     rc.top+=3*(lttH+1);
     rc.bottom+=lttH+3*(lttH+1);
     rc.left+=BUTTON_X_SZ +BUTTON_X_POS*2;
     rc.right-=BUTTON_X_SZ +BUTTON_X_POS*2;
     InvalidateRect(hWnd, &rc, TRUE);    
     wsprintf(wbuf4, L"coor y/x %ld/%ld", h, l);
    }
   fprintf(out, "+++WM_MOUSEMOVE : mouse position X/Y: %d/%d\n", l, h); 
//#ifdef USE_CAPTURE
    GetWindowRect(hWndB, &rc);   // абсолютная позиция на экране кнопки
     mScrPos.x = l;
     mScrPos.y = h;
     ClientToScreen(hWnd, &mScrPos); // 
     fprintf(out, "   absolute mouse position X/Y:  %d/%d\n"
                              , (int)(mScrPos.x), (int)(mScrPos.y)); 


     fprintf(out, "   button old position:  left/top/right/bottom %d/%d/%d/%d \n"
          , rc.left      , rc.top, rc.right  , rc.bottom    );
     if (runFlag &&  mScrPos.y >= rc.top-DELTA && mScrPos.y <= rc.bottom+DELTA ) { // вертикальная координата попала в кнопку 
       fprintf(out, "    vertical is here \n");

       if (mScrPos.x >= rc.left-DELTA && mScrPos.x <= rc.right+DELTA)  {  // горизонтальная координата попала в кнопку
         fprintf(out, "    horisontal is here \n");

         pos.x   = BUTTON_X_POS;
         pos.y   = BUTTON_Y_POS;

         if(ClientToScreen(hWnd, &pos)==0)  // абсолютная начальная позиция кнопки
           fprintf(out, "  Error while ClientToScreen: %d \n", GetLastError());
         if (rc.left > pos.x  + BUTTON_X_SZ)   //текущая левая правее абсолютного правого края
           pos.x = BUTTON_X_POS;               // вернуть назад
         else 
           pos.x = BUTTON_X_SZ +(BUTTON_X_POS+DELTA) *2;// сдвинуть вправо
         pos.y = BUTTON_Y_POS;                   // вертикально не двигать
    //     fprintf(out, "   button new position:  left/top/right/bottom %d/%d \n"
     //       , pos.x      , pos.y, rc.right     );

         if(MoveWindow(hWndB    //  для кнопки координаты относительно родительского
           , pos.x
           , pos.y
           , BUTTON_X_SZ
           , BUTTON_Y_SZ
           , TRUE
           )==0) fprintf(out, "  Error while MoveWindow: %d \n", GetLastError());
       }
     }
//#endif
     break;
    }




а к обработчику мыши нет никакого доступа?
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz, будешь писать всякое раздражающее пользователя Adware?
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205521
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, блин. это я с устатку вчера вечером написал фигню
не доступ не к обработчику мыши, а к обработчику дочернего окна баттон
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205524
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ну, программировать на этом средневековье не совсем понятно зачем.
хотелось бы устать народ, но не совсем тупыми задачами. И не слишком большими по количеству кода.
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205583
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizк обработчику дочернего окна баттон
Читай "Subclassing a Window", SetWindowLong().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
    #38205800
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сенкс
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / голый си, winapi, пытался сделать прикол с убегающей кнопкой +
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]