2018年05月17日
《その389》マウスボタンの状態取得
マウスボタンの状態取得
今回のアプリは、マウスボタンの状態を取得します。
・押されている状態
・クリック
・ダブルクリック
の区別ができれば、ユーザの意思を受け取るのに役立ちます。
画面上の特定の画像をダブルクリックすることでプログラムの流れを変えるなど、アプリの操作性の向上に役立つと思います。
今回のアプリでは、TextBox以外の任意の場所を、 クリック,ダブルクリック あるいは マウスボタンを押したまま にすると、その状態が TextBox に表示されます。
※ ボタンを押したままの時間が長くても、ボタンを解放した時点で クリック が成立します。
※ Windows では、ボタンの押下・解放・押下を連続して行った時点でダブルクリックが成立するので、その仕様に合わせました。押下したままで、解放しなくても ダブルクリックが成立します。
※ 押下・解放・押下・解放・押下・解放・・・の連続は、ダブルクリックになります。これも Windows の仕様と同じです。
アプリの開始画面です。
Page上で、マウスボタンを押したままにしている状態のときの画面です。
Page上を クリックしたときの画面です。
Page上を ダブルクリックしたときの画面です。
以下は、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();
}
// click-interval
// (tsミリ秒以内ならばダブルクリックと判断)
const int ts = 500;
int f = 0; // ダブルクリックのとき f = 1
int time0 = 0; // 直前のクリック時刻
void App9::MainPage::
Page_PointerPressed(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
// クリック時刻の取得
SYSTEMTIME syst;
GetSystemTime(&syst);
int tim = syst.wSecond * 1000 + syst.wMilliseconds;
// クリックの間隔が tsミリ秒より大きいなら
// ダブルクリックではありません。
if (tim - time0 > ts) {
f = 0;
// mouse-button pressed
box->Text = "押された状態";
}
// クリックの間隔が tsミリ秒以下なら
// ダブルクリックです。
else {
f = 1;
// mouse-button double-clicked
box->Text = "ダブルクリック";
}
time0 = tim;
}
void App9::MainPage::
Page_PointerReleased(Platform::Object^ sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
// ダブルクリックでないときは、
// マウスボタンが解放された時点
// で クリック が成立します。
if (!f) {
// mouse-button clicked
box->Text = "クリック";
}
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7669123
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック