ダイアログでアイドル関数を使うには? – プログラミング – Home

ダイアログでアイドル関数を使うには?
 
通知
すべてクリア

[解決済] ダイアログでアイドル関数を使うには?


秋
 秋
(@秋)
ゲスト
結合: 24年前
投稿: 6
Topic starter  

フォームベースではアイドル関数を使うことはできるのですが、
ダイアログベースになるとできません。


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

ChogeApp::OnIdle()では?

はずしていたら m(__)m です。


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

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);
}


返信引用
秋
 秋
(@秋)
ゲスト
結合: 24年前
投稿: 6
 

Bunさん、kuさん、ありがとうございます。

アプリケーションクラスを見るとDoModalでダイアログを呼び出しているので
Idel()を呼び出していないのでは?と思い悩んでいたのですが
WM_KICKIDLEで試してみます。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

ku様、秋様

> 一方、ダイアログの場合はCWnd::RunModalLoop()を使いOnIdle()は呼んでいません
> しかしCWnd::RunModalLoop()を見るとダイアログプロシージャにWM_KICKIDLE
> をSendMessageしています

ほんとですね。OnIdle()には来ませんでした。

RunModalLoop()の中も深いけど、ku様の読みも深~い。関心しました。(^^;


返信引用
秋
 秋
(@秋)
ゲスト
結合: 24年前
投稿: 6
 

すいません、力不足でした。

ビルドすると WM_KICKIDLE が定義されていない識別子ですとでます。
VC初心者です。m(_ _)m


返信引用
秋
 秋
(@秋)
ゲスト
結合: 24年前
投稿: 6
 

すいません、力不足でした。

ビルドすると WM_KICKIDLE が定義されていない識別子ですとでます。
VC初心者です。m(_ _)m


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

#include AFXPRIV.H

かな?


返信引用
秋
 秋
(@秋)
ゲスト
結合: 24年前
投稿: 6
 

できました!!
本当にありがとうございました。

自称中級者だと実は思ってたのですが、全然だめですね。
これからもVCがんばっていきます。
ありがとうございました。


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

先に書かれてしまいました

Bunさんへ
コモンダイアログのカスタマイズのページは役に立ちました
時間があるときに自分のローカルで駄目な方法と比べてみます
実は、あそこのうまい検索の仕方とか知らない(^^;

基本的に知識だけで間違いのない答えが出せそうな時以外は
答える前に一通りコードを書いてます
ちなみにWM_KICKIDLEに気が付く前は、CDialog::DoModal以降を自分で実装する
CDialog::DoModal2というのを作って確認してました
lIdleCountという変数を見つけてWM_KICKIDLEに至りました
種をあかせば所詮こんなもんです(笑)


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

ku様へ

> コモンダイアログのカスタマイズのページは役に立ちました
実は、このページはよそでCFileDialogクラスを調査中に、教わっただけなんす。(^^;

> 基本的に知識だけで間違いのない答えが出せそうな時以外は
> 答える前に一通りコードを書いてます
> ちなみにWM_KICKIDLEに気が付く前は、CDialog::DoModal以降を自分で実装する
> CDialog::DoModal2というのを作って確認してました
> lIdleCountという変数を見つけてWM_KICKIDLEに至りました
> 種をあかせば所詮こんなもんです(笑)

知識の豊富なku様でも、苦労されることがあるのですね。ほっとしました。
(もちろん、私はWM_KICKIDLEなんて初耳でしたけど(笑))

私はまだまだ初心者です。今後ともよろしくお願いします。m(__)m


返信引用
秋
 秋
(@秋)
ゲスト
結合: 24年前
投稿: 6
 

今回はじめて利用させてもらったのですが、
kuさんとBunさんは常連の方なのでしょうか?

これからも、よろしくお願いします。
本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました