• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OpenGLでウィンドウハンドルの取得)

OpenGLでウィンドウハンドルの取得

このQ&Aのポイント
  • glut関数で作成したウィンドウのハンドルを取得し、文字を表示する方法について説明します。
  • TextOutやDrawTextを使用して文字を表示しようとしたところ、背景色しか表示されない問題が発生しています。
  • おそらくDrawTextの戻り値が18であることから、成功していると考えられますが、なぜ文字が表示されないのかお教えください。

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

DirectXやOpenGLが扱ってるサーフェイスとWindows GDIが管理しているサーフェイスはまったく別のものだと 思ってください。 通常はウインドウの上にOpenGLのサーフェイスが作られているだけで、ウインドウ上に何を描画しようとも 上書きされてしまいます。 どうしてもDrawTextの結果をOpenGLで使いたいなら、 CreateBitmapやCreateDC等のAPIを使い、メモリー上のデバイスコンテキストを作成し そこにDrawTextを実行。 それをBitmapに変換する等してから、テクスチャとして流し込む等することは可能だと思います。 ちなみにDirectX9にはIDirect3DSurface9::GetDCというものが用意されているようですが アルファが設定されていると上手く動作しないようです。 OpenGLでそれに該当するものがあるかどうかは分かりません。 ただ単に文字列描画をしたいだけなら「OpenGL 文字列描画」で検索した方が早いと思います。 BeginPaint、EndPaint はコンソールアプリケーションでは使えません。 MSDNからの引用ですが「アプリケーションがこの関数(BeginPaint)を呼び出せるのは、WM_PAINT メッセージに応答するときだけです。」 となっています。

sanato
質問者

お礼

詳しい説明ありがとうございました。 つまりglFlash()で上書きされるということでしょうか。 いろいろ試行錯誤した結果、TextOut関数をglFlush()の後に記述するとなぜか文字列を表示することができました。しかしもっと複雑なプログラムで試したらダメでした。 やはり別の方法を考えようと思います。

関連するQ&A