• 締切済み

VC++のダイアログでOpenGLの動画とボタン

OpenGLのグラフィクスをVC++のダイアログ上に表示させて,プログラムを作成しているのですが,OpenGLを動画にするとボタンが押せなくなってしまいます. ディスプレイの更新はOnPanit()を呼び出すことで,グラフィクスを常に更新させているのですが,この手法では,グラフィクスの更新中はボタン入力待ちになってないみたいです. グラフィクスを常に更新し続け,ボタン等のツールも利用できるようにしたいのですが,ご存知の方がいらっしゃいましたらご教授ください.

みんなの回答

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.1

以前 OpenGL ES + VC で作ったプログラムの一部です.ご参考まで. インデントが潰れないようにするため,半角空白を全角空白に置換しています. (MFC を使っていなくてすいません.) // 大域変数 (メッセージループ制御用) ======================================= BOOL Wait = FALSE; // アニメーションを一時停止したい時に真にする. BOOL Done = FALSE; // アニメーションを終了したい時に真にする. // OpenGL を用いて実際に描画を行う関数 ===================================== void Render(int width, int height) {  (中略)  if(Step) {   (アニメーション用データを更新する.ここでは描画は行わない.    (例:少し図形の回転角を増やす,など.))   Step = FALSE;  }  (OpenGL を用いて実際に描画を行う.) } // メッセージループ ========================================================  MSG msg;  HACCEL hAccelTable;  while(!Done) {   if(Wait) {    // アニメーション停止中の場合:普通のメッセージループ    if(!GetMessage(&msg, NULL, 0, 0)) break;    goto ProcessMessage;   } else {    // アニメーション動作中の場合:メッセージがあるか?    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {     // ある場合:それを処理する.     if(msg.message == WM_QUIT) break; ProcessMessage:     if(!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {      TranslateMessage(&msg);      DispatchMessage(&msg);     }    } else {     // 再描画が行われるように「予約」する.     InvalidateRect(AppWindow, NULL, FALSE);     // 次の描画の際にアニメーションが少し動くようにする.     Step = TRUE;    }   }  } // ウインドウプロシージャの WM_PAINT 処理部 (OnPaint() 相当部分) ===========  case WM_PAINT: {    PAINTSTRUCT ps;    RECT rect;    HDC hdc = BeginPaint(hwnd, &ps);    GetClientRect(hwnd, &rect);    EndPaint(hwnd, &ps);    // 実際に再描画を行う.    Render(rect.right, rect.bottom);   }   break;

関連するQ&A

  • VC++でopenGLを利用したい...。

    VC++でダイアログベースのプログラムを作成したいと考えています。 そのダイアログ内のウィンドウにopenGLを表示させたいと思っているのですが、どうすればよいのかわかりません。 ご存知の方がいらっしゃいましたら、ご教授ください。 参考のになりそうなサイトでもかまいませんのでよろしくお願いします。

  • VC++のダイアログベースアプリケーションのボタンについて

    開発環境:WinXP(Home) + Visual C++6.0 Enterprise こんにちは。VC++にてダイアログベースのアプリケーションを開発しております。 VC++に関しては数年ぶりなのですっかり忘れておりまして、入門書から読んでおります。プログラミング歴自体は15年程度になります。 ダイアログベースのアプリケーションのスケルトンを作って、すぐに実行させると、一番下にOK,キャンセル,適用,ヘルプというボタンが出ます。 これらのボタンをすべて消したいのですが、どうしたらいいのでしょうか? リソースを見てもないので、困っております。 どなたかご教授お願い致します。

  • 【VC2005】外部から呼ばれた複数のVCのEXEからそれぞれ1つのみのダイアログを出す方法

    VC超超初心者です。 タイトルの件、今までうんうん考えましたが、独力では厳しいので よい知恵(コーディング)を教えて頂けませんでしょうか? ************************************************ やりたいこと: ・プログラムAから、ShellExecute()を利用して、プログラムBを  複数起動します。(現在、このプログラムBをコーディング中です。) ・プログラムBにあるボタンを押して、  1つだけのダイアログCを出力させたいです。 (呼び出し元のプログラムBから自分の呼び出したダイアログCを  操作(拡大、閉じるなど)をしたいです。) 条件: ・プログラムBはモードレスでダイアログCを呼び出したいです。 ・プログラムBがダイアログCを既に呼び出していれば、ボタンをクリック  してもカウントせず、新たにダイアログCはつくりません。  (プログラムBの他のボタンは有効とします。) ・プログラムBで自分の呼び出したダイアログCが閉じられれば、  再度ボタンを押して、ダイアログCを呼び出せます。 ・複数のプログラムBが起動している場合、プログラムBは自分が  呼び出したダイアログCのみをコントロールします。 ************************************************ 私の環境 ・OS:WindowsXP pro ・VC2005 Express Edition ・プロジェクト種類:CLR お手数ですが、詳しい方いましたら、ご協力お願いします。

  • vc++のpictureboxにopenGLの画像を描画する方法につい

    vc++のpictureboxにopenGLの画像を描画する方法について。 現在、Visual C++ 2010のフォームアプリケーションで、任意のパラメータを入力したらその値に応じて物体の動きが変わるといったアプリケーションを開発しています。その動き方をopenGLでアニメーションとして可視化したいと思っています。そして、そのアニメーションをvc++のフォームアプリケーションのpictureboxに表示したいと思っているのですが、vc++とopenGLのどちらもかなりの初心者なので、pictureboxへの表示の仕方がわかりません。 以下に参考URLを貼らせていただきます。このようなものにパラメータを入力する部分を設けたものを作りたいのですが、まったく意味がわかりません。どなたかご教授お願いいたします。 http://www.t-pot.com/program/127_OpenGLNET/index.html

  • VC++ ボタンが押されるまで入力を受け付けない

    VC++でアンケートを作成しています。 そこで、例えば「項目1」に入力が終わって、「項目1完了」というボタンを押すと、 「項目2」に回答が出来るようにしたいのです。 つまり、「項目1完了」ボタンが押されるまで、項目2は非アクティブ(よくあるように灰色とか)にしたいんです。 項目1と項目2とダイアログを分けて、項目1が終わったら2のダイアログを表示させるようにしてもいいんですが、できれば1つのダイアログで済ませたいと考えています。 「項目1完了」のボタンが押されたら・・・という関数(OnBnClicked~)のなかに書けばいいことを教えてください。 もしくはこんな関数があるよ、というヒントでも結構です!

  • VC++でダイアログ表示について

    VC++初心者です。 MFCアプリケーションでダイアログベースのアプリケーションを作ったのですが、ボタンクリック時にもう一つダイアログを表示しようと思っています。 以下のコードだと、うまく表示されずに画面がフリーズしてしまいます。どこを直したらいいのでしょうか。ご教授願います。 環境は、xp、Visual Studio.net 2003です。 void CMFCtestDlg::OnBnClickedButton1() {   //   CmyDialog myDL;   myDL.DoModal(); } MFCtestDlg.cpp内、#include "myDialog.h" は記述してあります。 VBの経験はあるのですが、VC++はまったくわかりません。 よろしくお願いします。

  • ダイアログ、ボタンについて

    VC++でプログラミングしています。 MFC AppWizard(exe) でダイアログベースで造っています。 以下の方法を教えてください。 ・EXE起動時、ダイアログのサイズを変更したい。 起動時に画面サイズをチェックして、画面いっぱいの大きさにしたいため。 ・EXE起動後、ボタンに表示している文字列を変更したい。 識者の方、ご教授願います。

  • 子ダイアログのコントロールにフォーカス(VC++2005)

    お世話になります。 Visual Studio 2005でVC++の開発をしております。 ダイアログを2つ用意して、一つはstyleを「ポップアップ」に、 もう一つは「子」にしてます。 親ダイアログ内にタブをセットし、その上に子を乗せる処理を行っていて 親のダイアログのボタンイベントから子のダイアログのコントロールにフォーカスを 当てたいのですが、どのようにしたらよろしいのでしょうか? 親ダイアログ内では、 (子ダイアログ).Create(子ダイアログクラス, this); で生成して MoveWindowやShowWindowで位置・表示の設定を行っています。 親から子ダイアログ内のコントロールの入力チェックを行おうと思い、 未入力判定まではできたのですが どうしてもSetFocus()でフォーカスが当たりません。 どなたかご教授していただけますでしょうか?

  • バックグラウンドで動作させる。

    VC++つかってます。 バックグラウンドで動作するプログラムをつくりたのですが、どうはじめればいいかわかりません。 たとえばあるキーを入力したら、画面を真っ黒にするといったようなものです。真っ黒にするプログラムはすでに出来ています。(ダイアログのボタンを押せば黒くなるというような。) これをウィンドウ無しでつくるにはどういった手法をすればいいでしょう。

  • ダイアログの作成

    言語は、VC++を使っています。 今、メニュー画面に無線というボタンがあるんですけど、そこをクリックすると、IPアドレスを入力できるようなダイアログ?っていうんですかね?そういうのを作りたいですけど、どういう風につくればいいのかわかりません。また、そのIPアドレスの値をプログラム中で使いたいときはどうすればいいでしょうか? よろしくお願いします!

専門家に質問してみよう