最新閲覧日:

初歩的ですみません。
マウスで始点と終点を決めて直線を書くプログラムを知っている方がおりましたら教えてください。

よろしくお願いします。

A 回答 (2件)

WinTKというのは良く分からないんで、MFCの方を……


とりあえずダイアログアプリケーションで説明すると、

1.
 ダイアログベースのスケルトンを作ります
2.
 xxxDlg.h に座標を保持るためメンバを追加します。
class CxxxDlg : public CDialog
 {
   CPoint m_ptBegin, m_ptEnd;

3.
クラスウィザードで WM_LBUTTONUP, WM_RBUTTONUP を選択します。

4.
 void CxxxDlg::OnLButtonUp(UINT nFlags, CPoint point)
 {
   // ここの point に左ボタンが離された座標が入ってますので保持しておきます(始点)
   m_ptBegin = point;
   CDialog::OnLButtonUp(nFlags, point);
 }
5.
 void CxxxDlg::OnRButtonUp(UINT nFlags, CPoint point)
 {
   // ここの point に右ボタンが離された座標が入ってますので保持しておきます(終点)
   m_ptEnd = point;

   // 再描画します。
   InvalidateRect( NULL );

   CDialog::OnRButtonUp(nFlags, point);
 }

6.
 CxxxDlg::OnPaint()関数の以下の部分を変更します。

 else
 {
   CDialog::OnPaint();
 }
      ↓
 else
 {
   CPaintDC dc( this );

   dc.MoveTo( m_ptBegin );
   dc.LineTo( m_ptEnd );

   CDialog::OnPaint();
 }

と、大体こんな感じです。m_ptBegin, m_ptEndはコンストラクタで初期化してやっておいて
ください。説明が大雑把なんでわかりにくかったら言ってくださいね。

ほな。
    • good
    • 0
この回答へのお礼

ありがとうございました。
だいたいわかりました。
あとは自分でがんばってみます。

お礼日時:2001/11/22 17:37

えーと、WinのVC++だって勝手に決め付けてざっと説明しますと、処理するメッセージは WM_LBUTTONDOWN で、始点終点を取って、デバイスコンテキストを作って,MoveToEx とか LineTo とかいう関数を使って実現できます。



プラットフォーム、開発環境などが分からないと答えようがないので、そのへんの補足をお願いします。

この回答への補足

プラットフォームは以下のいずれかになります。
1、VisualC++によるWinTK C言語プラットフォーム
2、VisualC++とMFCによるC++言語プラットフォーム

VisualC++は6.0を使用しています。

もう一つ補足ですが、マウスの左クリックで始点座標の指定、右クリックで終点座標の指定になるようにお願いします。

説明が足りなくて申し訳ありませんでした。

補足日時:2001/11/21 21:10
    • good
    • 0

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

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


人気Q&Aランキング

おすすめ情報