来自不同交换机案例的c ++访问变量

时间:2013-10-09 05:28:38

标签: c++ winapi variables switch-statement case

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

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

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

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

有办法做到这一点吗?它们都位于同一文件中的相同switch语句中。

2 个答案:

答案 0 :(得分:0)

如果这些都在同一个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,上次我尝试在点燃时做到这一点。

答案 1 :(得分: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;
    }
  }
};

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