Я запутался, почему второй статический указатель pthis не инициализируется? Я подкласс оконной процедуры через статическую функцию. Первый статический указатель lpProcess был инициализирован в основной процедуре. Однако второй даже не вызовет свой собственный конструктор (я использовал отладчик для определения этой проблемы). Так или иначе, это просто пропускает строительство. Сначала я сомневаюсь, что неправильно понял некоторые моменты статической переменной. Однако, увидев, что первый работает, почему не второй? Возможно, я предполагаю, что это как-то связано с глубокой рекурсией или вызовом статической функции?
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static QProcessor* lpProcess = new QProcessor(hwnd); //Initialized without any error
switch(msg)
{
case WM_CREATE:
{
lpProcess->SetFixed(322,200); //Set window size through the container
lpProcess->Update(); //Update members
if(!lpProcess->CreateChild()) //Create all controls
{
Error(); //print error
::DestroyWindow(hwnd); //terminate the window
}
QMonitor::Attach(hwnd); //Attach Monitor Window to current window
}
....
void QMonitor::Attach(HWND hwnd)
{
QMonitor::classdata = (LPVOID)::SetWindowLong(hwnd,GWL_WNDPROC,(LONG)QMainProc); //subclass procedure
}
LRESULT CALLBACK QMainProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static QMonitor* pthis = new QMonitor(hwnd); //Won't initialize??
switch(msg)
{
case WM_MOVE:
{
pthis->OnMove();
}
break;
case WM_SIZE:
{
pthis->OnSize();
}
break;
case WM_COMMAND:
break;
case WM_DESTROY:
delete pthis;
break;
}
return ::CallWindowProc(pthis->GetAttachWndProc(),hwnd,msg,wParam,lParam);
}