2011-06-26 4 views
1

У меня есть WinForm, и теперь мне нужно изменить курсор, когда он находится в части заголовка окна. У меня есть код работает, у него есть 2 проблемы:Изменить курсор в заголовке окна

  1. Он также изменяет курсор, когда по краям (нормальный курсор изменения размера должен быть показан). Я узнал, что мне нужно что-то вроде этого WM_NCHITTEST & HTTOP, но как мне это совместить?
  2. При перемещении мыши появляется некоторое мерцание.

Я также попытался сделать код ниже base.WndProc(ref m);.

Это код, у меня уже есть:

if ((m.Msg == Win32.WM.NCMOUSEMOVE 
    || m.Msg == Win32.WM.NCLBUTTONDOWN || m.Msg == Win32.WM.NCLBUTTONUP 
    || m.Msg == Win32.WM.NCRBUTTONDOWN || m.Msg == Win32.WM.NCRBUTTONUP) 
) 
{ 
    if (m.WParam.ToInt32() != Win32.HT.TOP && m.WParam.ToInt32() != Win32.HT.RIGHT && m.WParam.ToInt32() != Win32.HT.BOTTOM && m.WParam.ToInt32() != Win32.HT.LEFT) 
    { 
     Cursor = Cursors.Hand; 
    } 
} 

EDIT:
Я не протоколирование сообщение правильно в Spy ++. Нашел решение к краям окна (см. Обновленный код).

Thnx, J

+0

А как насчет подделки надписи на окнах? просто мысль. – NinethSense

+0

Я расширил заголовок окна, чтобы поднять, чтобы обеспечить прозрачность стекла. Кроме того, я нарисовал что-то, но я не могу понять, как правильно изменить курсор мыши на весь заголовок. – jerone

ответ

5

Он мерцает, потому что вы используете неправильное сообщение. При каждом перемещении мыши следует WM_SETCURSOR, чтобы приложение могло изменять курсор. Таким образом, курсор изменится на значение по умолчанию. Вместо этого перехватите WM_SETCURSOR. Низкое слово LParam содержит тестовый код.

protected override void WndProc(ref Message m) { 
     if (m.Msg == 0x20) { // Trap WM_SETCUROR 
      if ((m.LParam.ToInt32() & 0xffff) == 2) { // Trap HTCAPTION 
       Cursor.Current = Cursors.Hand; 
       m.Result = (IntPtr)1; // Processed 
       return; 
      } 
     } 
     base.WndProc(ref m); 
    } 
+0

Thnx. Aldo это исправляет мерцание, которое у меня было, это частично помогает другой «ошибке». Отображается только верхний и верхний изменения размера. – jerone

+0

Это, похоже, очень мало связано с фрагментом, который вы опубликовали. Я получаю хорошие курсоры размера по всем краям и углам с фрагментом, который я опубликовал. Тестирование кода тестового теста очень важно, у краев и углов есть другой код, он не будет 2. –

+0

Извините, что я ошибся в его преобразовании. Спасибо за ответ – jerone

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