• 締切済み

DrawTextで文字を表示する場合の引数

バイナリファイルを読み込んで文字列を表示しようとしています。 表示する位置の座標をx,y変数に取っていて、TextOutならば、そのまま 引数として渡せるのですが、DrawTextの引数はRECTポインタなので、 メンバが4つありますし、どのメンバにxとyを当てればよいかわかりません。 何パターンかやってみたのですが、正しいのがわからず困っています。 初歩的な質問だったらすみません。どなたか教えてください。

みんなの回答

回答No.1

状況はだいだいしかわかんないけど、 RECT っていうことは正~ってことで たぶん正方形として文字列の表示領域を 指定するんだとおもうから、 X1、y1、x2、y2 この並びだとおもう。 x1、y1で正方形の左上の点を指定し、 x2、y2で正方形の右下の点を指定 だから、x2、y2が必要。x1、y1に いくらか加えるなどして作らないと いけないとおもう。 まちがえてたらすいません。

akika0215
質問者

お礼

早速のご回答ありがとうございます。 x2,y2を作るんですね、やってみます。 またよろしくお願いします。

関連するQ&A

  • 可変個引数を使った関数で文字の長さを知りたい

    可変個引数を使った引数を使って引数の文字列の長さを知りたいのですがどうすればいいのかわかりません。 DXライブラリを使って文字列の長さを測って文字をどこにおくのかを決めているため文字列の長さがわからないと困ってしまいます。 どのようにすれば可変個引数を使った引数の文字列の長さを測れますか? 大体以下のような感じで作っています。 void kai( int *x , int *y ); //文字列を改行する関数 int JC( unsigned char code ); //文字が1バイト文字 か 2バイト文字か判別する void mozi_show2( int x , int y , int xm , int yb , int color , int char_set , const char *s , ... ){   int i = 0;   int xs = 0 , ys = 0;   int m_color = color;   char One[ 2 ]; //1バイト文字格納用   char Two[ 3 ]; //2バイト文字格納用   const char* p;   va_list args;   va_start( args , s );   p = s;   while( *p != '\0' ){     switch( *p ){       case '%':         p++;         assert( *p != '\0' );         switch( *p ){           case 'd':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%d" , va_arg( args , int ) );             //purintfと使い方はほぼ同じで左から文字を表示したいX座標・文字を表示したいY座標             //文字の色・文字の書式・格納用文字列・表示したいint型の数値をあらわしています             xs += 16;             /*             xs += GetDrawFormatStringWidthToHandle( char_set , "%d" , va_arg( args , int ) );             本来ならこの関数を使って文字列の長さを計る左から             文字列の書式・格納用文字列・長さを測りたいint型文字列             これを使うと別のものを計っているみたいで文字の長さがわからない             文字の長さってどうやって計るの?             */             break;           case 'f':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%f" , va_arg( args , double ) );             break;           case 'c':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%c" , va_arg( args , char ) );             break;           case 's':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%s" , va_arg( args , const char* ) );             break;           case '%':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%%" );             xs += GetDrawStringWidthToHandle( "%" , 1 , char_set );             break;         }         p++;         break;       default:         if( JC( *p ) ){           Two[ 0 ] = *p;           Two[ 1 ] = *( p + 1 );           Two[ 2 ] = '\0';           DrawStringToHandle( x + xs , y + ys * yb , Two , m_color , char_set );           xs += GetDrawStringWidthToHandle( Two , 2 , char_set );           p += 2;         }         else{           One[ 0 ] = *p;           One[ 1 ] = '\0';           DrawStringToHandle( x + xs , y + ys * yb , One , m_color , char_set );           xs += GetDrawStringWidthToHandle( One , 1 , char_set );           p++;         }         break;     }     if( xs > xm ){       kai( &xs , &ys );     }   }   va_end( args ); } void zitu_draw( void ){   char *str = "%d個 OK";   int i = 12;   mozi_show2( 100 , 100 , 300 , 15 , red_s , MG_14_0 , str , i );   //左から 文字を表示するX座標・文字を表示するY座標・文字を改行する文字列の長さ   //改行した時のY座標の縦幅・文字色・文字の書式・表示したい文字列・%dに表示したいint型の値 }

  • ポインタを引数で使用する場合

    初心者です。 ローカル関数でポインタを引数で使用する場合の定義で int A (int *x,int *y) とする場合の*はポインタの宣言としての*なのでしょうか? これまでの例題ではメイン関数のなかでポインタを宣言しアドレスを代入し・・・という使い方だったのですがローカル関数で引数を使用するさいはメイン関数内ではポインタの宣言はないので関数の定義と同時にint *x とint *yを宣言するという事なのでしょうか? それ以降の*は間接参照演算子ですね。

  • C++テンプレートでの引数

     こんにちは。 今回は、C++ テンプレートで引数に構造体を使えないか悩んでいます。 例えば #include <stdio.h> typedef struct _rect{ int x; int y; }RECT; typedef struct _rect{ double x; double y; }DATA; template <calss T> T Function(T abc) { // 構造体の要素にも対応している。 cout << abc//の要素x << endl; cout << abc//の要素y << endl; return T; } int main() { RECT t; DATA r; t.x = 80; t.y = 90; t = Function(t); // こういった事をしたい r = Function(r); return 0; } というふうにしたいんです。 テンプレート関数に引数として構造体にしてそれぞれの要素を参照する場合はどうすれば よろしいのか教えてください。 よろしくお願いします。

  • Mathematicaで極座標表示の式を直交座標表示にしたい

    Mathematicaで極座標表示で出した式を直交座標表示(x,y,z)に書き直したいのですが、r=Sqrt(x^2+y^2+z^2)のように一つの変数を複数の変数に書き直すのがうまくいきません。 どうすればできるのでしょうか?

  • 変数の表示

    プログラミングで、 y=2x+1はx座標1,y座標3を通る直線です。 と表示したいんです。 #include<stdio.h> main() { printf("y=2x+1はx座標1,y座標3を通る直線です。"); } と書いてみたのですが、これでは文章がそのまま表示されるだけです。このとき、1と3を変数で表したいのですがどうしたらいいのでしょうか・・・intとかcharを使うのでしょうか?文字と数字が両方入っているので、混乱してわかりません。お願いします。

  • 関数の引数って。。

    引数ってその関数の中だけに作用するもので、 そもそも変数とは違うものですよね? ////sample/////////// insuu = 100; function kansuu(insuu){ x = insuu; } kansuu(200); document.write(x); ////////////////////// のようにしたら、200と表示されて、エラーも出なかったわけですが、 引数と変数って無関係ってことですか?

  • 引数の渡し方について

    引数の渡しかたが悪いのかどうしてもうまく行きません。 何が悪いのでしょうか? 呼び出し元では文字列のポインタだけを渡して(プログラム中の第3引数) 呼び出し先でその文字列に値を設定しようとしています。 呼び出し元の変数宣言・・・ char pcImagePonit[65535]; 呼び出し元の関数 bRet = ReadPhysicsData(pcImagePonit); 呼び出し先の関数宣言 int ReadPhysicsData(char *sData) char nBufferB[65536]; 呼び出し先で値を設定 memcpy(sData, nBufferB, sizeof(nBufferB)); です。 呼び出し元で65535バイト確保した変数が、呼び出し先の関数に来てsDataになった時点で1バイトになってしまっています。 65535バイト分のデータを呼び出し先の関数内でセットしたいのですがどのようにしたら良いのでしょうか??

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

    コンソールアプリで作ることが前提です。 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); }

  • D3DXCreateFontとID3DXFont::DrawTextによる文字列の縦書き描画

    お世話になっています。 D3DXCreateFontとID3DXFont::DrawTextによって文字列を左上(0,0)右下(20,100)の四角形内に縦書き描画しようと、以下のようにコードを書きました。 CreateFontの第3引数cEscapementを2700にし、 CreateFontの第4引数cOrientationも2700にしてCreateFont、D3DXCreateFontによって作成したフォントで、 SetRect(0,0,20,100); DrawText(Str,-1,&rc,DT_SINGLELINE | DT_WORD_ELLIPSIS | DT_NOCLIP, D3DCOLOR_XRGB(0,0,0)); 上のようにして実行すると、何も表示されません。 SetRectの引数を変えてみたりはしたのですが、それでもやはり上手くいきませんでした。 もちろん、フォントは縦書きフォントを指定しています。 さっぱり原因がわからないので、どなたがご存知の方がいらっしゃれば、ご教授よろしくお願いします。 開発環境:Visual Studio 2005 C++ 開発言語:C/C++(Win32API)+DirectX9.0b

  • 関数の引数

    こんにちわ。 ご存知の方、ご教授してもらえないでしょうか? VB.net2005を使っているのですが 関数の引数に変数をセットして、別関数で 引数に対してデータをセットすることは可能でしょうか? C言語でいうところのポインタを引数に渡し ポインタアドレスに書き込むような処理はVB.netでは 可能なんでしょうか? 下記のような事は試したのですが、うまく出来ませんでした(。。; public sub test1() dim mojiretu as string test2( mojiretu ) msgbox(mojiretu) end sub public sub test2( str as string) str = "文字列" end sub

専門家に質問してみよう