フォームベースではアイドル関数を使うことはできるのですが、
ダイアログベースになるとできません。
ChogeApp::OnIdle()では?
はずしていたら m(__)m です。
SDIやMDIではメッセージループにCWinThread::Run()を使いその中でOnIdle()を呼んでいます
一方、ダイアログの場合はCWnd::RunModalLoop()を使いOnIdle()は呼んでいません
しかしCWnd::RunModalLoop()を見るとダイアログプロシージャにWM_KICKIDLE
をSendMessageしています
ダイアログのWindowProcを実装しこんな感じで
WM_KICKIDLEを処理すれば良いと思います
LRESULT xxxDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_KICKIDLE) {
return AfxGetApp()->OnIdle(lParam);
}
return CDialog::WindowProc(message, wParam, lParam);
}
Bunさん、kuさん、ありがとうございます。
アプリケーションクラスを見るとDoModalでダイアログを呼び出しているので
Idel()を呼び出していないのでは?と思い悩んでいたのですが
WM_KICKIDLEで試してみます。
ku様、秋様
> 一方、ダイアログの場合はCWnd::RunModalLoop()を使いOnIdle()は呼んでいません
> しかしCWnd::RunModalLoop()を見るとダイアログプロシージャにWM_KICKIDLE
> をSendMessageしています
ほんとですね。OnIdle()には来ませんでした。
RunModalLoop()の中も深いけど、ku様の読みも深~い。関心しました。(^^;
すいません、力不足でした。
ビルドすると WM_KICKIDLE が定義されていない識別子ですとでます。
VC初心者です。m(_ _)m
すいません、力不足でした。
ビルドすると WM_KICKIDLE が定義されていない識別子ですとでます。
VC初心者です。m(_ _)m
#include AFXPRIV.H
かな?
できました!!
本当にありがとうございました。
自称中級者だと実は思ってたのですが、全然だめですね。
これからもVCがんばっていきます。
ありがとうございました。
先に書かれてしまいました
Bunさんへ
コモンダイアログのカスタマイズのページは役に立ちました
時間があるときに自分のローカルで駄目な方法と比べてみます
実は、あそこのうまい検索の仕方とか知らない(^^;
基本的に知識だけで間違いのない答えが出せそうな時以外は
答える前に一通りコードを書いてます
ちなみにWM_KICKIDLEに気が付く前は、CDialog::DoModal以降を自分で実装する
CDialog::DoModal2というのを作って確認してました
lIdleCountという変数を見つけてWM_KICKIDLEに至りました
種をあかせば所詮こんなもんです(笑)
ku様へ
> コモンダイアログのカスタマイズのページは役に立ちました
実は、このページはよそでCFileDialogクラスを調査中に、教わっただけなんす。(^^;
> 基本的に知識だけで間違いのない答えが出せそうな時以外は
> 答える前に一通りコードを書いてます
> ちなみにWM_KICKIDLEに気が付く前は、CDialog::DoModal以降を自分で実装する
> CDialog::DoModal2というのを作って確認してました
> lIdleCountという変数を見つけてWM_KICKIDLEに至りました
> 種をあかせば所詮こんなもんです(笑)
知識の豊富なku様でも、苦労されることがあるのですね。ほっとしました。
(もちろん、私はWM_KICKIDLEなんて初耳でしたけど(笑))
私はまだまだ初心者です。今後ともよろしくお願いします。m(__)m
今回はじめて利用させてもらったのですが、
kuさんとBunさんは常連の方なのでしょうか?
これからも、よろしくお願いします。
本当にありがとうございました。