- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OpenGLでウィンドウハンドルの取得)
OpenGLでウィンドウハンドルの取得
このQ&Aのポイント
- glut関数で作成したウィンドウのハンドルを取得し、文字を表示する方法について説明します。
- TextOutやDrawTextを使用して文字を表示しようとしたところ、背景色しか表示されない問題が発生しています。
- おそらくDrawTextの戻り値が18であることから、成功していると考えられますが、なぜ文字が表示されないのかお教えください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
DirectXやOpenGLが扱ってるサーフェイスとWindows GDIが管理しているサーフェイスはまったく別のものだと 思ってください。 通常はウインドウの上にOpenGLのサーフェイスが作られているだけで、ウインドウ上に何を描画しようとも 上書きされてしまいます。 どうしてもDrawTextの結果をOpenGLで使いたいなら、 CreateBitmapやCreateDC等のAPIを使い、メモリー上のデバイスコンテキストを作成し そこにDrawTextを実行。 それをBitmapに変換する等してから、テクスチャとして流し込む等することは可能だと思います。 ちなみにDirectX9にはIDirect3DSurface9::GetDCというものが用意されているようですが アルファが設定されていると上手く動作しないようです。 OpenGLでそれに該当するものがあるかどうかは分かりません。 ただ単に文字列描画をしたいだけなら「OpenGL 文字列描画」で検索した方が早いと思います。 BeginPaint、EndPaint はコンソールアプリケーションでは使えません。 MSDNからの引用ですが「アプリケーションがこの関数(BeginPaint)を呼び出せるのは、WM_PAINT メッセージに応答するときだけです。」 となっています。
お礼
詳しい説明ありがとうございました。 つまりglFlash()で上書きされるということでしょうか。 いろいろ試行錯誤した結果、TextOut関数をglFlush()の後に記述するとなぜか文字列を表示することができました。しかしもっと複雑なプログラムで試したらダメでした。 やはり別の方法を考えようと思います。