アフィリエイト広告を利用しています

広告

posted by fanblog

2018年05月18日

《その390》ポインタ位置・マウスの動作 を取得


 ポインタ位置・マウスの動作 を取得

 前回《389》は、マウスボタンの状態だけの取得でしたが、今回は、ポインタ位置の取得も行います。
ポインタが「moving」か「stopped」かも表示するので、例えば、「pressed」と「moving」が同時に表示されていれば ドラッグ中ということになります。


 アプリをスタートしました。
add_d121_2.png

 ポインタが Page 内を動いています。2つの数値は X-Y座標です。
add_d122_2.png

 ポインタが停止しました。
add_d123_2.png

 マウスボタンが押されています。
add_d124_2.png

 ドラッグ中です。
add_d125_2.png

 クリックしました。
add_d126_2.png

 クリックが成立したあと、ポインタが動いています。
add_d127_2.png

 ダブルクリックしました。
add_d128_2.png

 ダブルクリックが成立したあと、ポインタが動いています。
add_d129_2.png

 ポインタが Page外に出ました。
add_d130_2.png

 ポインタが Page内に入って、動いています。
add_d131_2.png


 以下は、MainPage.xaml.cpp です。

//
// MainPage.xaml.cpp
// MainPage クラスの実装。
//


#include "pch.h"
#include "MainPage.xaml.h"

using namespace App9;

using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;


MainPage::MainPage()
{
InitializeComponent();

// タイマーのスタート
StartTimer();
}


// click_interval
// (click_intervalミリ秒以内ならばダブルクリックと判断)

const int click_interval = 500; // millisecond

int double_clicked = 0; // ダブルクリックのとき 1
int last_clicked_time = 0; // 直前のクリック時刻

int pointer_exited = 0; // ポインタが Page外のとき 1

// 位置
float x = 0;
float y = 0;


// マウスボタンが押されたときのイベントハンドラ
void App9::MainPage::
Page_PointerPressed(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
// マウスボタンが押された時刻の取得
SYSTEMTIME syst;
GetSystemTime(&syst);
int current = syst.wSecond * 1000 + syst.wMilliseconds;

// クリックの間隔が tsミリ秒より大きいなら
// ダブルクリックではありません。

if (current - last_clicked_time > click_interval) {
double_clicked = 0;
// mouse-button pressed
box1->Text = "pressed";
}
// クリックの間隔が tsミリ秒以下なら
// ダブルクリックです。

else {
double_clicked = 1;
// mouse-button double-clicked
box1->Text = "double_clicked";
}
last_clicked_time = current;
}


// マウスボタンが解放されたときのイベントハンドラ
void App9::MainPage::
Page_PointerReleased(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
// ダブルクリックでないときは、
// マウスボタンが解放された時点
// で クリック が成立します。

if (!double_clicked) {
// mouse-button clicked
box1->Text = "clicked";
}
}


// ポインタが動いているときのイベントハンドラ
void App9::MainPage::
Page_PointerMoved(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
box2->Text = "moving";

auto pt = e->GetCurrentPoint(this);
x = pt->Position.X;
y = pt->Position.Y;
box3->Text = ((int)x).ToString();
box4->Text = ((int)y).ToString();
}


// タイマーのスタート
void MainPage::StartTimer() {
auto timer = ref new Windows::UI::Xaml::DispatcherTimer();

TimeSpan span;
span.Duration = 10000;
timer->Interval = span;

timer->Start();
auto rcpt
= timer->Tick +=
ref new EventHandler<Object^>(this, &MainPage::OnTick);
}


// タイマー ON のときの作業
void MainPage::OnTick(Object^ sender, Object^ e) {
if (!pointer_exited)
box2->Text = "stopped";
}


// ポインタが Page外に出たときのイベントハンドラ
void App9::MainPage::
Page_PointerExited(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
pointer_exited = 1;
box1->Text = "";
box2->Text = "pointer_exited";
box3->Text = "";
box4->Text = "";
}


// ポインタが Page内に入ったときのイベントハンドラ
void App9::MainPage::
Page_PointerEntered(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
pointer_exited = 0;
}



この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7671513
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。