コンソールアプリで作ることが前提です。
glut関数で作成したウィンドウのハンドルを取得し、その画面上に文字を表示しようとTextOutやDrawTextやらを使ってみたんですが、背景色しか表示されません。DrawTextの戻り値が18だったので成功していると思うのですが。どこがおかしいのかご指摘をお願いします。
#include<stdio.h>
#include<windows.h>
#include<GL/glut.h>
HWND hwnd;
void display(){
glClearColor(0.5,0.5,0.5,1);
glClear(GL_COLOR_BUFFER_BIT);
hwnd=GetActiveWindow();
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
LPCSTR str = TEXT("あああ");
GetClientRect(hwnd, &rect);
hdc = BeginPaint(hwnd, &ps);
SetRect( &rect, 10, 10, 100, 100);
TextOut(hdc, 10, 10, str, lstrlen(str));
DrawText(hdc, TEXT("あああ"), -1, &rect,DT_CENTER);
EndPaint(hwnd, &ps);
glFlush();
}
int main(int argc,char **argv){
glutInit(&argc,argv);
glutInitWindowSize(640,480);
glutCreateWindow("aaa");
glutDisplayFunc(display);
glutMainLoop();
return(0);
}
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 メッセージに応答するときだけです。」
となっています。
詳しい説明ありがとうございました。
つまりglFlash()で上書きされるということでしょうか。
いろいろ試行錯誤した結果、TextOut関数をglFlush()の後に記述するとなぜか文字列を表示することができました。しかしもっと複雑なプログラムで試したらダメでした。
やはり別の方法を考えようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロール内の文字の背景色
-
デスクトップ撮影を実現するwin...
-
色描画
-
ビットマップ(表示速度とサイズ)
-
クライアント領域をCBitmapに取...
-
パレット番号で塗りつぶし
-
グラフの交点の求め方(Excel)
-
ゲームでは結局どっちが良いの?
-
マインクラフト(pc版)で座標...
-
エクセルで作った新しいウイン...
-
UWSCで特定のChromeのタブをア...
-
勝手にウィンドウが開いて止ま...
-
Tera Termに他のアプリから文字...
-
エクセルのコントロールツール...
-
コンボボックス内の文字サイズ変更
-
Labelの文字をスクロールする際...
-
「アイテムは収集されました」...
-
ピクチャボックスの座標取得
-
他アプリの操作(メニューバー)
-
Windowのちらつき防止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
画面がチカチカする
-
コントロール内の文字の背景色
-
ダイアログにビットマップを貼...
-
PlgBltでの透過
-
メモリデバイスコンテキスト&...
-
Active Basic 再描写処理
-
パレット番号で塗りつぶし
-
PrintScreenしたあとに画像を保...
-
ビットマップ(表示速度とサイズ)
-
SetWindowRgn()関数について。
-
OpenGLでウィンドウハンドルの取得
-
VC++のTextOutの再描画の仕方
-
usbデバイスとの通信
-
クライアント領域をCBitmapに取...
-
ハードコピーをプログラムから...
-
[Active Basic]BitBltで画像を表示
-
BitBlt関数について教えてください
-
色描画
-
VC++でopenGLを利用したい...。
おすすめ情報