2番目の静的ポインタpthisが初期化されない理由が混乱していますか?私がやったことは、静的関数を使ってウィンドウプロシージャをサブクラス化することです。最初の静的ポインタlpProcessは、メインプロシージャで初期化されました。しかし、2番目のものは独自のコンストラクタを呼び出すことさえありません(私はこの問題を特定するためにデバッガを使いました)。どういうわけか、それは単に建設をスキップします。最初は、私は静的変数のいくつかの点を誤解していたのではないかと疑っています。しかし、最初のものが動作するのを見て、なぜ2番目のものではないのですか?おそらく、これは深い再帰や静的関数の呼び出しと関係があると思いますか?静的ポインタはサブクラス化されたウィンドウプロシージャで初期化されませんか?
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);
}