1

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

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

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

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

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

4

2 回答 2

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

您可以在开关之外声明变量,但您不应该假设前一种情况已经完成了它的事情,除非开关在循环内。

该死,上次我尝试在kindle上做这个。

于 2013-10-09T06:14:42.400 回答
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;
    }
  }
};

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

于 2013-10-10T13:10:02.353 回答