モーダレスダイアログにて、
//変更前 .h
class CWaitMsg : public CDialog
{
DECLARE_DYNAMIC(CWaitMsg)
public:
CWaitMsg(CWnd* pParent = NULL); // 標準コンストラクタ
virtual ~CWaitMsg();
BOOL CWaitMsg::Create();
CWnd* m_pParent; // for modeless.
int m_nID; // for modeless.
// ダイアログ データ
enum { IDD = IDD_WAITMSG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnEnChangeEditMsg();
CString m_waitmsg;
};
// .cpp
CWaitMsg::CWaitMsg(CWnd* pParent /*=NULL*/)
: CDialog(CWaitMsg::IDD, pParent)
, m_waitmsg(_T(""))
{
char Message[256];
LoadString(gHINSTANCE, IDS_MSG_500, Message, sizeof(Message));
m_waitmsg = _T(Message);
m_pParent = pParent;
m_nID = CWaitMsg::IDD;
}
の場合はちゃんと表示されます。が
このダイアログ表示位置をデスクトップ画面中央に配置したく
//変更後
//. h
class CWaitMsg : public CDialog
{
DECLARE_DYNAMIC(CWaitMsg)
public:
CWaitMsg(CWnd* pParent = NULL); // 標準コンストラクタ
virtual ~CWaitMsg();
BOOL CWaitMsg::Create();
CWnd* m_pParent; // for modeless.
int m_nID; // for modeless.
// ダイアログ データ
enum { IDD = IDD_WAITMSG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
virtual BOOL OnInitDialog();
RECT rc;
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnEnChangeEditMsg();
CString m_waitmsg;
};
//.cpp
BOOL CWaitMsg::OnInitDialog ()
{
//ダイアログデスクトップ画面中央表示
int wFull = GetSystemMetrics(SM_CXSCREEN); // スクリーンの幅を取得
int hFull = GetSystemMetrics(SM_CYSCREEN); // スクリーンの高さを取得
GetWindowRect(&rc); // ダイアログの初期位置とサイズ
int w = rc.right - rc.left;
int h = rc.bottom - rc.top;
MoveWindow((wFull-w)/2, (hFull-h)/2, w, h, FALSE); // 同じサイズで中心に移動させる
//待機メッセージの取得&表示
char Message[256];
LoadString(gHINSTANCE, IDS_MSG_500, Message, sizeof(Message));
m_waitmsg = _T(Message);
return true;
}
となおすと中央に配置はされるが、メッセージが表示されなくなってしまいます。
おかしな点がありましたら回答よろしくお願いします。
メソッドの呼ばれるタイミングが、コンストラクタ→DoDataExchange()→OnInitDialog()なのでこの現象が起きるのだと思います。
m_waitmsgに代入した後にUpdateData( FALSE )を呼び出してください。
スナナさんありがとうございました。
UpdateData( FALSE )を呼び出したら成功しました。
ツイート | ![]() |