Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / голый си, winapi, пытался сделать прикол с убегающей кнопкой + / 12 сообщений из 12, страница 1 из 1
29.03.2013, 22:10
    #38205081
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
прохожий нагибается мышку подводишь к кнопке, а кнопка убегает

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
29.03.2013, 22:15
    #38205085
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
...
Рейтинг: 0 / 0
29.03.2013, 23:09
    #38205131
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
tchingiz,

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

Но если мышь таки догнала кнопку, то убегать поздно, попалась голубушка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.03.2013, 23:39
    #38205160
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
tchingizвиноват
задать капчу в окне? это защита от спама?
....
или шото другое?шото другое: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646262%28v=vs.85%29.aspx
...
Рейтинг: 0 / 0
30.03.2013, 02:37
    #38205232
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
после 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
30.03.2013, 02:44
    #38205233
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
tchingiz, будешь писать всякое раздражающее пользователя Adware?
...
Рейтинг: 0 / 0
30.03.2013, 17:42
    #38205521
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
ой, блин. это я с устатку вчера вечером написал фигню
не доступ не к обработчику мыши, а к обработчику дочернего окна баттон
...
Рейтинг: 0 / 0
30.03.2013, 17:44
    #38205524
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
голый си, winapi, пытался сделать прикол с убегающей кнопкой +
mayton,

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


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