Понятно что простого решения нет! Но решение обязательно должно быть, возможно не простое но элегантное и не глючное
ATX NCHITTEST - решение простое (всего несколько байт кода), быстрое и не глючное. Впрочем, если вы знаете лучше - пишите. Мы вам похлопаем.
LockWindowUpdate() вообще-то не для такой цели сделан: http://blogs.msdn.com/oldnewthing/archive/2007/02/21/1735472.aspx http://blogs.msdn.com/oldnewthing/archive/2007/02/22/1742084.aspx Правильнее будет менять значения в структуре для WM_WINDOWPOSCHANGING.
WM_MOVE приходит уже постфактум, т.е. когда юзер уже успел сменить позицию окна. А вот WM_MOVING, равно как и WM_WINDOWPOSCHANGING, тоже можно использовать. Только, в отличие от последнего, мониторить размер окна при его изменении WM_MOVING не умеет. За это отвечает WM_SIZING.
DEEP WM_MOVING - уже хорошо) Остается вопрос - каким образом дальше рулить окном, я вижу 2 варианта: 1. Посдавлять в SetWindowPos начальные координаты окна 2. Поработать с самим сообщением, подставлять в lParam (если мне не изменяет память) теже начальные координаты окна или вообще "глушить" сообщение.