Важная информация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: Обсуждение обработки мыши (расширенное)

  1. #1 Обсуждение обработки мыши (расширенное) 
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Здесь на форуме была тема, где я выкладывал частичное решение данного вопроса.
    Там буду выкладывать готовые решения, а тут можно будет пообсуждать.

    Так вот опытным путём, найдя пример создания обычного окошка, я смог через обработку сообщений
    добиться более менее сносного результата. Но проблема в общем то в другом, в FBGfx есть такой режим
    GFX_NULL, когда буфер не привязывается к специальному обработчику, позволяющему через ALT+ENTER
    переходить в полноэкранный режим и обратно(также он автоматически обновляет экран и ловит события),
    а просто отдаётся на откуп программисту. Так вот хотелось бы понять как сделать точно так же, но только
    со своим обработчиком сообщений. Я понимаю, что это ппц и на раз два не пишется, но какие-либо советы
    были бы очень кстати.

    Вообще если честно я не совсем понял специфику работы сообщений Windows, т.е. вроде бы создана
    CALLBACK функция в которую и приходят сообщения, но дополнительно в программе нужно вызывать
    PeekMessage, TranslateMessage и DispatchMessage, на кой макар оно надо если сообщения по прерыванию
    должны идти в CALLBACK функцию и обрабатываться по принципу "как только так сразу", а получается
    как я понимаю прямо наоборот.

    Я конечно эту ситуацию разрулил, создал отдельный поток и в нём: перед циклом создал окно, а в цикле
    делаю эти PeekMessage, TranslateMessage и DispatchMessage. Но всё равно было бы грамотнее как то
    без этих плясок, ибо очевидно, что сделано через задне место.

    Вот есть такой вот паршивый ко, слепленный из двух и допиленный:
    Код freebasic:
    '' Example of use of the GFX_NULL driver in windows
    '' The GfxLib is set up in the ON_Create sub
    '' The GFXLib buffer is drawn  to screen in th On_Paint Sub
    '' The GfXLib is updated in the event loop
     
    #include "fbgfx.bi"
    #include once "windows.bi"
    DECLARE SUB MsgGetThread (DTPrm AS ANY PTR)
     
      DIM SHARED AS UINTEGER ScrXRez = 320,        _
                             ScrYRez = 240,        _
                             FullSCR = 0
     
      DIM SHARED AS UINTEGER WndXRez = 1280,        _
                             WndYRez = 960
     
     
    USING FB
     
    DIM SHARED  bmi As BITMAPV4HEADER
     
    DIM SHARED TMx AS USHORT, TMy AS USHORT
    DIM SHARED Mdx AS INTEGER, Mdy AS INTEGER
    DIM SHARED Mx AS INTEGER, My AS INTEGER
    DIM SHARED AS POINT  Md, Cntr
    DIM SHARED PrgBounds AS RECT
    DIM SHARED Kdr AS INTEGER
     
    DIM SHARED  wc As WNDCLASS   
    DIM SHARED  wMsg As MSG
    DIM SHARED  hWnd As HWND
     
    DIM SHARED  szAppName As ZString * 30 => "Random Rectangles"
    DIM SHARED  MsgGetThreadID AS ANY POINTER
    DIM SHARED  Exitting AS INTEGER, FlipOk AS INTEGER
     
    DIM SHARED  i As Integer
     
     
    ''
    ''--------------------------------------------------------------------------
    FUNCTION on_paint(ByVal hwnd As HWND,ByVal wparam As WPARAM,ByVal lparam As LPARAM) As Integer
     
        Dim rct As RECT
        Dim pnt As PAINTSTRUCT
        Dim hDC As HDC
     
      'Рисуем gfx буфер на экран
      GetClientRect( hWnd, @rct )
      hDC = BeginPaint(hWnd, @pnt)
     
        SetStretchBltMode hDC, COLORONCOLOR
     
     
      StretchDIBits hDC, 0, 0,rct.Right-rct.left,rct.bottom-rct.top, 0, 0, ScrXRez, ScrYRez, ScreenPtr, CPtr(bitmapinfo Ptr, @bmi), DIB_RGB_COLORS, SRCCOPY
     
      EndPaint hWnd, @pnt
      FlipOk = -1
    END FUNCTION
     
    ''
    ''---------------------------------------------------------------------------
    FUNCTION on_Create(ByVal hwnd As HWND,ByVal wparam As WPARAM,ByVal lparam As LPARAM) As Integer
        DIM rct As RECT
        'set a gfxscreen of the size of the client area
     
        GetClientRect( hWnd, @PrgBounds)
     
        '  Изменим позицию внутреннего фрейма для точного соответствия ScrXRez, ScrYRez
        SetWindowPos(hWnd, HWND_BOTTOM, PrgBounds.left, PrgBounds.top, _
        WndXRez + (WndXRez - (PrgBounds.right - PrgBounds.left)), _
        WndYRez + (WndYRez - (PrgBounds.bottom - PrgBounds.top)), SWP_NOMOVE)
     
        ScreenRes ScrXRez, ScrYRez, 32, 1, GFX_NULL
        ' Создадим BMP заголовок, необх. для отрисовки на экран
        WITH bmi
          .bV4Size = Len(BITMAPV4HEADER)
          .bv4width= ScrXRez
          .bv4height=-(ScrYRez)   'Отрицательное значение=> От верха к низу bmp
          '(Стандартные BMP's от низа к верху)
          .bv4planes =  1
          .bv4bitcount = 32
          .bv4v4compression = 0
          .bv4sizeimage = ScrXRez * ScrYRez * 4
          .bV4RedMask = &h0F00
          .bV4GreenMask = &h00F0
          .bV4BlueMask = &h000F
          .bV4AlphaMask = &hF000
        END WITH
     
    END FUNCTION
     
     
    '  Процедура обработки сообщений
    FUNCTION WndProc ( ByVal hWnd As HWND,ByVal message As UINT, _
                       ByVal wParam As WPARAM,ByVal lParam As LPARAM ) As LRESULT
       
        SELECT CASE AS CONST  message
        CASE  WM_CREATE
            FUNCTION = On_create(hwnd,wparam,lparam)
        CASE  WM_DESTROY
            PostQuitMessage( 0 )
            Exitting = -1
            EXIT FUNCTION
        CASE  WM_MOUSEMOVE      ' если переместили мышь
            TMx = LoWord(lParam) ' сохраним координату x мыши
            TMy = HiWord(lParam) ' сохраним координату y мыши
            IF Kdr = 0 THEN SetCursorPos(Cntr.x, Cntr.y)
            Md.x = TMx
            Md.y = TMy
            ClientToScreen(hWnd, @Md)
            '   Считаем дельту
            IF Kdr = 0 THEN
              Mdx = Md.x - Cntr.x
              Mdy = Md.y - Cntr.y
              Mx += Mdx
              My += Mdy
            END IF
            Kdr = (Kdr + 1) AND 1
            'InvalidateRect(hWnd, NULL, TRUE) ' вынудить Windows послать сообщение WM_PAINT
        CASE  WM_PAINT
            FUNCTION = On_paint(hwnd,wparam,lparam)
     
     
        CASE  WM_KEYDOWN
             IF wParam = VK_ESCAPE THEN
               PostQuitMessage(0)          ' выходим из программы
               Exitting = -1
               EXIT FUNCTION
             END IF
        CASE ELSE
            FUNCTION = DefWindowProc( hWnd, message, wParam, lParam )   
        END SELECT
     
    END FUNCTION
     
    SUB MsgGetThread (DTPrm AS ANY PTR)
    DIM Ojidanie AS INTEGER
     
        hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szAppName,"Example of GFX_NULL", WS_OVERLAPPEDWINDOW OR (WS_sizebox Or ws_maximizebox),_
            CW_USEDEFAULT,CW_USEDEFAULT, WndXRez, WndYRez, _
            NULL,NULL, wc.hinstance, NULL )
     
        GetClientRect(hWnd, @PrgBounds)
        Cntr.x = (PrgBounds.left + PrgBounds.right) \ 2
        Cntr.y = (PrgBounds.top + PrgBounds.bottom) \ 2
        ClientToScreen(hWnd, @Cntr)
        SetCursorPos(Cntr.x, Cntr.y)
        GetCursorPos(@Cntr)
        ShowCursor (FALSE)
     
        ShowWindow( hWnd, SW_NORMAL )
        UpdateWindow( hWnd )
     
     DO
        IF PeekMessage( @wMsg, NULL, 0, 0, PM_Remove) THEN   
          'IF wMsg.message = WM_QUIT THEN Exitting = -1
          TranslateMessage( @wMsg )
          DispatchMessage( @wMsg )
        END IF
     
        Ojidanie = (Ojidanie + 1) AND 15: IF Ojidanie = 0 THEN SLEEP 1, 1
     LOOP UNTIL Exitting
     END
    END SUB
     
     
     
    WITH wc
        .style         = CS_HREDRAW Or CS_VREDRAW
        .lpfnWndProc   = @WndProc
        .cbClsExtra    = 0
        .cbWndExtra    = 0
        .hInstance     = GetModuleHandle( null )
        .hIcon         = LoadIcon( NULL, IDI_APPLICATION )
        .hCursor       = LoadCursor( NULL, IDC_ARROW )
        .hbrBackground = GetStockObject(BLACK_BRUSH )
        .lpszMenuName  = NULL
        .lpszClassName = @szAppName
    END WITH
     
    IF  RegisterClass( @wc ) = FALSE Then 
       END
    END IF
     
     
    MsgGetThreadID = ThreadCreate(@MsgGetThread, 0, 524288)         '  +512Кб стека на всякий случай
     
    DIM StTmr AS DOUBLE = TIMER
    DIM K AS INTEGER
     
    Mx = ScrXRez \ 2
    My = ScrYRez \ 2
     
     '    Цикл основной программы
     
     DO
       CLS
     
        '  Рисуем
       FOR K = 1 to 100
         LINE (RND * ScrXRez, RND * ScrYRez)-(RND * ScrXRez, RND * ScrYRez), &H222222'RND * 16777215
       NEXT
       LINE (ScrXRez - 1, 0)-(ScrXRez - 1, ScrYRez - 1), RGB(255, 0, 0)
       LINE (0, ScrYRez - 1)-(ScrXRez - 1, ScrYRez - 1), RGB(0, 255, 0)
       LOCATE 1, 1: PRINT Mx, My
       PRINT ScrXRez, ScrYRez
          LINE (Mx + 1, My + 1)-STEP(33, 15), 0
          LINE (Mx + 1, My + 1)-STEP(15, 30), 0
          LINE (Mx, My)-STEP(32, 16), &HFFFFFF
          LINE (Mx, My)-STEP(15, 30), &HFFFFFF
           '  Обновление gfx buffer
        IF TIMER - StTmr > .012 THEN
          FlipOk = 0
          redrawwindow (hwnd, 0, 0, rdw_invalidate): StTmr = TIMER
        END IF
        SLEEP 2, 1
        IF FlipOk = 0 THEN DO: SLEEP 1, 1: LOOP UNTIL FlipOk
     
     LOOP UNTIL Exitting
     
    END
    В принципе он работает, но всё равно без фулл скрина не гуд. Обычно я не вожусь с такими задачами,
    просто было бы очень кстати нормально решить этот вопрос.

    P.S: И ведь всё равно мышь не супер работает, уж почему не знаю хотя и лучше чем в прошлом варианте.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Господи... Вот тебе и программирование под Windows. Я так смотрю, под DOS-ом с его INT 33h драйвером все было гораздо проще
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    784
    Сказал(а) спасибо
    326
    Поблагодарили 348 раз(а) в 275 сообщениях
    Записей в блоге
    6
    Так вот опытным путём, найдя пример создания обычного окошка, я смог через обработку сообщений
    добиться более менее сносного результата. Но проблема в общем то в другом, в FBGfx есть такой режим
    GFX_NULL, когда буфер не привязывается к специальному обработчику, позволяющему через ALT+ENTER
    переходить в полноэкранный режим и обратно(также он автоматически обновляет экран и ловит события),
    а просто отдаётся на откуп программисту.
    Я расскажу как сам понимаю. Режим GFX_NULL рассчитан на то, чтобы пользователь смог создать свое окно, в котором могут дополнительно использованы WinApi контролы: меню, кнопки, слайдеры и пр. Так же пользователь может сделать окно нестандартным по своему вкусу. Но это жуткий костыль, заметно срезающий скорость вывода графики, поскольку задействованы функции GDI.

    Так вот хотелось бы понять как сделать точно так же, но только
    со своим обработчиком сообщений. Я понимаю, что это ппц и на раз два не пишется, но какие-либо советы
    были бы очень кстати.
    То есть у нуля? И точно такое? Тогда придется изучать directdraw. Если на базе имеющейся GFXLIB , то это будет обычное внедрение в обработчик, как ты и делал с помощью Screenevent . Поверь это лучший вариант, Screenevent дает все нужные события основного окна, как будто ты работаешь с самим обработчиком. Я не вглядывался в исходнике Gfxlib в данный момент, но думаю ты поймешь, когда посмотришь хотя бы файлик [Ссылки могут видеть только зарегистрированные пользователи. ]. Станет понятно, сколько мелочей придется учитывать в своем обработчике, чтобы библиотека продолжала работать так же стабильно . Если за цель взято написать свою графлибу, то это лучше делать на базе OpenGl и забыть про встроенные возможности GfxLIB. Создать ее несложно, но займет значительное время .

    Вообще если честно я не совсем понял специфику работы сообщений Windows, т.е. вроде бы создана
    CALLBACK функция в которую и приходят сообщения, но дополнительно в программе нужно вызывать
    PeekMessage, TranslateMessage и DispatchMessage, на кой макар оно надо если сообщения по прерыванию
    должны идти в CALLBACK функцию и обрабатываться по принципу "как только так сразу", а получается
    как я понимаю прямо наоборот.
    Цикл где идет обработка PeekMessage, TranslateMessage и DispatchMessage - это своего рода миниАТС , которая вылавливает определенную часть событий и перенаправляет в нужные процедуры. При том данные события могут быть как для определенного окна, так и для всех окон программы. Как и у любой проги, цикл - это сердце, просто необходимая вещь, которая связует работу своей программы с работой системных сообщений окна. Оконная процедура - отдельный участок, который удобно вызывать системе, посылая туда очередь сообщений. В программе может быть несколько окон и каждое окно может иметь свою независимую процедуру событий. События, которые приходят в оконную процедуру, связаны с данным окном и со всеми его дочерними окнами. Вот так я понимаю эту хрень

    Может виндосоздателям и стоило сделать какой-то упрощенный вход для организации начала отлова событий... Так допустим в GTK или в IUP данный цикл спрятан от пользователя и для каждого контрола свой обработчик в виде процедуры (явной или скрытой) . В PB и в моей либе все окна имеют одну процедуру событий и цикл так же спрятан.

    Но всё равно было бы грамотнее как то
    без этих плясок, ибо очевидно, что сделано через задне место.
    Я не считаю, что это сделано через задний проход. Мне это не доставляет неудобств.

    Подытоживаю относительно главного вопроса:

    1) Если есть желание создать полностью свой обработчик, тебе придется отключить встроенный и тогда все хитрости , что заложены в GFXLIB нужно будет изучить и вложить в свой обработчик.
    2) Если желание изменить текущий обработчик (что-то вроде сабклассинга), то это по качеству практически ничем не будет отличаться от реализации Screenevent, только лишние ковыряния с кодом.
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    то это по качеству практически ничем не будет отличаться от реализации Screenevent, только лишние ковыряния с кодом.
    Вся проблема в том, что так как сделано у меня со SCREENEVENT работает плохо, хотя я гипотетически
    понимаю что должно быть лучше. С чем собственно сравниваю, писал точно такую же штуку на пюре,
    через встроенные функции, мышка работала там идеально, причём писал тем же самым алгоритмом(код
    графического модуля выкладывал в теме своего проекта, там идёт обработка целочисленным алгоритмом
    высокой точности, т.е. старшие 2 байта являются координатой, а младшие как бы дробной частью, при
    необходимости получить координату производится обычный SHR на 16 бит).
    Не знаю в чём принципиально всё дело, видимо функция SetCursorPos сильно вредит процессу.

    У меня ещё есть вариант, попробовать обрабатывать SCREENEVENT'ы в отдельном потоке. Но чую не
    заработает такой вариант.

    Я не считаю, что это сделано через задний проход.
    Имелся в виду мой код, а не конкретно этот принцип.

    То есть у нуля? И точно такое?
    С нуля, не знаю конечно такое же или нет. Нужен фул скрин и обработчик засунутый в отдельный поток,
    как сделано в коде выше, и то опять же не идеал, чувствуется на моей мышке. К примеру когда захожу
    в тот же старкрафт первый - там мышка работает идеальнейшим образом. Вот как бы эталон, я учитываю
    разрешение монитора и всё сопутствующее. Там DDraw.

    Тогда придется изучать directdraw.
    Я вообще думаю что изучать, есть хуки, есть DirectInput. Примеров конечно на FB мало. Главное понять
    что изучить, чтобы не было лишних манёвров. Как я понял дельта далеко не всем нужна, исходников нема.

    gfx_win32.c
    Почитаю, пока только окинул взглядом.

    заметно срезающий скорость вывода графики, поскольку задействованы функции GDI.
    Вообще GDI вроде бы должны быстро работать, не все, но самые элементарные. По крайней мере до висты
    так было, на семёрке они что-то около в ~2 раза медленнее, на восьмёрке не тестил, но думается ещё хуже.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Вот тебе и программирование под Windows. Я так смотрю, под DOS-ом с его INT 33h драйвером все было гораздо проще
    Не могу с этим спорить.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  6. #6  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    784
    Сказал(а) спасибо
    326
    Поблагодарили 348 раз(а) в 275 сообщениях
    Записей в блоге
    6
    В [Ссылки могут видеть только зарегистрированные пользователи. ] я шибко не понял, зачем было строить возню из айпишек , когда основной аспект был удержать мышь в рамках экрана. Процедура ALLInput выглядела бы так:

    Код :
    SUB ALLInput ()
     
    	IF (Screenevent(@MyProgEv)) THEN 
    		SELECT CASE MyProgEv.EvTip 
    			CASE EVENT_MOUSE_MOVE    
                Select Case MyProgEv.X
                	Case -1:Mx = 0
                	Case is > ScreenXRez:Mx = ScreenXRez 
                	Case Else:Mx =MyProgEv.X
                End Select
                Select Case MyProgEv.Y
                	Case -1:My = 0
                	Case Is > ScreenyRez:My = ScreenyRez
                	Case Else:My =MyProgEv.y
                End Select            
     
    			CASE EVENT_WINDOW_CLOSE  
    				END
    		END SELECT
    	END IF
     
     
    	Kb$ = INKEY$
    	IF Kb$ = CHR(27) THEN END
    END Sub

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

    Я вообще думаю что изучать, есть хуки, есть DirectInput. Примеров конечно на FB мало. Главное понять
    что изучить, чтобы не было лишних манёвров. Как я понял дельта далеко не всем нужна, исходников нема.
    Здесь я даже посоветовать ничего не могу, не работал с directinput, всегда хватало средств для определения координат мыши, предоставляемых оконной процедурой и функциями getcursurpos, setcursurpos. Для клавы использовал GetAsyncKeyState,GetKeyboardState, GetKeyState или глобальные хуки RegisterHotKey.
    Ответить с цитированием  
     

  7. #7  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    когда основной аспект был удержать мышь в рамках экрана.
    Нет это не главный аспект, в своей проге я создаю виртуальные координаты мыши,
    юзер уже сам опредеяет как их ограничить. Косяк первой проги в том, что во-первых она
    частично "съедает" движения мыши, а во-вторых при быстром движении мыши вправо-влево
    или вверх-вниз на низком разрешении типа 640x480 физическая мышь упирается в границы
    экрана и движение останавливается. Всё это очень плохо.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  8. #8  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    784
    Сказал(а) спасибо
    326
    Поблагодарили 348 раз(а) в 275 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Нет это не главный аспект, в своей проге я создаю виртуальные координаты мыши,
    юзер уже сам опредеяет как их ограничить. Косяк первой проги в том, что во-первых она
    частично "съедает" движения мыши, а во-вторых при быстром движении мыши вправо-влево
    или вверх-вниз на низком разрешении типа 640x480 физическая мышь упирается в границы
    экрана и движение останавливается. Всё это очень плохо.
    Ты извини конечно, вроде написано русском, но я мало что из написанного понял. Замени в первой проге свою процедуру на мою, будет ли чего останавливаться или съедаться. Лично у меня все работает как надо.
    Ответить с цитированием  
     

  9. #9  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    784
    Сказал(а) спасибо
    326
    Поблагодарили 348 раз(а) в 275 сообщениях
    Записей в блоге
    6
    А вообще я понял об какой остановке ты ведешь речь. Только непонятно, зачем тебе координаты за пределами экрана Скроллинг и без этого можно сделать.
    Ответить с цитированием  
     

  10. #10  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Только непонятно, зачем тебе координаты за пределами экрана
    Они не очень нужны, нужна честная дельта. Нужна затем, чтоб я мог поменять сенсу мышки.
    Плюс дельту удобнее исполоьзовать в некоторых видах элементов интерфейса.
    Ну и ещё один плюс ограничение могу сам делать как заблагорассудится, в любой момент его
    поменять без обращения к функциям и всё это будет с указанной сенсой.
    Сенсу я в будущем хочу допилить, сделать нелинейый график для дельты, для ещё более точного
    позиционирования(зашью несколько моделей мышек, сколько у себя дома смогу найти).

    Замени в первой проге свою процедуру на мою, будет ли чего останавливаться или съедаться.
    Это тоже самое что и GetMouse, съедаться ничего не будет но и дельту не получить нормально,
    потому что когда координаты мыши доходят до границы окна - всё, приращения координат не
    происходит. А без дельты не сделать сенсу для своих виртуальных координат.

    Плюс ещё один недостаток проги в этой теме: когда жмём WIN или CTRL+ALT+DEL мышь устанавливается
    по центру окна проги и не даёт делать действия в системе, это косяк, позже почитаю про фокус окна
    и думаю пофиксю это.
    Последний раз редактировалось >Quiet Snow<; 28.07.2013 в 22:05.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

Страница 1 из 2 12 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Обсуждение развития раздела FreeBASIC
    от >Quiet Snow< в разделе FreeBasic
    Ответов: 8
    Последнее сообщение: 12.01.2013, 12:46
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •