Я создаю приложение win32 и инициализирую свои переменные ширины строки состояния в моем случае переключателя WM_CREATE.
case WM_CREATE:
{
int statwidths[] = { 200, -1 };
}
break;
Я хотел бы получить доступ к statwidths [0] в моем случае коммутатора WM_SIZE, поскольку этот номер будет использоваться для определения размера остальных моих окон в моей программе.
case WM_SIZE:
{
int OpenDocumentWidth = statwidths[ 0 ];
}
break;
Есть ли способ сделать это? Они оба находятся в одной команде 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.
}
}
Вы можете объявить переменную за пределами коммутатора, но вы не должны предполагать, что предыдущий случай сделал свое дело, если переключатель не находится внутри цикла.
Данг, в прошлый раз я пытаюсь сделать это на разжигании.
Вам нужно будет создать класс для обработки окон, он должен выглядеть так:
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;
}
}
};
Это всего лишь небольшой фрагмент кода, который вам нужен, но вы можете использовать его в качестве базы для вас, надеюсь, что это поможет.