Viet TP's notepage

Welcome!! Viet is a Microsoft Student Partner in Vietnam

Lab: Viết ứng dụng MultiPoint Mouse đầu tiên

Tiếp xúc với công nghệ đa chuột MultiPoint Mouse, nhiều người không biết phải bắt đầu develop như thế nào vì nguồn tài liệu gần như không có. Đây là bài viết hướng dẫn các bước cơ bản để làm ứng dụng MultiPoint Mouse, kèm theo đó là những giải thích ở các bước.

Nội dung chính Các công nghệ sử dụng
Ứng dụng WPF nhỏ khai thác các tính năng cơ bản của MultiPoint Mouse SDK. WPF
C#

Source Code: FirstMPMApp.zip

MultiPoint Mouse hoá ứng dụng WPF

Việc đầu tiên cần “kích hoạt” chức năng MultiPoint Mouse cho một ứng dụng WPF. Vào menu File –> New –> New Project để tạo một project WPF mới. Đặt tên Project là FirstMPMApp, click OK để tạo project.

01 new project

MPM cung cấp 2 file thư viện cho việc lập trình trong thư mục cài đặt. Đầu tiên ta add file thư viện Microsoft.Multipoint.Sdk.dll. Vào menu Project –> Add Reference… Chọn tab Browse và trỏ tới đường dẫn cài đặt MultiPoint Mouse (mặc định là C:\Program Files\Windows MultiPoint Mouse SDK\Bin), chọn file thư viện cần như trong hình. Click OK.

02 add 1

Trong MainWindows.xaml.cs, cho vào đoạn code như sau:

Miếng Code
  1. public MainWindow()
  2. {
  3. InitializeComponent();
  4. this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
  5. }
  6. void MainWindow_Loaded(object sender, RoutedEventArgs e)
  7. {
  8. // Register this window with MultiPoint Mouse
  9. MultipointSdk.Instance.Register(this);
  10. }

Cần thêm namespace cần thiết ở đầu file, thêm dòng “using Microsoft.Multipoint.Sdk; “

Dòng code thứ 4 để thêm một event handler cho sự kiện Loaded của cửa sổ hiện hành. Khi cửa sổ được load lên ta thực hiện đăng kí nó với MultiPoint Mouse để chức năng MPM có thể chạy. Dòng code thứ 10 trong event handler thực hiện điều đó. F5 chạy chương trình được kết quả sau:

03 frst run

Khi cửa sổ đã được đăng kí với MPM, MPM tự động nhận biết các thiết bị chuột kết nối với máy và tạo các con trỏ tương ứng trên cửa sổ ứng dụng. Máy mình đang kết nốt 1 chuột USB và 1 trackpad sẵn của laptop nên có 2 con chuột trên màn hình.

Nhấn Alt + F4 để thoát ứng dụng.

Để tiện lợi trong sử dụng, ta nên thêm chức năng nhấn Esc để đóng cửa sổ, bằng cách thêm event handler cho sự kiện this.KeyDown.

Miếng Code
  1. public MainWindow()
  2. {
  3. InitializeComponent();
  4. this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
  5. this.KeyDown += new KeyEventHandler(MainWindow_KeyDown);
  6. }
  7. void MainWindow_KeyDown(object sender, KeyEventArgs e)
  8. {
  9. switch (e.Key)
  10. {
  11. case Key.Escape:
  12. this.Close();
  13. break;
  14. }
  15. }

Xử lý thao tác với con trỏ chuột

MPM hỗ trợ nhiều chức năng với việc xử lý con trỏ chuột. Một vài chức năng quan trọng:

  • Thay đổi hình ảnh con trỏ chuột, chuyển chúng thành các hình ảnh bitmap tuỳ ý.
  • Thay đổi tốc độ của các chuột.
  • Điều chỉnh cho chuột được/ko đc phép di chuyển (đứng yên tại chỗ).
  • Điều chỉnh ẩn/hiện các chuột.
  • Điều chỉnh vị trí của các chuột trên màn hình (gán vào một toạ độ bất kì).
  • Xử lý các sự kiện click chuột.
  • Lấy các thông tin về thiết bị chuột (ID phân biệt, name,…)

Từng đó thao tác đã đủ để ta quản lý hầu hết các tác vụ liên quan tới chuột. Các chức năng này sẽ lần lượt được trình bày trong bài lab này và các bài lab tiếp theo.

Bây giờ ta thử thực hiện cho các chuột nằm ở vị trí (0,0) và bắt nó đứng yên cho tới khi ta nhấn Space thì mới cho phép chạy.

Bổ sung 2 event handler đã tạo ở phần trước như sau:

Miếng Code
  1. void MainWindow_KeyDown(object sender, KeyEventArgs e)
  2. {
  3. switch (e.Key)
  4. {
  5. case Key.Escape:
  6. this.Close();
  7. break;
  8. case Key.Space: // Enable movement of all mouses
  9. foreach (DeviceInfo item in MultipointSdk.Instance.MouseDeviceList)
  10. {
  11. item.DeviceVisual.DisableMovement = false;
  12. }
  13. break;
  14. }
  15. }
  16. void MainWindow_Loaded(object sender, RoutedEventArgs e)
  17. {
  18. // Register this window with MultiPoint Mouse
  19. MultipointSdk.Instance.Register(this);
  20. // Disable movement of all mouses
  21. foreach (DeviceInfo item in MultipointSdk.Instance.MouseDeviceList)
  22. {
  23. item.DeviceVisual.SetPosition(new Point(0, 0));
  24. item.DeviceVisual.DisableMovement = true;
  25. }
  26. }

Vòng lặp trong handler Loaded duyệt qua collection MultipointSdk.Instance.MouseDeviceList chứa thông tin của tất cả các chuột hiện hành (dưới dạng biến Microsoft.Multipoint.Sdk.DeviceInfo), và thực hiện thay đổi các thông tin trong field DeviceVisual – quản lý thông tin hiển thị của trỏ chuột.

Vòng lặp trong case nhấn Space trong handler KeyDown chỉ thực hiện việc cho phép các trỏ chuột có thể di chuyển trở lại.

//YOU-DO: F5 chạy chương trình để thử.

Multipoint Controls

Tiếp theo, ta làm một chức năng đơn giản cho chuột click vào một button và tên của thiết bị sẽ hiện ra.

Thực hiện lại việc Add Reference đối với file thư viện Microsoft.Multipoint.Sdk.Controls.dll như đã làm ở trên.

Bổ sung code giao diện trong file MainWindow.xaml như sau:

Miếng Code
  1. <Window x:Class=“FirstMPMApp.MainWindow”
  2. xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;
  3. xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml&#8221;
  4. xmlns:mpm=“clr-namespace:Microsoft.Multipoint.Sdk.Controls;assembly=Microsoft.Multipoint.Sdk.Controls”
  5. Title=“MainWindow” Height=“350” Width=“525”>
  6. <Grid>
  7. <mpm:MultipointButton Content=“Click Me” Margin=“10” Height=“25” Width=“100”
  8. HorizontalAlignment=“Right” VerticalAlignment=“Top”
  9. x:Name=“mbtnClickMe” Focusable=“False”
  10. MultipointClick=“mbtnClickMe_MultipointClick”/>
  11. <TextBlock x:Name=“txtMouseName” Margin=“5,45,5,5” TextWrapping=“Wrap”
  12. FontSize=“25”/>
  13. </Grid>
  14. </Window>

Dòng 4 là để thêm namespace Microsoft.Multipoint.Sdk.Controls vào file. Hiện trại thư viện control này có 2 control cơ bản của MPM là MultipointButton, MultipointTextbox tương ứng với chức năng của Button và Textbox trong ứng dụng thường. Chỉ có các control xây dựng đã áp dụng MPM mới có thể nhận được các sự kiện nhấn phím của chuột. Các control có sẵn của WPF ko hỗ trợ MPM.

Dòng 7, control MultipointButton nhận sự kiện riêng sinh bởi trỏ chuột trong MPM là MultipointClick, tương ứng với sự kiện Button.Click trong WPF.

Trong code behind MainWindow.xaml.cs ta bổ sung event handler MultipointClick:

Miếng Code
  1. private void mbtnClickMe_MultipointClick(object sender, RoutedEventArgs e)
  2. {
  3. MultipointMouseEventArgs args = e as MultipointMouseEventArgs;
  4. if (args == null) return;
  5. txtMouseName.Text = args.DeviceInfo.DeviceName;
  6. }

Chuyển kiểu RoutedEventArgs về Microsoft.Multipoint.Sdk.MultipointMouseEventArgs, thông qua đó ta lấy được thông tin về chuột đã thực hiện event tương ứng. Sau đó thực hiện truy cập thông tin của chuột qua field DeviceInfo.

//YOU-DO: F5 chạy chương trình, nhấn Space để cho các chuột di chuyển, thử click các chuột lên button để thấy DeviceName của chúng.

04 click me

Xử lý việc plug-in/plug-out các thiết bị chuột

Trong quá trình sử dụng ứng dụng, các thiết bị chuột có thể bị tháo ra hoặc lắp vào thêm. Khi đó có thể ta cần xác định chuột nào đã bị tháo ra/lắp vào và thực hiện các công việc tương ứng.

Để phân biệt các thiết bị có thể sử dụng DeviceInfo.DeviceId hoặc DeviceInfo.Id hoặc DeviceInfo.DeviceName. MPM đã hỗ trợ sẵn việc huỷ con trỏ của chuột khi thiết bị được tháo ra và tự tạo một con trỏ mới có cursor mặc định như thấy trong hình.

Có thể ta sẽ cần thực hiện gán cursor mới mỗi khi có thiết bị mới gắn vào để có thể phân biệt các con trỏ, hoặc huỷ các thông tin người dùng của con trỏ đó trong ứng dụng (vd: điểm số, tên,…).

Bây giờ ta thực hiện thông báo trong TextBlock mỗi khi thiết bị được tháo ra hoặc cắm vào, và thiết bị mới được gắn sẽ đặt con trỏ tại vị trí (0, 0) cho tới khi nhấn Space mới di chuyển được.

Bổ sung code trong code behind MainWindow.xaml.cs như sau:

Miếng Code
  1. void MainWindow_Loaded(object sender, RoutedEventArgs e)
  2. {
  3. // Register this window with MultiPoint Mouse
  4. MultipointSdk.Instance.Register(this);
  5. // Disable movement of all mouses
  6. foreach (DeviceInfo item in MultipointSdk.Instance.MouseDeviceList)
  7. {
  8. item.DeviceVisual.SetPosition(new Point(0, 0));
  9. item.DeviceVisual.DisableMovement = true;
  10. }
  11. // Handle mouses plug-in and plug-out
  12. MultipointSdk.Instance.DeviceArrivalEvent += new EventHandler<DeviceNotifyEventArgs>(Instance_DeviceArrivalEvent);
  13. MultipointSdk.Instance.DeviceRemoveCompleteEvent += new EventHandler<DeviceNotifyEventArgs>(Instance_DeviceRemoveCompleteEvent);
  14. }
  15. void Instance_DeviceRemoveCompleteEvent(object sender, DeviceNotifyEventArgs e)
  16. {
  17. txtMouseName.Text = “Just plug-out a device!! \n Name: “ + e.DeviceInfo.DeviceName;
  18. }
  19. void Instance_DeviceArrivalEvent(object sender, DeviceNotifyEventArgs e)
  20. {
  21. txtMouseName.Text = “New pointing-device!! \n Name: “ + e.DeviceInfo.DeviceName;
  22. // Init first status of a new pointer
  23. e.DeviceInfo.DeviceVisual.SetPosition(new Point(0, 0));
  24. e.DeviceInfo.DeviceVisual.DisableMovement = true;
  25. }

Dòng 14 thêm event handler khi một thiêt bị được gắn vào. Dòng 15 thêm event handler khi một thiết bị bị tháo ra.

//YOU-DO: chạy thử chương trình, trong quá trình dùng thử tháo ra và gắn vào các chuột đồng thời quan sát quá trình xử lý. Chú ý chuột mới gắn vào thì phải nhấn Space chuột mới được phép di chuyển.

Kết luận

Lab đã vừa đi qua hết 3 mảng xử lý cơ bản của một ứng dụng MPM. Các chức năng cơ bản này được hỗ trợ sẵn, từ đó ta tiếp tục xây dựng những chức năng khác. Cơ bản thì MPM thật đơn giản cho bất cứ ai đã biết lập trình với C# và WPF. Trong các bài tiếp mình sẽ trình bày cách xây dựng các chức năng khác cho ứng dụng MPM.

Happy coding!!

Related Posts

Windows MultiPoint Mouse là gì?

10 responses to “Lab: Viết ứng dụng MultiPoint Mouse đầu tiên

  1. Tuấn December 21, 2010 at 5:07 pm

    Việt có tài liệu SharePoint nào hay không share tui với

    • viettp December 22, 2010 at 1:45 pm

      Sẵn thì V cũng ko có. Tuấn có thể tìm trên các trang của MSDN hoặc MSDN Vietnam. Các tài liệu lab hoặc training kit ấy. Còn có thể tìm thêm trên channel9.microsoft.com

  2. Le Thanh Hai December 21, 2010 at 8:53 pm

    Thật tự hào khi Việt đã dành tâm huyết để giúp hàng trăm sinh viên biết đến công nghệ Multipoint đầy giá trị của MS. Thay mặt Microsoft cảm ơn Việt và chúc em tiếp tục có nhiều bài viết hay.

    • viettp December 22, 2010 at 1:47 pm

      Cảm ơn anh Hải. Em góp một phần cho nguồn tài nguyên tiếng Việt phong phú hơn, chắc chắn sẽ giúp được nhiều người :)

  3. February 15, 2011 at 3:40 pm

    anh Việt ơi! các hàm quản lý chuột chỉ cần những cái như ở trên là tạm được rời phài ko anh ? Em đang làm đồ án cơ sở về công nghệ này nên còn bỡ ngỡ ko biết làm sao cả. Anh có biết viết ứng dụng đơn giản cho nó ko? anh chỉ em với.

    • viettp February 15, 2011 at 8:52 pm

      Tú là sv ở trường nào?
      Mình đang viết lab về cái này, và chủ yếu là chưa kịp viết thôi, vẫn còn nhiều thứ trong này lắm ^^. Nếu… bạn gặp được mình trực tiếp thì sẽ nhanh hơn nhiều :D

      • February 17, 2011 at 8:16 pm

        em là sinh viên năm thứ 3 trường đại học kỹ thuật công nghệ thành phố HCM anh à ! tình hình là em sắp phải nộp đồ án nghiên cứu về multipoint phần nghiên cứu thì anh chỉ giúp em vài hàm quản lý chuột nữa dc ko anh ? còn phần game demo thì nếu anh có cái game nào đơn giản thì anh chia sẻ cho em với nha anh! 25/2 này em phải báo cáo đồ án rồi!

  4. Tuan April 25, 2012 at 8:45 pm

    bạn ơi cho mình hỏi làm sao để trở về dùng chuột mặc định thế?

  5. Hoàng Văn Đại September 17, 2013 at 8:53 pm

    Bạn ơi !
    Bạn còn tài liệu WPF về Multipoint không ?
    Có thể cho mình xin được không bạn

  6. Pingback: Tiếp xúc với công nghệ đa chuột MultiPoint Mouse | Framgia's Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: