переменная доступа c ++ из другого регистра

0

Я создаю приложение win32 и инициализирую свои переменные ширины строки состояния в моем случае переключателя WM_CREATE.

case WM_CREATE:
  {
    int statwidths[] = { 200, -1 };
  }
  break;

Я хотел бы получить доступ к statwidths [0] в моем случае коммутатора WM_SIZE, поскольку этот номер будет использоваться для определения размера остальных моих окон в моей программе.

case WM_SIZE:
  {
    int OpenDocumentWidth = statwidths[ 0 ];
  }
  break;

Есть ли способ сделать это? Они оба находятся в одной команде switch в том же файле.

Теги:
switch-statement
variables
winapi
case

2 ответа

0
Лучший ответ

Если они оба находятся в одном и том же ключевом выражении, то абсолютно нет. Рассматривать

switch (n) {
    case 1: {
    }
    case 2: {
    }
}

То, что происходит в случае 1, возникает только тогда, когда n равно 1. Если мы объявляем переменную там, то мы вызываем этот код с n = 2, переменная не объявляется.

int n;
if(fileExists("foo.txt"))
    n = 2;
else
    n = 1;
switch (n) {
    case 1: {
        ostream outfile("foo.txt");
        ...
        break;
    }
    case 2: {
        // if outfile were to be initialized as above here
        // it would be bad.
    }
}

Вы можете объявить переменную за пределами коммутатора, но вы не должны предполагать, что предыдущий случай сделал свое дело, если переключатель не находится внутри цикла.

Данг, в прошлый раз я пытаюсь сделать это на разжигании.

0

Вам нужно будет создать класс для обработки окон, он должен выглядеть так:

class Foo
{
private:
  int* statwidths;
  HWND hwnd;

public:
  Foo(){};
  ~Foo(){};

  bool CreateWindow()
  {
    //some stuff
    hwnd = CreateWindowEx(...);
    SetWindowLongPtr(hwnd  GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
    //some stuff
  }

  static LRESULT callback(HWND hwnd, ...)
  {
    Foo* classInfo = reinterpret_cast<Foo *>(GetWindowLongPtr(window, GWLP_USERDATA));
    case WM_CREATE:
    {
      classInfo->statwidths = new int[2];
      classInfo->statwidths[0] = 200;
      classInfo->statwidths[1] = -1;
      break;
    }

    case WM_SIZE:
    {
      int OpenDocumentWidth = classInfo->statwidths[0];
    }

    case WM_CLOSE:
    {
      delete [] classInfo->statwidths;
    }
  }
};

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню