Dialogのクラス化
Posted: 2012年10月15日(月) 21:52
ダイアログで簡単なチャットを作っています。
クラス化の段階で機能は問題ありませんが、レイアウトがめちゃくちゃになっています...。
ソースコードを乗せますので何が問題かあるか添削お願いします。
// main
INT WINAPI WinMain( HINSTANCE instHndl, HINSTANCE /* prevInst */, LPTSTR /* cmdLine */, INT /* cmdShow */ )
{
ADialog dialog;
dialog.Create( instHndl, IDD_DIALOG_CLIENT );
return 1;
}
// ADialog.h
class ADialog
{
public:
ADialog();
~ADialog();
static BOOL CALLBACK DialogMapProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam );
BOOL Create( HINSTANCE instHndl, LONG dialogId );
private:
static ADialog *m_dialog;
BOOL DialogProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam );
};
// ADialog.cpp
ADialog *ADialog::m_dialog = NULL;
BOOL ADialog::DialogProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_INITDIALOG:
return FALSE;
case WM_COMMAND:
switch ( LOWORD( wParam ) )
{
case IDOK:
EndDialog( wndHndl, IDOK );
return FALSE;
case IDCANCEL:
EndDialog( wndHndl, IDCANCEL );
return FALSE;
case IDC_BUTTON_END:
EndDialog( wndHndl, IDC_BUTTON_END );
return FALSE;
default:
return FALSE;
} // end of switch
default:
return FALSE;
} // end of switch
return TRUE;
}
BOOL CALLBACK ADialog::DialogMapProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam )
{
if( msg == WM_INITDIALOG )
{
SetWindowLong( wndHndl, GWL_USERDATA, (LONG)m_dialog );
m_dialog = NULL;
} // end of if
ADialog* wnd = ( ADialog* )::GetWindowLong( wndHndl, GWL_USERDATA );
if( wnd == NULL )
{
return FALSE;
} // end of if
wnd->DialogProcedure( wndHndl, msg, wParam, lParam );
return TRUE;
}
BOOL ADialog::Create( HINSTANCE instHndl, LONG dialogId )
{
m_dialog = this;
DialogBox( instHndl,
MAKEINTRESOURCE( dialogId ),
NULL,
DialogMapProcedure);
return TRUE;
}
クラス化の段階で機能は問題ありませんが、レイアウトがめちゃくちゃになっています...。
ソースコードを乗せますので何が問題かあるか添削お願いします。
// main
INT WINAPI WinMain( HINSTANCE instHndl, HINSTANCE /* prevInst */, LPTSTR /* cmdLine */, INT /* cmdShow */ )
{
ADialog dialog;
dialog.Create( instHndl, IDD_DIALOG_CLIENT );
return 1;
}
// ADialog.h
class ADialog
{
public:
ADialog();
~ADialog();
static BOOL CALLBACK DialogMapProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam );
BOOL Create( HINSTANCE instHndl, LONG dialogId );
private:
static ADialog *m_dialog;
BOOL DialogProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam );
};
// ADialog.cpp
ADialog *ADialog::m_dialog = NULL;
BOOL ADialog::DialogProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_INITDIALOG:
return FALSE;
case WM_COMMAND:
switch ( LOWORD( wParam ) )
{
case IDOK:
EndDialog( wndHndl, IDOK );
return FALSE;
case IDCANCEL:
EndDialog( wndHndl, IDCANCEL );
return FALSE;
case IDC_BUTTON_END:
EndDialog( wndHndl, IDC_BUTTON_END );
return FALSE;
default:
return FALSE;
} // end of switch
default:
return FALSE;
} // end of switch
return TRUE;
}
BOOL CALLBACK ADialog::DialogMapProcedure( HWND wndHndl, UINT msg, WPARAM wParam, LPARAM lParam )
{
if( msg == WM_INITDIALOG )
{
SetWindowLong( wndHndl, GWL_USERDATA, (LONG)m_dialog );
m_dialog = NULL;
} // end of if
ADialog* wnd = ( ADialog* )::GetWindowLong( wndHndl, GWL_USERDATA );
if( wnd == NULL )
{
return FALSE;
} // end of if
wnd->DialogProcedure( wndHndl, msg, wParam, lParam );
return TRUE;
}
BOOL ADialog::Create( HINSTANCE instHndl, LONG dialogId )
{
m_dialog = this;
DialogBox( instHndl,
MAKEINTRESOURCE( dialogId ),
NULL,
DialogMapProcedure);
return TRUE;
}