来自不同开关柜的c ++访问变量

我创建了一个win32应用程序,并在WM_CREATE开关的情况下初始化了我的状态栏宽度变量。

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

我想在我的WM_SIZE开关案例中访问statwidths [0],因为该编号将用于确定我的程序中其余窗口的大小。

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

有没有办法做到这一点? 它们在同一个文件中都在同一个switch语句中。


如果这些都在同一个switch语句中,那么绝对不是。 考虑

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.
    }
}

你可以在交换机之外声明变量,但是你不应该假定前面的情况已经完成了,除非交换机在一个循环内。

Dang,上次我试着用kindle做这个。


你需要为你的窗口创建一个类,它应该看起来像这样:

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;
    }
  }
};

这只是你需要的一小段代码,但你可以用它作为你的基础,希望有所帮助。

链接地址: http://www.djcxy.com/p/84427.html

上一篇: c++ access variable from different switch case

下一篇: Why aren't pointers initialized with NULL by default?