это потребовало бы сложной логики
теля. Но это потребовало бы сложной логики определения позиции,
где "мышь" покидает пределы экрана и где она возвращается в об-
ласть пользователя. К счастью, есть более простой способ.
Функция 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, // переместить точку