Как Вы препятствуете тому, чтобы окна были перемещены?

Или без внешней зависимости:

/**
    Walk directory,
    list tree without regex excludes
 */

var fs = require('fs');
var path = require('path');

var walk = function (dir, regExcludes, done) {
  var results = [];

  fs.readdir(dir, function (err, list) {
    if (err) return done(err);

    var pending = list.length;
    if (!pending) return done(null, results);

    list.forEach(function (file) {
      file = path.join(dir, file);

      var excluded = false;
      var len = regExcludes.length;
      var i = 0;

      for (; i < len; i++) {
        if (file.match(regExcludes[i])) {
          excluded = true;
        }
      }

      // Add if not in regExcludes
      if(excluded === false) {
        results.push(file);

        // Check if its a folder
        fs.stat(file, function (err, stat) {
          if (stat && stat.isDirectory()) {

            // If it is, walk again
            walk(file, regExcludes, function (err, res) {
              results = results.concat(res);

              if (!--pending) { done(null, results); }

            });
          } else {
            if (!--pending) { done(null, results); }
          }
        });
      } else {
        if (!--pending) { done(null, results); }
      }
    });
  });
};

var regExcludes = [/index\.html/, /js\/lib\.js/, /node_modules/];

walk('.', regExcludes, function(err, results) {
  if (err) {
    throw err;
  }
  console.log(results);
});
37
задан Drew Noakes 8 October 2016 в 12:29
поделиться

4 ответа

Взгляните на эту ссылку . Возможно, вас заинтересует вариант №3. Вам потребуется обернуть некоторый собственный код, но он должен работать. Также внизу ссылки есть комментарий, который показывает более простой способ сделать это. Взято из комментария (не могу поверить в это, но я сэкономлю вам поиск):

protected override void WndProc(ref Message message)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MOVE = 0xF010;

    switch(message.Msg)
    {
        case WM_SYSCOMMAND:
           int command = message.WParam.ToInt32() & 0xfff0;
           if (command == SC_MOVE)
              return;
           break;
    }

    base.WndProc(ref message);
}
71
ответ дан 27 November 2019 в 04:07
поделиться

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

0
ответ дан 27 November 2019 в 04:07
поделиться

В Windows стиль WS_CAPTION - это неклиентская область, которая позволяет перемещать ваше окно с помощью мыши. Итак, самый простой способ сделать то, что вы хотите, - удалить этот стиль из вашего окна.

Однако, если вам нужна подпись и вы все равно добиваетесь желаемого, то следующий стиль будет заключаться в захвате сообщения WM_NCHITTEST и проверке для HTCAPTION. Если код - HTCAPTION, верните NTNOWHERE. Это предотвратит выполнение стандартной оконной процедурой процедуры перемещения окна по умолчанию.

2
ответ дан 27 November 2019 в 04:07
поделиться

Это не совсем красиво (при попытке переместить некоторые мигает форма), но вы можете использовать свойство LocationChanged, чтобы сохранить форму там, где вы хотите:

private Point _desiredLocation;
// assign the _desiredLocation variable with the form location at some
// point in the code where you know that the form is in the "correct" position


private void Form_LocationChanged(object sender, EventArgs e)
{
    if (this.Location != _desiredLocation)
    {
        this.Location = _desiredLocation;
    }
}

Из любопытства; зачем вам это нужно?

2
ответ дан 27 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

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