プロが教える店舗&オフィスのセキュリティ対策術

C++の構造体で困っています
印刷領域のカレントポジションを原点に戻すとともに、それ以前のカレントポジションを知ろうと思い以下のようなプログラムを書きました

typedef struct {
      int x;
      int y;
}POINT ;

POINT MyPoint;
MyPoint.x = 9999;
MyPoint.y = 9999;

bool rtn = MoveToEx(hdc, 0, 0, MyPoint);  ・・・・・(1)

MyPoint.xとMyPoint.y には9999ではなく、現在のカレントポジションが入るという単純なものです

ところが(1)のMyPointで以下のような文法エラーが発生します
ERROR "POINT"から"LPPOINT"への適切な変換関数が存在しません

色々調べましたらC++のコンパイラの設定に関連するエラーらしいです
この辺りのことは不勉強で困っております
どのように対処すれば良いかご指導願います

A 回答 (2件)

> 色々調べましたらC++のコンパイラの設定に関連するエラーらしいです


違います。関数の呼び出し方が間違っていることを表すエラーです。

Windows 関連の C/C++ で LP~ で始まる型を見たら ~ 型のポインタを意味するものと考えてまず間違いないです。今回の場合は POINT 型のポインタを要求されているところに POINT 型そのものを渡しているために問題のエラーが発生しています。

したがって、今回の場合は
bool rtn = MoveToEx(hdc, 0, 0, &MyPoint);
としてやれば OK ……とはなりません。このコード片にはそれ以外の問題があるからです。

(1)なぜ POINT 型を自分で定義しているのでしょうか? この関数が要求しているのは windef.h で定義されている POINT 構造体のはずで、この関数を使用するために windows.h をインクルードしていれば使えるはずです。
http://msdn.microsoft.com/ja-jp/library/8kk2sy33 …

(2)この関数の戻り値の型は C++ の bool 型ではなく Windows SDK で定義されている BOOL 型です。実験してみたところ VC++ では問題なく変換できるようですが、型は合わせたほうが安心でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます

良くわかりました  ・・・・・ と思います

テストしてみたらOKでした

お世話になりました

お礼日時:2014/08/13 14:00

BOOL MoveToEx(


HDC hdc, // デバイスコンテキストのハンドル
int X, // 新しい現在の位置の x 座標
int Y, // 新しい現在の位置の y 座標
LPPOINT lpPoint // それまでの現在の位置
);

http://msdn.microsoft.com/ja-jp/library/cc410478 …

という定義ですから、

bool rtn = MoveToEx(hdc, 0, 0, MyPoint);

第4パラメーターはMyPoint(POINT型)ではなく、LPPOINTでなければなりません。
    • good
    • 0
この回答へのお礼

ありがとうございます

LPLPOINTに致しました

うまくいきました

ありがとうございました

お礼日時:2014/08/13 14:02

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A