2つのダイアログ間で共通のタイマーを持たせる方法

このQ&Aのポイント
  • 2つのダイアログ間で共通のタイマーを作成する方法についてまとめました。
  • ダイアログ1とダイアログ2で共通の動作をするタイマーを設定する方法について解説します。
  • ダイアログ1でのタイマーの経過時間をダイアログ2でも共有する方法を紹介します。
回答を見る
  • ベストアンサー

2つのダイアログ間で共通のタイマーを持たせる方法

お世話になります。 なかなかいいタイトルが浮かばず、いまいち分かりにくいタイトルになってしまいました。 なにがしたいかといいますと、 2つのダイアログ、ダイアログ1,ダイアログ2があります。ダイアログ2はダイアログ1からポップアップです。 ダイアログ1,ダイアログ2には同じ動作を示すボタンがありまして、そのボタンの動作というのが、ボタンを押すとボタンに 貼り付けているビットマップ画像が変化します。そして決められた時間が経過すると、元のビットマップ画像に戻るといった 動作をします。 その動作を2つのダイアログで共通に使いたいのです。 つまり、例えばボタンを押してから1分たったらビットマップ画像が元に戻るといった動作をするように設定したときに ダイアログ1でボタンをクリックして20秒経過し、ダイアログ2を呼び出したとします。 そして、ダイアログ2が呼び出されて40秒後(ボタンをはじめて押されてから60秒後)にボタンの画像がダイアログ1,2とも元の画像に 戻ってほしいのです。 このように動作させるにはどのようにしたらよいでしょうか? ご意見がありましたら、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.2

「60秒経過したかどうか」を保持する変数を、グローバル変数にすれば良いだけでは? ダイアログ1のボタンを押す ↓ ボタンのイメージを変える ↓ グローバル変数を「まだ60秒たってない」に設定する ↓ 60秒後にイベントが発生するタイマーを起動 60秒後にイベントが発生するタイマーでイベントが起きたら ↓ グローバル変数を「60秒たった」に設定する ↓ 自分自身(タイマー)を止める あとは、ダイアログ1、ダイアログ2のアイドリング時に、以下の4通りの処理をすればよい。 ・パターン1 グローバル変数が「60秒たってない」かつ「イメージが元のまま」の場合 ↓ イメージを「ボタンを押したら変化するイメージ」に変える ・パターン2 グローバル変数が「60秒たった」かつ「イメージが変化している」の場合 ↓ イメージを「元のイメージ」に戻す パターン3 グローバル変数が「60秒たってない」かつ「イメージが変化している」の場合 ↓ 何もしない パターン4 グローバル変数が「60秒たった」かつ「イメージが元のまま」の場合 ↓ 何もしない

その他の回答 (1)

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

ん?20秒経過時点で受け取ったタイマイベントで、40秒経過したら再度通知するようにタイマをリセットすればいいだけの話では。 動作を共通に使いたいというのがよくわかりませんが、 ダイアログ1はダイアログ2を制御する立場にあると思います。 通知を受けたダイアログ1は、ダイアログ2に通知する。 何か難しいことがありますか?

関連するQ&A

  • ダイアログウィンドウのオーナードローボタンの画像を定期的に差し替えたい

    いつも参考にさせていただいてます。 タイトルにも書きましたが、ダイアログベース(が関係してるかは分かりませんが)のウィンドウにあるオーナードローボタンのビットマップ画像を1秒ごとに更新したりすることは可能なのでしょうか? また可能であれば、どのように実装するのがいいのかご教示下さい。 宜しくお願い致します。

  • ダイアログのボタンコントロールで困っています

    winプログラムを始めて間がない初心者ですが、よろしくお願いします。 ダイアログ上に、ビットマップ画像を使ってボタンを作成するために、 MFCのCButtonのオーナー描画 や CBitmapButtonを使ってボタンコントロールを作成したところ、 ボタンの反応速度が遅く、連続でクリックが出来なくて、困っています。 反応速度の早いボタンコントロールを作成するには、どうすれば良いのでしょうか?

  • ダイアログボタンからページへ飛ぶ方法

    タイトル内での説明だと分かりにくいと思うのですが… ボタンを押すとダイアログを出して、 そのダイアログ内のボタンをクリックすると、 別のページへ飛べるようにしたいのです。 これでわかるでしょうか? 分からなかったらいくらでも聞いて下さい! どうにかして使えるようしにたいです。 お願いします。

    • ベストアンサー
    • HTML
  • ダイアログの表示、非表示の切り替えについて

    環境 WIN98 VC++6.0 MFC SDIにて 1.ポップアップメニューの”ダイアログ作成”をクリックすると、 void CMainFrame::OnKNew() { CInput dlg; int iID = dlg.DoModal(); } として、ダイアログを作成します。 2.次に、ダイアログのボタン押し下げにてダイアログを非表示にします。 void CInput::OnButton1() { ShowWindow(SW_HIDE); } このようなコードにおいて、非表示状態での”ダイアログ作成”クリックでは非表示から表示に切り替えることを実現するにはどのようにすれば良いのでしょうか? よろしくお願いいたします。

  • ダイアログが出てこない(スマホ)

    いつもパソコンで見ているサイトをスマホで見てみました。トップページは出るのですが、そこから先に進めません。 クリックし、場所を選択するのですが、パソコンではダイアログで地域名がダァーっと出てきて、選んだ地域をクリックします。スマホでは クリックしてもダイアログが出てこないため選択できず、何も変わりません。 ネットにつないでいるときに、メニュー→設定→高度な設定→ポップアップをブロックと、ページの自動調整のチェックは外しています。 どうすれば、パソコンと同じようにダイアログが出てきますか? 使用しているスマホは ドコモのアクオスSH-01Eです。よろしくお願いします。

  • コモンダイアログコントロールの使い方

    お世話になっております。 VC++6.0でアプリ開発をしていますが、 コモンダイアログの使い方がわかりません。 ダイアログ上のボタンをクリックしたら 「ファイルを開く」のダイアログを表示させたいのですが。 ご回答よろしくお願いします。

  • ダイアログを継承したダイアログの作成について

    お世話になります。 今回お聞きしたいことは、 オリジナルに作成したダイアログを継承したオリジナルのダイアログを作成した際に、オリジナルに作成した基底ダイアログのダイアログ上のコントロールや、そのコントロールの位置を継承することはできますでしょうか? ということです。 何がしたいかといいますと、4つのダイアログをメインダイアログから呼び出すのですが、その4つのダイアログには共通するコントロールがあり、そのコントロールの動作もその位置も全く同じなのです。 そのため、いちいち4つのダイアログにコントロールの貼り付けや、処理を記入せずに、その共通のコントロールをもった基底ダイアログを作成して、その基底ダイアログの継承としてダイアログが作れたらなと思い、質問させて頂きました。 継承をすると、基底クラスの関数等を使うことができるというのはわかるのですが、ダイアログ上のコントロールの位置までは不可能なのかなと疑問に思いました。 ご回答を宜しくお願い致します。 開発環境は Windows CE 6.0 Visual Studio 2005 です。

  • チャイルドダイアログの最前面表示

    現在、MDIフレーム上に、複数のチャイルドスタイルのダイアログが存在するプログラムを改造中です。 その中にMapDKIVの地図を描画しているダイアログがあり、その地図上に縮尺スケールのビットマップを描画しようとしています。(MapDKIVには、その機能がまだ無い為) 縮尺スケールのビットマップを描画する為のダイアログを同様にチャイルドスタイルにし、SetWindowPos()を使って最前面に表示しようとしましたが、地図を描画しているダイアログをクリックすると、後ろへ行ってしまいます。 MSDNのSetWindowPos()の説明には、 「子ウィンドウ、ポップアップウィンドウ、またはトップレベルウィンドウのサイズ、位置、および Z オーダーを変更します。」 と記述されています。 が、あるサイトでは、 「MDI子Formは、子Windowであって、TopLevelWindowではないのですから、SetWindowPosは最前面や最背面設定を受け入れません。」 と記述されています。 縮尺スケールのビットマップを描画する為のダイアログを通常のスタイルにし、「フォアグランド表示する」とすると、メインフレームのサイズを小さくしたり、移動した時に、その場所へ取り残されてしまいます。 何か、方法はないものでしょうか? 開発環境 VisualC++ 6.0 SP6 どなたかお助け下さい!よろしくお願いします。

  • ダイアログの非表示が遅い

    ダイアログの非表示が遅い Windows CE上で動作するソフトを作成中で、約2cm×2cmほどのボタンだけのダイアログが1つ(メインのダイアログ)、約2cm×1cmほどのボタンだけのダイアログが3つあります。(ダイアログの大きさは、それぞれのボタンと同じサイズで、メイン以外はモーダレスです。) その中の1つを押すと、別の全画面サイズのダイアログを表示し、そのダイアログ上のボタンを押すと、元のボタンだけになるようにしています。 全て、メインのダイアログのOnInitDiarog()で生成しておき、ShowWindow(SW_SHOW)で表示し、ShowWindow(SW_HIDE)で非表示にしているのですが、全画面サイズのダイアログを非表示にする際、表示が消える前に、ボタンのダイアログが表示されてしまい、見た目がかなり悪いのです。 Windows CEは遅いと聞いた事はあるのですが、どうにか対処する方法はないのでしょうか? どなたか助言をお願い致します。 環境は以下の通りです。 ・Windows CE 5.0 ・Visual C++ 2005 ・MFCスマートデバイス 以上、よろしくお願いします。

  • CDHtmlDialog で子ダイアログがアクティブになりません

    現在CDHtmlDialogクラスを使って、ダイアログベースのプログラム開発を試みています。開発環境はVisualStudio2008です。 親ダイアログにあるボタンをクリックすると、子ダイアログが親ダイアログに重なる位置に表示され、子ダイアログにあるHTML コントロールのイベント処理等ができるようにしたいのですが、うまくいかず困っています。 子ダイアログの表示まではできたのですが、アクティブになっていないようです。ただ画面に表示されているだけといいますか・・・ 子ダイアログに配置したボタンはクリックできず(カーソルが変わりません)、親ダイアログに配置したボタンはクリックできる、というような状態です。 また、ダイアログの一部が画面外になるように動かしてから元の位置に戻すと、子ダイアログの再描画がされず、その下に隠されていた親ダイアログが出てきてしまいます。 子ダイアログのプロパティは Style:子、Border:なし にしています。 手順は、 1.親ダイアログのOnInitDialogで子ダイアログをCreate。MoveWindowで位置調整。子ダイアログはShowWindowで非表示にする。 2.親ダイアログのボタンをクリックすると、子ダイアログをShowWindowで表示させる。 としています。 CDialogで同じ方法でやっていたときは何も問題なかったのですが・・・ CDHtmlDialogに関する情報はあまり出回っていないようで、こちらに質問させていただきました。 説明が分かり難い点もあるかと思いますが、ご教示よろしくお願いいたします。