• ベストアンサー
  • すぐに回答を!

矢印を描画するには

  • 質問No.57865
  • 閲覧数1722
  • ありがとう数7
  • 回答数4

お礼率 35% (10/28)

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

質問者が選んだベストアンサー

  • 回答No.4
  • ベストアンサー

ベストアンサー率 28% (34/119)

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

//終点に ">" を付ける
//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);
}
}
お礼コメント
puntoabart

お礼率 35% (10/28)

わざわざコードを書いていただき、ありがとうございます!!
さっそく試してみます。
投稿日時:2001/04/03 14:55

その他の回答 (全3件)

  • 回答No.3

ベストアンサー率 28% (34/119)

MoveTo と LineTo で書く線は Word のような矢印が
付きませんから、やっぱり自力で矢印を書くしかないかなー。
「端点キャップ」に関しては下記の URL を見ると分かりやすいと思います。
お礼コメント
puntoabart

お礼率 35% (10/28)

ありがとうございます。
端点キャップについても分かりやすい説明がありました。
結局、端点キャップでは問題は解決しないんですね、残念。
投稿日時:2001/04/03 14:51
  • 回答No.2

ベストアンサー率 28% (34/119)

Windows & Visual C++ が前提ですと(書いてありませんが^^:)、
CDC に MoveTo と LineTo で描画出来ますよ。

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

お礼率 35% (10/28)

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

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

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

あ、ちなみに直線を描画するのはウィンドウ内です。
投稿日時:2001/04/03 10:55
  • 回答No.1

ベストアンサー率 37% (67/180)

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

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ