- ベストアンサー
矢印を描画するには
任意の座標間に矢印つきの直線を描画したいのですが、可能でしょうか? イメージとしては、WordやExcel、PowerPointの矢印描画あたりです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんなコードをでっちあげてみました。 いかがですか。 // 終点に ">" を付ける // nStartXPos, nStartYPos … 始点 // nEndXPos, nEndYPos … 終点 #include <math.h> void C???View::Arrow(CDC * pDC, int nStartXPos, int nStartYPos, int nEndXPos, int nEndYPos) { int i; int nX, nY; double dbAng; #define LENGTH 10 // 矢印の先の長さ #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); } }
その他の回答 (3)
- haru-p
- ベストアンサー率28% (34/119)
MoveTo と LineTo で書く線は Word のような矢印が 付きませんから、やっぱり自力で矢印を書くしかないかなー。 「端点キャップ」に関しては下記の URL を見ると分かりやすいと思います。
- 参考URL:
- http://www.topposystem.co.jp/DL/Win32API/GUI/%E3%83%9A%E3%83%B3%E3%81%AE%E6%A6%82%E8%A6%81.html
お礼
ありがとうございます。 端点キャップについても分かりやすい説明がありました。 結局、端点キャップでは問題は解決しないんですね、残念。
- haru-p
- ベストアンサー率28% (34/119)
Windows & Visual C++ が前提ですと(書いてありませんが^^:)、 CDC に MoveTo と LineTo で描画出来ますよ。 もう少し puntoabart さんからの情報があると良いですね。 例えば、プラットホームと開発環境(IDE)の種類、それから どこに描画するかの情報です。
補足
Windows 98とVisual C++6.0で作ってます。 (プログラム関連の質問で環境も書いてないのは問題ですね…。すいません) MoveToとLineToで直線は引けるのは分かるのですが、 その直線の両端の形状を変更することはできるのでしょうか? 私がしたいのはそれなのです。 リファレンスを見ていると、CPenの引数に"PS_ENDCAP_~"というものがありました。 解説には「端点キャップ」と書いてありました。 これは私のしたいことに関係があるのでしょうか? あ、ちなみに直線を描画するのはウィンドウ内です。
- yu-mizu123
- ベストアンサー率37% (67/180)
すいません。質問の意味がよくわかりません。 Word2000に図形描写があります。この中に矢印を描写出来る物があります。 これで矢印がかけます。 この矢印はある程度のグリットの点に乗ります。このグリット間(点と点の間)をもっと細かく任意に書きたいのでしょうか。 またはマクロで任意に矢印を書きたいという事でしょうか。 また「イメージとしては、WordやExcel、PowerPointの矢印描画あたりです。」のところがよく理解できません。どうもすいません。
お礼
わざわざコードを書いていただき、ありがとうございます!! さっそく試してみます。