ウィンドウの作成に使用するクラスを定義しました。フィールドの1つはhWndであり、メンバー関数create()が呼び出されると、作成されたウィンドウへのHWNDがそこに格納されます。(HWND)キャストをオーバーロードして、その値を返しました。
operator HWND() { return(hWnd); }
作成した最初のメインウィンドウに子ウィンドウを作成しようとすると、プログラムがクラッシュし始め、型キャストによって返される奇妙な値まで追跡しました。私は典型的なゲッター関数getHwnd()を定義しました。これは正常に機能しますが、型キャストはゴミを返すだけです。足りないものはありますか?
クラス定義:
class WindowBuilder
{
public:
WindowBuilder(FullWindow &fullWindow);
operator HWND() { return(hWnd); }
void SetCaption(char const * caption) { windowName = caption; }
void SetMenu(int resourceId);
void SetRender(RECT rect, HWND parent);
void SetButton(HWND parent);
void Create();
void Show(int nCmdShow = SW_SHOWNORMAL);
HWND getHwnd () { return(hWnd); }
protected:
FullWindow & window;
HWND hWnd;
char const * windowName;
DWORD style;
int x;
int y;
int width;
int height;
HWND hWndParent;
HMENU hMenu;
void * data;
};
呼び出しの例:
FullWindow renderWindowClass("STATIC", GlobalInstance, WndProc);
renderWindow = new WindowBuilder(renderWindowClass);
renderWindow->SetRender(rect,mainWindow->getHwnd()); // used to be (HWND)mainWindow
renderWindow->Create();
renderWindow->Show(CmdShow);
/*RenderWindow = ::CreateWindow("STATIC", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
DEFAULT_BUTTON_WIDTH, 0, rect.right-rect.left-DEFAULT_BUTTON_WIDTH,
rect.bottom - rect.top, Window, NULL, hInstance, NULL);*/