来自不同开关柜的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