最近やっているダイアログベースの exe で,動作結果をわかるようにしたかった.
メッセージボックスは簡単だか,それだと「OK」などを押す必要があるので,そうではないもの.
個人的に,他のツールでやっているタイトルバーを使う方法もあるが,他のものを試したくなった.
ステータスバーを使えることは知っていたが,ダイアログベースで使うには面倒なイメージがあった.
それで調べてみると,意外と簡単に実装できそうなことがわかった.
やり方としては,次のような手順.
ダイアログに変数を追加.
CStatusBarCtrl m_StatusBar;
OnInitDialog で Create .
if (m_StatusBar.Create(WS_CHILD | WS_VISIBLE | SBT_NOBORDERS,
CRect(0,0,0,0), this, AFX_IDW_STATUS_BAR)) {
int parts[] = { -1 };
m_StatusBar.SetParts(1, parts);
m_StatusBar.SetText(_T(" ready "), 0, 0);
}
OnSize で SendMessage .
void CXxxDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (::IsWindow(m_StatusBar.m_hWnd)) {
m_StatusBar.SendMessage(WM_SIZE, 0, 0);
}
}
あとは適当なタイミングで描画すれば良い.
void CXxxDlg::OnTest()
{
if (::IsWindow(m_StatusBar.m_hWnd)) {
m_StatusBar.SetText(_T(" Test "), 0, 0);
::Sleep(500) ;
#ifdef MessageBar
{
int count_max = 1000 ;
MessageBar bar(_T("Test"),count_max) ;
for (int index=0 ; index<count_max ; index++) {
::Sleep(5) ;
bar.SetBarInc() ;
}
}
#endif
m_StatusBar.SetText(_T(" "), 0, 0);
}
}

個人的なクラスの MessageMFC もうまく動作した.
0 人中 0 人がこの 投稿 は役に立ったと言っています。