Multi point
Trang 1Lab: 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#
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
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
Trang 2Trong MainWindows.xaml.cs, cho vào đoạn code như sau:
Miếng Code
1. public MainWindow()
2. {
3. InitializeComponent();
4. this.Loaded += newRoutedEventHandler(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. }
Trang 3Cầ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:
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 += newRoutedEventHandler(MainWindow_Loaded);
Trang 45. 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,…)
Trang 5Từ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 inMultipointSdk.Instance.MouseDeviceList)
10. {
11. item.DeviceVisual.DisableMovement = false;
12. }
13. break;
14. }
15. }
16. void MainWindow_Loaded(object sender, RoutedEventArgs e)
Trang 617. {
18. // Register this window with MultiPoint Mouse
19. MultipointSdk.Instance.Register(this);
20. // Disable movement of all mouses
21. foreach (DeviceInfo item inMultipointSdk.Instance.MouseDeviceList)
22. {
23. item.DeviceVisual.SetPosition(newPoint(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
Trang 71. <Window x:Class=“FirstMPMApp.MainWindow”
2. xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation̶ 1;
3. xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”
4.
xmlns:mpm=“clr-namespace:Microsoft.Multipoint.Sdk.Controls;assembly=Microsoft.Multipoi nt.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
Trang 8Trong 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
Xử lý việc plug-in/plug-out các thiết bị chuột
Trang 9Trong 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 inMultipointSdk.Instance.MouseDeviceList)
7. {
8. item.DeviceVisual.SetPosition(newPoint(0, 0));
9. item.DeviceVisual.DisableMovement = true;
10. }
11. // Handle mouses plug-in and plug-out
Trang 1012. MultipointSdk.Instance.DeviceArrivalEvent += new
EventHandler<DeviceNotifyEventArgs>(Instance_DeviceArrivalEvent);
13. MultipointSdk.Instance.DeviceRemoveCompleteEvent += new
EventHandler<DeviceNotifyEventArgs>(Instance_DeviceRemoveCompleteE vent);
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(newPoint(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