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中なので、現時点では使用していませんが気にしないで下さい。
m_wndStatusBar.Create をしているのはどこですか?
変数名間違えたw
m_StatusBar.Create です
ダイアログベースプログラムにステータスバーを作るには?
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1747453&SiteID=7
は参考になりますか?
情報が少ないのであてずっぽうですが、
m_StatusBarのウィンドウが存在しないうちに動かそうとしているのでは?
if (m_StatusBar.m_hWnd)
m_StatusBar.MoveWindow(0,i,j,25);
↑これで回避できない場合は、m_StatusBarについてもっと情報を示してください。
シャノンさんこんにちは。
ステータスバーの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);
}
こんにちは、「たいちう」さん。
当てずっぽうのご意見ありがとうございます。
見事、解決しました。^^)v
OnInitDialog内でCREATEしているのですが、
この時点では、まだ、windowが存在していないんですね?
勉強になりました。
皆さんありがとうございました。