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

任意の座標間に矢印つきの直線を描画したいのですが、可能でしょうか?
イメージとしては、WordやExcel、PowerPointの矢印描画あたりです。

A 回答 (4件)

こんなコードをでっちあげてみました。


いかがですか。

//終点に ">" を付ける
//nStartXPos, nStartYPos… 始点
//nEndXPos, nEndYPos… 終点
#include <math.h>
void C???View::Arrow(CDC * pDC, int nStartXPos, int nStartYPos, int nEndXPos, int nEndYPos)
{
inti;
intnX, nY;
doubledbAng;

#define LENGTH10//矢印の先の長さ
#define ANGLE(3.1415/180.0*30.0)//矢印の開く角度 … 現在30度
dbAng = 3.1415 + atan2(nEndYPos-nStartYPos, nEndXPos-nStartXPos);

for (i=-1; (i<=1); i+=2)
{
nX = (int)(cos(dbAng+ANGLE*i) * LENGTH) + nEndXPos;
nY = (int)(sin(dbAng+ANGLE*i) * LENGTH) + nEndYPos;
pDC->MoveTo(nEndXPos, nEndYPos);
pDC->LineTo(nX, nY);
}
}
    • good
    • 1
この回答へのお礼

わざわざコードを書いていただき、ありがとうございます!!
さっそく試してみます。

お礼日時:2001/04/03 14:55

MoveTo と LineTo で書く線は Word のような矢印が


付きませんから、やっぱり自力で矢印を書くしかないかなー。
「端点キャップ」に関しては下記の URL を見ると分かりやすいと思います。

参考URL:http://www.topposystem.co.jp/DL/Win32API/GUI/%E3 …
    • good
    • 0
この回答へのお礼

ありがとうございます。
端点キャップについても分かりやすい説明がありました。
結局、端点キャップでは問題は解決しないんですね、残念。

お礼日時:2001/04/03 14:51

Windows & Visual C++ が前提ですと(書いてありませんが^^:)、


CDC に MoveTo と LineTo で描画出来ますよ。

もう少し puntoabart さんからの情報があると良いですね。
例えば、プラットホームと開発環境(IDE)の種類、それから
どこに描画するかの情報です。

この回答への補足

Windows 98とVisual C++6.0で作ってます。
(プログラム関連の質問で環境も書いてないのは問題ですね…。すいません)

MoveToとLineToで直線は引けるのは分かるのですが、
その直線の両端の形状を変更することはできるのでしょうか?
私がしたいのはそれなのです。

リファレンスを見ていると、CPenの引数に"PS_ENDCAP_~"というものがありました。
解説には「端点キャップ」と書いてありました。
これは私のしたいことに関係があるのでしょうか?

あ、ちなみに直線を描画するのはウィンドウ内です。

補足日時:2001/04/03 10:55
    • good
    • 0

すいません。

質問の意味がよくわかりません。
Word2000に図形描写があります。この中に矢印を描写出来る物があります。
これで矢印がかけます。
この矢印はある程度のグリットの点に乗ります。このグリット間(点と点の間)をもっと細かく任意に書きたいのでしょうか。
またはマクロで任意に矢印を書きたいという事でしょうか。
また「イメージとしては、WordやExcel、PowerPointの矢印描画あたりです。」のところがよく理解できません。どうもすいません。
    • good
    • 0

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