2015-06-05 3 views
2

Я использую этот код для перемещения окна. Но этот код не работает. Когда я нажимаю в любом месте окна, он будет перемещаться, но я просто хочу переместить форму окна. Когда я нажимаю на определенное мнение. Например, изображение. Я использую MFC C++ HtmlDialog. Кто-нибудь знает, как это сделать?Переместить окно в mfc C++ без заголовка?

DHTML_EVENT_ONCLICK (_T ("образ"), PreTranslateMessage)

BOOL CHtmlDlgTestDlg::PreTranslateMessage(MSG* pMsg) 
{ 
if (pMsg->message == WM_MOUSEMOVE && (pMsg->wParam & MK_LBUTTON)) 
{ 
    CPoint p; 
    GetCursorPos(&p); 
    CRect r; 
    GetWindowRect(&r); 
    if (r.PtInRect(p)) 
    { 
     ReleaseCapture(); 
     SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); 
     SendMessage(WM_NCLBUTTONUP, HTCAPTION, 0); 
     return 1; 
    } 
} 

return CDialog::PreTranslateMessage(pMsg);  
} 
+0

Действительно необходимо обработать движущееся окно внутри PreTranslateMessage? Я думаю, вы можете сделать это на OnLButtonDown и OnMuseMove ... – flaviu2

+0

ТАК пожалуйста, помогите мне сделать это? –

ответ

1

WM_NCLBUTTONDOWN это сообщение с уведомлением, Windows посылает это сообщение и программа отвечает на него. Программа не должна отправлять это сообщение в Windows. В этом случае это работает, но это не рекомендуется.

Я не знаю, как этот код работает: DHTML_EVENT_ONCLICK(_T("image"), PreTranslateMessage) он, вероятно, игнорируется, и вы можете его удалить. PreTranslateMessage по-прежнему называется. Вы можете ограничить его в любой прямоугольник в окне, например CRect(50,50,200,200):

BOOL CHtmlDlgTestDlg::PreTranslateMessage(MSG* pMsg) 
{ 
    if (pMsg->message == WM_MOUSEMOVE && (pMsg->wParam & MK_LBUTTON)) 
    { 
     CPoint p = pMsg->pt; 
     ScreenToClient(&p); 
     CRect r(50,50,200,200); 
     if (r.PtInRect(p)) 
     { 
      ReleaseCapture(); 
      SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); 
      SendMessage(WM_NCLBUTTONUP, HTCAPTION, 0); 
      return 1; 
     } 
    } 
    return CDialog::PreTranslateMessage(pMsg); 
} 

Если вы хотите переместить элемент в окне вы можете использовать JavaScript:

Moveable/draggable <div>

Ps, как правило, вы должен использовать WM_NCHITTEST, как объяснялось ранее. Этот случай очень необычен, потому что это HTML-диалог. Вы должны пересмотреть класть обычную строку заголовка, которую пользователи понимают, или вы можете поместить html-элемент управления в диалоговом окне, тогда вы можете управлять остальной частью диалога со стандартным WinApi.

+0

Сэр, Как я могу выполнить эту задачу. Когда я просто нажимаю кнопку ok. Mean Когда я нажимаю кнопку ok, я могу переместить окно. На самом деле никакая пресса просто не отталкивает его? –

+0

@ МухаммадРаза: ИМХО, это не путь. Используйте решение IInspectable. –

+0

@MichaelWalz в этом случае 'OnNcHitTest' не работает, потому что это html-диалог. Также требование SO нецелесообразно в попытке переместить html-окно, нажав кнопку «ОК» в окне html. –

Смежные вопросы