Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Диалог - вся область - множество перет. точек.


Автор: En_t_end 27.12.2005, 14:23
Нужно создать диалог с возможностью его перетаскивания за любую точку, кроме есно контролов.

Автор: Romikgy 27.12.2005, 16:47
Имхо обрабатывай WM_MOUSEMOVE в процедуре диалога, и если нажата кнопка мыши тащи smile

Автор: Aleksandor 27.12.2005, 16:49
Может вот такой код даст зацепку.. Сам не пробовал smile

Код

case WM_MOUSEMOVE: /* allow dragging by the client area */ 
              GetCursorPos( &pt ); 
              SendMessage( hDlg,WM_SYSCOMMAND,SC_MOVE+2, MAKELPARAM( pt.x,pt.y ) ); 
  break; 


Другой способ
Код

case WM_NCHITTEST: 
  // Move dialog by dragging client area with mouse 
  if (DefWindowProc(hwndMainDlg, WM_NCHITTEST, wParam, lParam) == HTCLIENT) { 
       SetWindowLong(hwndMainDlg, DWL_MSGRESULT, HTCAPTION); 


       return TRUE; 
  } else { 
       return FALSE; 
  } 


 case WM_NCLBUTTONDOWN: 
  // Display move cursor if dragging dialog client 
  if (DefWindowProc(hwndMainDlg, WM_NCHITTEST, wParam, lParam) == HTCLIENT) { 
       SetCursor(LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MOVE))); 
  } 
  return FALSE; 

Автор: En_t_end 27.12.2005, 16:53
Romikgy
Aleksandor
Сенкс, пойду пробывать.

Автор: JoyEx 27.12.2005, 18:01
Romikgy
Aleksandor


Зачем козу на возу? smile

Цитата(En_t_end @ 27.12.2005, 14:23)
Нужно создать диалог с возможностью его перетаскивания за любую точку, кроме есно контролов.


Проще всего так

Код

void CNewDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    POINT pt;
    GetCursorPos (&pt);
    SendMessage (WM_NCLBUTTONDOWN , HTCAPTION, pt.x | pt.y << 16);

    CDialog::OnLButtonDown(nFlags, point);
}



Автор: Fixin 27.12.2005, 19:06
Во, во. Именно

Автор: En_t_end 28.12.2005, 15:28
JoyEx
Сенкс, тоже попробую...

Автор: KAdot 28.12.2005, 17:18
еще можно так:
Код

    case WM_MOUSEMOVE:
    {
        if(MK_LBUTTON & wParam) SendMessage(hWnd, WM_SYSCOMMAND, SC_MOVE+1, 0);

        return TRUE;
    }
    break;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)