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

初歩的な質問だったらすみません。どなたか教えてください。

A 回答 (1件)

状況はだいだいしかわかんないけど、


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

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

お礼日時:2001/06/14 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語において、関数とその役割、また、引数とその役割、仮引数、実引数とは?

C言語初心者です。
そもそもPC使うのも苦手ですがよろしくお願いします。
C言語において、関数とその役割、また、引数とその役割、仮引数、実引数の役割を、実例を用いて簡潔に説明していただけると助かります。お願いします。

Aベストアンサー

そんなに一気に理解しようとしても難しいですね。
http://www.kyoto-su.ac.jp/~yamada/ap/parameter_argument.html
を眺めてみてください(仮引数と実引数の意味が書いてある。ただしC言語であんまり仮引数がとか実引数が、という言い方はしないような)。
C言語においては全ての処理のかたまりが「関数」です。関数は何かの処理を行って値を返すことも返さないこともあります。
ここの例でいうとf(int x)は値を返す関数、main()は返さない関数で、ここからプログラムの処理が始まります(そういうルールになっている)。
このページのプログラムはちょっと古い書き方なんで今だと警告が出る可能性があります。

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qc言語 関数 変数 引数 とは何なのか

関数、変数、引数のそれぞれの機能と三つの関係性をわかりやすく教えてください

Aベストアンサー

数学の用語と同じです。
数学で言うと、
2x + y + 3 = 0
のような式で、x や y という文字が変数です。
y = f(x)
この f が関数で、x が引数(変数でもある)、y が関数の値(変数でもある)。

Cだと、
ch = getchar();
ch が変数、getchar が関数、この場合は引数は無し。

n = printf("%d",x);
printf が関数、"%d" が引数、x も引数、x はまた変数でもある。n も変数です。

QC言語で f1(x,y)-f2(x,y) の式は

C言語で f1(x,y)-f2(x,y) の式ってどうなるか教えて下さい。お願いします。

Aベストアンサー

こーなるんじゃないかな?
机上だけでコンパイルしているわけではないので
ミスがあるかも。m(_"_)m
#XとYが動的に変化するグラフを求めたい訳ではないですよね?

#include <stdio.h>

int f1(int x,int y)
{
int z;
//目的の計算式

z=0

return z;
}
int f2(int x,int y)
{
int z;
//目的の計算式

z=0

return z;
}
main ()
{
int X,Y,Z;

X=0; // 好きな数字
Y=0; // 好きな数字


Z=f1(X,Y)-f2(X,Y);

printf("f1(X,Y)-f2(X,Y)=%d\n",Z)
}

Q引数をつけたマクロ定義とは

引数つきマクロ宣言って、どういった場面で使うのでしょうか?

例えば

#define abc(a) a*a と定義している場合
x=abc(a) のabc(a)がa*aに変わる。

でも、こんなことしたら
abc(a)関数を呼び出せなくなるのでは?

要するに、「引数つきのマクロ定義が
ある理由などを、説明していただければと思います。

Aベストアンサー

マクロというのはコンパイルの時点で、「あらかじめ定義しておいた文字列に置換される」ということで、関数とは全く意味が違ってきます。

ご質問の、引数つきマクロについてですが、例えばこんなことをしたかったとします。

sprintf(abc->pqr, "%04d", 4);
strcpy(abc->xyz, "abc");
sprintf(def->pqr, "%04d", 5);
strcpy(def->xyz, "def");
sprintf(ghi->pqr, "%04d", 6);
strcpy(ghi->xyz, "ghi");


引数つきマクロでこんな風に書けます。

#define SCPY(XXX, YYY, ZZZ) \
sprintf(XXX->pqr, "%04d", YYY); \
strcpy(XXX->xyz, ZZZ)

SCPY(abc, 4, "abc");
SCPY(def, 5, "def");
SCPY(ghi, 6, "ghi");

3つの操作の異なる部分だけを記述するため、見やすくなったでしょう。見やすいソースというのはバグを少なくするコツでもありますので、上手に使って下さい。
マクロは置換されるだけなので、構造体名だろうが文字列だろうがOKです。

マクロというのはコンパイルの時点で、「あらかじめ定義しておいた文字列に置換される」ということで、関数とは全く意味が違ってきます。

ご質問の、引数つきマクロについてですが、例えばこんなことをしたかったとします。

sprintf(abc->pqr, "%04d", 4);
strcpy(abc->xyz, "abc");
sprintf(def->pqr, "%04d", 5);
strcpy(def->xyz, "def");
sprintf(ghi->pqr, "%04d", 6);
strcpy(ghi->xyz, "ghi");


引数つきマクロでこんな風に書けます。

#define SCPY(XXX, YYY, ZZZ) \
sprintf(...続きを読む

Qxのy乗を求める問題で…(ただし、xもyも正の整数値)

xもyも正の整数値を示し、xのy乗の値を算出する問題なのですが、やり方がよくわかりません(;_;)
解法はpowを使うやり方と、for文の多重ループを使ってやるやり方があり、どちらのやり方も試しなさい、、、ということです(;_;)

特によくわからないのがfor文を使ったやり方で、ヒントは
「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」
ということですが、いまいち理解できませんでした。

完成した表は
    1 2 3 4 5
1 1 1 1 1 1
2 2 4 6 8 16
3 3 9 27 81 243
4 4 16 64 256 1024
5 5 25 125 625 3125
といった感じになるそうです。

どなたか教えてください<m(__)m>

xもyも正の整数値を示し、xのy乗の値を算出する問題なのですが、やり方がよくわかりません(;_;)
解法はpowを使うやり方と、for文の多重ループを使ってやるやり方があり、どちらのやり方も試しなさい、、、ということです(;_;)

特によくわからないのがfor文を使ったやり方で、ヒントは
「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」
ということですが、いまいち理解できませんでした。

完成した表は
    1 2 3 4 5
1 1 1 1 ...続きを読む

Aベストアンサー

>#2
0は「正の整数」には含まないのでy = 0は考慮に入れなくていいんじゃないですか?
確かにヒントをベタに実行するとy > 2のときに危険ですが。

int i, ans; // ループカウンタと解
ans = x;
for(i = 0; i < y - 1; i ++) ans *= x;

となりますか。

QExcelの関数で引数を数える方法とは?

大学の情報の授業で、次のような課題が出題されました。

「Excelの関数で引数を数える方法について述べなさい」

意味がよくわからないので、誰かわかりやすく教えてください。

Aベストアンサー

Excelの関数で引数とは関数目に続いて()の中に入力されるもので、それぞれはカンマ(,)で区切られています。
例えばCOUNTIF関数はCOUNTIF(範囲,条件)のように使われますね。

A1セルからA10セルの間に10以上の数がいくつあるかを求めるのでしたらCOUNTIF(A1:A10,">=10")のような関数になり、引数の数は2、すなわちカンマの数に1をプラスした数になります。

引数を数える方法としては例えばこの関数をB1セルに文字列の形で入力するとして、次の式を使うことで求めることができるでしょう。

=LEN(ASC(B1)-LEN(SUBSTITUTE(ASC(B1),",",""))+1

Qx,y座標から緯度経度へ変換

x=0.805018,2.415053,4.025088…
y=74.995682,224.987045,374.978394…

などと中心からのx方向、y方向の距離[m]があります。
中心の緯度経度は、
緯度=34.9083333333333
経度=136.5975
です。

c言語でそれぞれのx,yの地点の緯度経度を知る変換プログラムを作りたいのですが、どうすればよいでしょうか。
よろしくお願いいたします。

Aベストアンサー

いろいろと条件が足りません。
・地球上の北緯約34.9度、東経約136.6度、と考えていいのでしょうか?
・x,yはどの方向に対しての距離なのでしょうか?Yの正が北?南?それとも全然違う方角?Xの正は?
・どの程度の誤差まで許容できるの?

誤差が十分に許容できるなら、その緯度/経度付近は球面に接する平面に近似できます。
北緯約34.9度、東経約136.6度、Yの正が北、Xの正が東
とすると、アークタンジェント(x/地球の半径)で東経の、アークタンジェント(y/地球の半径)で北緯の差分の角度が求まります。
計算してませんが、数km程度ならこれで十分なはずです。

それ以上の距離があったり、より高い精度が欲しい、となると、緯度による東西の長さ、曲面上での距離、地球の偏平率などいろんなものを考慮する必要があるでしょう。


Q引数が無効とは

ドムで引数が無効ですというエラーなのですがどんなことが考えられますか。

Aベストアンサー

実際のコード見ないと一概に言えない。

Q構造体メンバ 構造体ポインタ 値代入

typedef struct _test_t{
int aaa;
int bbb;
} test_t;

typedef struct _globalData{
int xxx;
test_t* pTestData[256];
} globalData_t;

globalData_t globalData;


int main(){

test_t testData1 = {1,1};
test_t testData2 = {2,2};

*globalData.pTestData[1] = testData1; /* (1) */

globalData.pTestData[2] = &testData1; /* (2) */

}

上記のようなグローバルデータの構造体globalData
のメンバの構造体配列にtest_t型の構造体を格納し保持するには、
(1)、(2)のどちらが正しいでしょうか?

Aベストアンサー

> 代入、*globalData.pTestData[xxx] = testData1;
> 削除 *globalData.pTestData[xxx] = NULL;

削除時点でヌルポインタになってしまうので、ご所望の書き方では削除後に代入はできません。
ちなみに削除はアスタリスクを取って
globalData.pTestData[xxx] = NULL;
が正しいと思います。

なぜNULLを代入したいのでしょうか?
「もしNULLなら構造体の値を代入」などの処理をしたいのであれば、まずはNULLのポインタに
領域を確保するか、すでに確保されているアドレスを代入することになります。
ご所望の代入方法をするためには、まず「領域の確保」が必要です。

これを踏まえて、代入と削除を書くと以下のようになるかと思います。

#include <stdio.h>
#include <string.h>

typedef struct _test_t {
int aaa;
int bbb;
} test_t;

typedef struct _globalData {
int xxx;
test_t *pTestData[256];
} globalData_t;

globalData_t globalData;

int main()
{
test_t testData1 = { 1, 1 };
test_t testData2 = { 2, 2 };

test_t testDataBuf[256];
int i;
for(i=0; i<256; i++)
globalData.pTestData[i] = &testDataBuf[i];

// 代入
*globalData.pTestData[1] = testData1;/* (1) */

// delete
globalData.pTestData[1] = NULL;

// 再代入
globalData.pTestData[1] = &testDataBuf[1]; // NULL状態を解消
*globalData.pTestData[1] = testData1;
}


しかし、これは無駄な処理に見えます。
このコードを読んだ人は「なぜDeleteがNULL代入なのだろうか?」と疑問に思うかもしれません。


私ならば・・・

案1
aaaが-1なら未使用というルールにして
#define delete_test_t(x) (x.aaa = -1)
#define is_enable(x) (x.aaa != -1)
とかで管理しといて、あとでソース読むのが楽になるようにケアすると思います。

案2
DeleteでNull代入する代わりにtest_t構造体に使用中フラグを追加


alloc禁止の前提ではこんなところですかね。

> 代入、*globalData.pTestData[xxx] = testData1;
> 削除 *globalData.pTestData[xxx] = NULL;

削除時点でヌルポインタになってしまうので、ご所望の書き方では削除後に代入はできません。
ちなみに削除はアスタリスクを取って
globalData.pTestData[xxx] = NULL;
が正しいと思います。

なぜNULLを代入したいのでしょうか?
「もしNULLなら構造体の値を代入」などの処理をしたいのであれば、まずはNULLのポインタに
領域を確保するか、すでに確保されているアドレスを代入することになります。
ご所望の代入方...続きを読む


人気Q&Aランキング

おすすめ情報