仕事が忙しくて返事が出来ませんでした。申し訳ありません。
ダイアログ等、ハンドルの類を後から使いまわすような処理をしたくて
今回どの様に記述すればいいのか悩んでおりました。
コード:
class Dialog{
protected:
static HWND hDlg;//ここのダイアログのハンドルは保持され続けるのか?
public:
int CreateDialogBox(HWND);
};
int Dialog::CreateDialogBox(HWND hParent){
HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hParent,GWLP_HINSTANCE);
//ダイアログの作成
hDlg = CreateDialog(hInst,
MAKEINTRESOURCE(IDD_DIALOG1),
hParent,
NULL);
if(hDlg == NULL){
MSE("ダイアログ作成エラー");
return -1;
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//関数名 :メインウインドウプロシージャ
//機能 :
//引数 :
//戻り値 :
/////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK CMainWindow:: MainWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
static Dialog CD;//クラスの宣言
switch(msg)
{
case WM_CREATE:
CD.CreateDialogBox(hWnd);//メインウインドウ作成と同時にダイアログを作ってそのハンドルを保持し続ける
break;
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
default:
return (DefWindowProc(hWnd,msg,wParam,lParam));
}
return 0;
}
迷っていた点は整理してみました。
コード:
Dialog CD;//普通にクラスを変数として宣言
static Dialog CD//クラス自体をstatic変数として宣言
Dialog *CD = new Dialog();//ポインタ変数として宣言してnewする
static Dialog *CD = new Dialog();//staticなポインタ変数として宣言する
結果は一緒だと考えているのですが、上記四つの宣言の使い分け方がわからない。
ただ、クラス内部の変数(今回はハンドル)も保持したかったので、お二方が仰るように、
クラス自体をstatic宣言して普通にインスタンスを生成する2番目が適当のようですね
ポインタ変数についてはDeleteすることを前提で書いております。
ダイアログはひとつしか生成しないのでクラス内部自体にもstaticをつけて書き起こしてみたら
期待通りにダイアログのハンドルを保持し続けてくれているみたいです。
一週間ほどほったらかしで申し訳なかったです。
一応の解決とさせていただきます。