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

広告

posted by fanblog

2018年05月17日

《その389》マウスボタンの状態取得


 マウスボタンの状態取得

 今回のアプリは、マウスボタンの状態を取得します。
   ・押されている状態
   ・クリック
   ・ダブルクリック
の区別ができれば、ユーザの意思を受け取るのに役立ちます。
画面上の特定の画像をダブルクリックすることでプログラムの流れを変えるなど、アプリの操作性の向上に役立つと思います。

 今回のアプリでは、TextBox以外の任意の場所を、 クリック,ダブルクリック あるいは マウスボタンを押したまま にすると、その状態が TextBox に表示されます。

ボタンを押したままの時間が長くても、ボタンを解放した時点で クリック が成立します。
Windows では、ボタンの押下・解放・押下を連続して行った時点でダブルクリックが成立するので、その仕様に合わせました。押下したままで、解放しなくても ダブルクリックが成立します。
押下・解放・押下・解放・押下・解放・・・の連続は、ダブルクリックになります。これも Windows の仕様と同じです。


 アプリの開始画面です。
add_d111_2.png

 Page上で、マウスボタンを押したままにしている状態のときの画面です。
add_d112.png

 Page上を クリックしたときの画面です。
add_d113.png

 Page上を ダブルクリックしたときの画面です。
add_d114.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();
}


// 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
※ブログオーナーが承認したトラックバックのみ表示されます。

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

 たまに、クリック お願いします 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日以上新しい記事の更新がないブログに表示されております。