2009-06-05 5 views
0

私はウィンドウモードとフルスクリーンという2つの作業モードを持つOpenGLアプリケーションを開発しています。Windows下でのOpenGLのテキスト位置

アプリケーションは、OpenGLを使用していくつかのグラフィックオブジェクトを表示し、同じAPIを使用していくつかのテキスト文字列を書き込みます。このプログラムは、ウィンドウズアプリケーションとして実行されているときに意図した位置にテキスト文字列を表示しますが、フルスクリーンで実行するとテキスト文字列は意図した位置の上の位置に表示されます。

アプリはwglUseFontBitmapを使用してフォントを作成し、glCallListsでテキスト文字列を表示します(glRasterPos2iを使用してテキストの位置を設定します)。テキストが表示される前に、テキストの位置をY coordにオフセットを加えて調整します。 GetDCOrgEx Win32 API呼び出しを使用してそのオフセットを取得します。

答えて

0

フルスクリーンモードに入った後にもう一度GetDCOrgExを呼び出す必要があると思いますか?既にこれを行っていますか? GetDCOrgExを呼び出してYオフセットを計算するコードを投稿することができれば役に立ちます。

EDIT:もう1つのアイデア:同じYオフセットを使用することはできますか?あるいは、Yの位置を計算してからheight-yposを使うのでしょうか? fullScreen中ときglRasterPos2iが異なる使用するいくつかのsource code hereがあります:

if(!state->fullScreen) 
    // if fullScreen (don't forget the image/GL y-coord vertical flip) 
    glRasterPos2i((w - state->img->cols())/2, (h - state->img->rows())/2); 
    else 
    // for non-fullscreen images 
    glRasterPos2i(0,h); 
0

はここオフセットYを計算するためのコードです:プログラムは、フルスクリーンモードを設定した後

POINT vOffset; 

m_hdc = GetDC(m_hWnd); 
if (m_hdc) 
{ 
    GetDCOrgEx(m_hdc, &vOffset); 
    m_iYOffset = vOffset.y; 
} 

上記のコードが呼び出されます。私はテキスト文字列を書く必要があるたびにGetDCOrgExに電話をかけようとしましたが、テキストはGetDCOrgExが一度だけ呼び出されたときと同じ位置に書き込まれます。

0

シュナイダー、お返事ありがとうございます。

私は、Y座標に追加する必要があるオフセットを計算する方法を変更する問題を解決しました。ここで、次のコードで計算されたオフセット:

m_iYOffset = GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYBORDER); 

上記のコードは、自分のアプリケーションのための問題を解決します。

+0

この未回答の質問を取り除くために、独自の回答を受け入れてください。 Btw、私はあなたがあなたの英語のために自分自身を容認するべきではないと思う。これはとてもいいです :) – ralphtheninja