Почему делает обработку, WM_NCCALCSIZE заставляют мое окно переходить?

Вы были очень близки.

При использовании .data() в jQuery он обрабатывается немного по-другому.

Когда вы используете:

$(.someClass).data('myAttribute')

он обрабатывается jQuery как:

<div class='.someClass' data-my-attribute></div>

Так что для вашего случая: вы бы использовали как следующий код:

$(".btn-group").on('click', 'button', function(e) {
  //this points to the button clicked. So either you use the below code
  //or you should directly select the grid item.
  //This works too
  //var push = $('.grid-item').data("buttonType");
  var push = $(this).parent().siblings('.grid-item').data("buttonType");
  alert(push);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.2/jquery.min.js"></script>
<div class="btn-group">
  <button type="button" class="btn btn-default 1">1</button>
  <button type="button" class="btn btn-default 3">3</button>
</div>

<div class="grid-item grid-item-double-height item-1" data-button-type="interior">
  <a href="#">
    <img src="img/lazyload-ph.png" data-src="img/slurp-004.jpg" class="img-responsive lazyload"/>
  </a>
</div>

5
задан Jaykul 10 October 2008 в 21:45
поделиться

2 ответа

Причиной это происходит, является та обработка WM_NCCALCSIZE изменяет полный размер окна..., но если Вы перемещаете окно, меняя Ваше положение во время WM_MOVE или WM_WINDOWPOSCHANGED (который соответствует WPF WindowPositionChanged событие), вызывает другого WM_NCCALCSIZE сообщение...

Внесение изменений во время WM_NCCALCSIZE (даже просто утверждение, что Вы обработали сообщение) вызывает другой вызов к WM_MOVE ... который помещает Вас в цикл, где "ОТ" части сообщения positionchanged остается таким же (создание окна "переход" от того, где это запустилось к позиции, Вы корректируете его к во время WM_MOVE много раз, поскольку это возвращается после WM_NCCALCSIZE).

Корректный путь

То, что необходимо сделать, должно повиноваться Raymond Chen и дескриптору WM_WINDOWPOSCHANGING вместо этого. Это происходит перед этими другими сообщениями и тем способом, которым они не вмешиваются друг в друга!

6
ответ дан 14 December 2019 в 13:51
поделиться

wParam всегда, кажется, TRUE (1), и lParam является NCCALCSIZE_PARAMS...

Намерение состоит в том, чтобы сделать точно, что Вы сказали: вынудить целое окно быть "клиентом" и затем использовать пчелу DWM Vista для расширения кадра в клиентскую область. Я просто не вижу, почему это перемещается до сих пор налево...

Если я прослеживаю или устанавливаю контрольные точки метод HandleNCCalcSize, когда я изменяю размер окна (в то время как это находится на краю так снимок - к огням), NCCalcSize называют дважды: однажды, где это должно быть, и затем прочь налево, где это заканчивается.

0
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: