我正在创建一个win32应用程序,并在我的WM_CREATE开关案例中初始化了我的状态栏宽度变量。
case WM_CREATE:
{
int statwidths[] = { 200, -1 };
}
break;
我想在我的WM_SIZE开关案例中访问statwidths [0],因为该号码将用于确定我程序中其余窗口的大小。
case WM_SIZE:
{
int OpenDocumentWidth = statwidths[ 0 ];
}
break;
有办法做到这一点吗?它们都位于同一文件中的相同switch语句中。
答案 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;
}
}
};
这只是您需要的一小段代码,但您可以将它作为您的基础,希望有所帮助。