Assertion Failed

[戻る]
トライ屋− 2007/07/25(水) 15:40:42
VC++でDLGベースで画面を作成しているのですが、再描画ロジックの所で、"Debug Assertion 
Failed"が出てしまいました。無視して実行すると、一応想定どおりの動きはするのですが、回
避する方策についてご存知の方教えてください。
下記ソースは、DLGをリサイズした時に、ステータスバーを連動してリサイズする内容で、
「MoveWindow」の個所で"Debug Assertion Failed"となっているようです。
ちなみに、VC6を使用しています。

void CToolDlg::OnSize(UINT nType, int cx, int cy) 
{
    CDialog::OnSize(nType, cx, cy);
    ReSizeStatusBar(cx,cy);
}

int CToolDlg::ReSizeStatusBar(int XAdr,int YAdr) 
{
    CRect    rectTmp;
    this->GetClientRect( &rectTmp );

    int i,j;
    i = rectTmp.bottom - 25;
    j = rectTmp.Width();
    m_StatusBar.MoveWindow(0,i,j,25);
}

※引数部分については、debug中なので、現時点では使用していませんが気にしないで下さい。

シャノン 2007/07/25(水) 16:04:40
m_wndStatusBar.Create をしているのはどこですか?

シャノン 2007/07/25(水) 16:05:03
変数名間違えたw
m_StatusBar.Create です

Blue 2007/07/25(水) 16:08:35
ダイアログベースプログラムにステータスバーを作るには? 
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1747453&SiteID=7
は参考になりますか?

たいちう 2007/07/25(水) 16:11:16
情報が少ないのであてずっぽうですが、
m_StatusBarのウィンドウが存在しないうちに動かそうとしているのでは?

if (m_StatusBar.m_hWnd)
    m_StatusBar.MoveWindow(0,i,j,25);

↑これで回避できない場合は、m_StatusBarについてもっと情報を示してください。

トライ屋− 2007/07/25(水) 16:12:38
シャノンさんこんにちは。

ステータスバーのCREATEは、DLGのOnInitDialog内で行っています。
下記コード抜粋です。

// ステータスバーの初期化
{
    if (!m_StatusBar.Create(this) ||
      !m_StatusBar.SetIndicators(indicators,
      sizeof(indicators)/sizeof(UINT))) 
        {
        TRACE0("Failed to create status bar\n");
        return -1;
    }
    m_StatusBar.SetPaneText(1,"AAA",TRUE);
    m_StatusBar.ShowWindow(SW_SHOW);

    CRect    rectTmp;
    this->GetClientRect( &rectTmp );
    m_StatusBar.MoveWindow(0,rectTmp.bottom-25,rectTmp.Width(),25);
}

トライ屋− 2007/07/25(水) 16:18:32
[[解決]]
こんにちは、「たいちう」さん。
当てずっぽうのご意見ありがとうございます。
見事、解決しました。^^)v

OnInitDialog内でCREATEしているのですが、
この時点では、まだ、windowが存在していないんですね?
勉強になりました。

皆さんありがとうございました。

古いスレッドには追加発言できません。