2008-12-13 18 views
7

Làm cách nào để phát hiện khi ứng dụng Compact Framework của tôi đang được giảm thiểu thông minh (giảm thiểu thông minh là điều gì xảy ra khi người dùng nhấp vào nút "X" ở góc trên cùng bên phải một Pocket PC)?Pocket PC/Windows Mobile: Cách phát hiện thông minh giảm thiểu

Sự kiện hủy kích hoạt không đúng cách vì sự kiện này xảy ra trong các trường hợp khác ngoài việc giảm thiểu, chẳng hạn như khi hộp thư hoặc biểu mẫu khác được hiển thị phía trên biểu mẫu chính. Và WindowState của biểu mẫu không giúp đỡ vì không có WindowState "Thu nhỏ" trên .NET CF.

Tôi nghe nói rằng bằng cách đặt MinimizeBox = false, ứng dụng của tôi sẽ bị đóng thay vì thu nhỏ. Nhưng tôi thực sự không muốn ứng dụng của tôi đóng, tôi chỉ muốn biết khi nào nó đã được giảm thiểu.

Trả lời

5

Tôi nghĩ rằng cách để đi đến đây là xử lý thông báo WM_ACTIVE và sau đó kiểm tra xem thông số fMinimized có không phải là không. Bạn có thể tìm thêm thông tin về cách khai báo thông báo này trong mã của bạn trong here.

Tôi sẽ cố gắng tìm ra cách chính xác mã này trong C# và chứng minh giả thuyết. Tuy nhiên bạn có thể nhanh hơn tôi và tìm ra nó.

Đồng thời kiểm tra các chức năng DefWindowProcWindowProc, được sử dụng để xử lý thư. Chức năng được khai báo trong mã của bạn như thế này:

Đầu tiên có bao gồm:

using System.Runtime.InteropServices; 

sau đó trong lớp tuyên bố như thế này

[DllImport("coredll.dll")] 
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam, 
    IntPtr lParam); 

Còn có một điều bạn có thể làm, đây là một giải pháp "triết học" hơn. INMO thông minh giảm thiểu X gây nhầm lẫn cho người dùng, đó là lý do tại sao tôi không muốn đưa nó vào. Thay vào đó, tôi cung cấp một nút ở góc dưới bên phải của biểu mẫu có nội dung "đóng" hoặc "quay lại", sử dụng phương thức đóng của biểu mẫu. Tôi đã sử dụng nó ở mọi hình thức để giữ một tiêu chuẩn. Điều này ít mơ hồ hơn đối với người dùng windows vì họ có thể giả định rằng X trong windows mobile giống với X trong windows cho PC.

Nếu vì một số lý do bạn cần phải hạn chế tối đa ứng dụng của bạn hoặc gửi cho nền sử dụng đoạn mã sau:

using System.Runtime.InteropServices; 
... 

public partial class Main : Form 
{ 
    public Main() 
    { 


     InitializeComponent(); 
    } 

    [DllImport("coredll.dll")] 
    static extern int ShowWindow(IntPtr hWnd, int nCmdShow); 

    const int SW_MINIMIZED = 6; 

    ... 
    ... 

    public void HideForm() 
    { 
     ShowWindow(this.Handle, SW_MINIMIZED); 
    } 
} 
+0

** Compact Framework ** không cho phép truy cập vào phương thức 'WindowProc' cho' Form 'bình thường, vậy làm thế nào tôi có thể sử dụng lời khuyên này? Hay tôi đang thiếu thứ gì đó ở đây ... –

-1

Chính xác bạn có ý nghĩa gì khi giảm thiểu thông minh? Tôi cho rằng bạn có nghĩa là ứng dụng của bạn sẽ tự động được thu nhỏ một cách tự động mà không hoạt động trong một thời gian? Vâng, tôi không nghĩ rằng có một sự kiện cho điều đó.

Tác giả của số này blog spot sử dụng Tắt sự kiện để bật và tắt quy trình nội bộ. Điều này là chấp nhận được đối với hoạt ảnh và các quy trình tương tự khác và các trường hợp của một hộp thông báo hoặc một biểu mẫu khác xuất hiện không có vấn đề gì. Tuy nhiên, nếu quá trình của bạn không được dừng trừ khi ứng dụng đóng hoặc 'thu nhỏ thông minh', bạn có thể thử bắt đầu hẹn giờ để hủy kích hoạt sự kiện. Nếu biểu mẫu không được kích hoạt trở lại trong một khoảng thời gian cụ thể, thì sẽ an toàn để dừng quá trình nội bộ.

Tất nhiên trong việc thiết kế giải pháp của bạn, bạn cần xem xét đến Quản lý nguồn điện. Có một cái nhìn tại this và tất nhiên cũng OpenNetCF cho thông báo quyền lực.

+0

thông minh giảm thiểu là những gì sẽ xảy ra khi người dùng nhấp chuột vào nút "X" ở góc trên bên phải góc trên Pocket PC.Một vấn đề liên quan là làm thế nào để phát hiện sự khác biệt giữa người dùng bắt đầu một chương trình khác và một hộp thoại xuất hiện thuộc về ứng dụng của tôi (cả hai đều tạo ra một sự kiện hủy kích hoạt). – Qwertie