Турбо отладчик (Turbo Debugger) 3.0

это потребовало бы сложной логики


       теля.  Но  это потребовало бы сложной логики определения позиции,
       где "мышь" покидает пределы экрана и где она возвращается  в  об-
       ласть пользователя. К счастью, есть более простой способ.
            Функция Windows SetCapture делает как раз то, что требуется.
       Данная функция указывает Windows,  что до  вызова  ReleaseCapture
       нужно посылать все сообщения Windows, связанные с "мышью", в ука-
       занное окно,  что приводит к  получению  окном  вместо  сообщений
       WM_NCMOUSEBUTTON    ("вне    области   пользователя")   сообщений
       WM_MOUSEMOVE.
            Если вы  поместите  в   ScribbleWindow::WMButtonDown   вызов
       SetCapture,  а в WMLButtonUp - ReleaseCapture,  WMMouseMove будет
       на самом деле рисовать вне окна,  но Windows будет отсекать  этот
       вывод программы, что будет давать нужный результат.


            Эти изменения отражены в следующем исходном коде:
            void ScribbleWindow::WMLButtonDown(RTMessage Msg);
            {
               if ( ButtonDown )
               {
                 ButtonDown = True;     // пометить кнопку "мыши"
                                        // как нажатую, благодаря чему
                                        // при перемещении "мыши" будет
                                        // рисоваться линия
                 SetCapture(HWindow);   // сообщить Windows, что в окно
                                        // нужно посылать все сообщения
                                        // от "мыши"; отменять этот
                                        // перехват будет вызов
                                        // WMLButtonUp

       TDeb 3.0 #3-3                = 81 =
                 HandleDC = GetDC(HWindow); // создать контекст
                                            // изображения для вывода
                 MoveTo(HandleDC, Msg.LP.LO,     // переместить точку

Содержание раздела