2008-11-18 33 views
5

Tôi đang phát triển một ứng dụng đồ họa dựa trên .NET CF, dự án của tôi liên quan đến rất nhiều hình ảnh, Chúng tôi đã quyết định chuyển sang ứng dụng trên độ phân giải thiết bị cầm tay khác. X 240, 480 X 640), v.v.Xử lý các Nghị quyết khác nhau trong Visual Studio 2008 cho .NET CF

Làm cách nào để tôi đạt được điều này trong giải pháp/dự án đơn lẻ?

Có cần tạo các dự án khác nhau dựa trên độ phân giải không? Làm cách nào để xử lý các tệp phổ biến? và tôi cần những thay đổi trong một trong các lớp phổ biến xảy ra trên tất cả các thiết bị.

Cảm ơn bạn, Cronos

Trả lời

6

Đừng nghe tên ngốc MusiGenesis đó. Một cách tốt hơn để xử lý các độ phân giải màn hình khác nhau cho các thiết bị Windows Mobile là sử dụng các hình thức thừa kế, có thể được gắn vào một ứng dụng CF hiện có với nỗ lực tối thiểu.

Về cơ bản, bạn thiết kế từng biểu mẫu cho màn hình 240x320 chuẩn. Khi bạn cần phải sắp xếp lại một hình thức cho một nghị quyết mới (giả sử 240x240), bạn thêm một hình thức mới để dự án của bạn và có nó kế thừa từ gốc 240x320 hình của bạn:

public partial class frmDialog240x240: frmDialog 

thay vì chỉ biểu mẫu:

public partial class frmDialog240x240: Form 

như bình thường. Trên biểu mẫu ban đầu của bạn, bạn cần phải đặt thuộc tính Modifiers của mỗi điều khiển thành Được bảo vệ (thay vì Riêng tư mặc định). Trong trình thiết kế cho biểu mẫu mới của bạn, bạn sẽ thấy tất cả các điều khiển trên biểu mẫu bạn đang kế thừa và bạn có thể di chuyển chúng và thay đổi kích thước chúng khi bạn thấy vừa với kích thước màn hình mới (điều này sẽ không ảnh hưởng đến biểu mẫu gốc bố trí).

Khi chương trình của bạn đang chạy, thật dễ dàng để kiểm tra độ phân giải màn hình của thiết bị đang chạy và tạo biểu mẫu thích hợp (phương pháp nhà máy tốt cho việc này). Biểu mẫu mới của bạn kế thừa mọi thứ từ biểu mẫu cũ, nhưng sử dụng bố cục tùy chỉnh mới của bạn.

Cách tiếp cận này cho phép bạn tránh trùng lặp mã, vì không có bất kỳ lỗi nào.

+0

Tôi đã thử phương pháp tiếp cận thừa kế và không nhận được rất xa, chủ yếu là do các vấn đề với nhà thiết kế. Tôi sử dụng để kết nối và có kết quả tốt. – cdonner

+0

@cdonner: bạn có đặt thuộc tính Modifiers của mỗi điều khiển trên biểu mẫu gốc thành Được bảo vệ (thay vì Riêng tư) không? Đó là chìa khóa để nhà thiết kế làm việc đúng cách. – MusiGenesis

2

Mã này đã làm việc cho tôi trong việc xác định độ phân giải của màn hình tự động:

[DllImport("coredll.dll", EntryPoint = ("GetSystemMetrics"))] 
public static extern int GetSystemMetrics(int nIndex); 

private const int SM_CXSCREEN = 0; 
private const int SM_CYSCREEN = 1; 

private int width = GetSystemMetrics(SM_CXSCREEN); 
private int height = GetSystemMetrics(SM_CYSCREEN); 

Tôi không nhớ nó ra khỏi đỉnh đầu của tôi, nhưng đó cũng là một cách để có được Hướng màn hình. Điều này sẽ giúp hợp nhất một số mã trong một lớp duy nhất.

Tôi thực sự khuyên bạn nên tạo một giải pháp cho tất cả các độ phân giải. Bạn có thể có nhiều dự án như bạn muốn theo giải pháp này. Các dự án này có thể là các ứng dụng Windows Forms, các dự án Dll Library hoặc các dự án thiết lập.

Tôi muốn tạo một Dự án ứng dụng Biểu mẫu Windows duy nhất. Tôi sẽ sử dụng kỹ thuật trên và đọc các hình ảnh tĩnh từ Hệ thống tệp. Nếu điều này không làm việc cho bạn và/hoặc bạn muốn đọc hình ảnh của bạn dưới dạng tài nguyên, thì hãy tạo dự án dll 'động cơ', chứa tất cả mã phổ biến cho tất cả các độ phân giải. Thêm sau đó đầu ra của dự án này là tham chiếu đến nhiều dự án ứng dụng Windows Forms khi bạn cần.

5

Gắn kết và gắn kết là cơ chế phổ biến nhất để xử lý các độ phân giải khác nhau (hãy nhớ rằng nhiều thiết bị có thể xoay màn hình, vì vậy bạn cần xử lý các thay đổi ngay cả trên một thiết bị). Nhận kích thước màn hình, nếu cần sau đó, cũng đơn giản như truy vấn đối tượng Màn hình:

int screenWidth = Screen.PrimaryScreen.Bounds.Width; 
int workingHeight = Screen.PrimaryScreen.WorkingArea.Height; 
2

Không có câu trả lời đơn giản cho câu hỏi này. Thiết kế biểu mẫu để xử lý các độ phân giải màn hình khác nhau dễ dàng thực hiện trong Windows, ngay cả kích thước màn hình nhỏ nhất thường là 600 x 800. Trong thế giới CF, màn hình có thể nhỏ đến 240 x 240 (hoặc nhỏ hơn cho điện thoại thông minh) hoặc lớn 640 x 480 (hoặc lớn hơn). Việc neo và gắn kết có xu hướng hoạt động rất kém so với các phạm vi kích thước này.

Một tùy chọn là sử dụng cách tiếp cận mẫu số ít phổ biến nhất và thiết kế mọi thứ để vừa với màn hình nhỏ nhất có thể. Điều này được đảm bảo để làm việc trên mọi thiết bị, nhưng rõ ràng sẽ lãng phí không gian hữu ích trên màn hình lớn hơn.

Một tùy chọn khác là thiết kế từng biểu mẫu để nhận biết về độ phân giải. Ví dụ: nếu bạn có biểu mẫu hiển thị dữ liệu trong lưới và hộp tổ hợp bộ lọc phía trên lưới, bạn có thể viết mã trong sự kiện Đổi kích thước của biểu mẫu điều chỉnh kích thước của lưới để lấp đầy bất kỳ khoảng trống nào khả dụng.

Tùy chọn thay thế cho mã nhận thức có độ phân giải là tạo biểu mẫu riêng cho từng độ phân giải cho một chức năng giao diện người dùng cụ thể. Đây là công việc nhiều hơn và dẫn đến sao chép mã, tất nhiên, nhưng đối với một số chức năng cụ thể này chỉ là một cái gì đó bạn phải làm. Miễn là bạn trừu tượng hóa logic chung, bạn sẽ ổn thôi.

Bạn có ý tưởng đúng về việc muốn đạt được điều này trong một dự án duy nhất.Độ phân giải màn hình khác nhau thường có thể được xử lý với một chút công việc và suy nghĩ, và chắc chắn không phải là căn cứ để tách sản phẩm của bạn thành các dự án khác nhau.

+0

Vui lòng xem câu trả lời mới của tôi.Tôi đào một ít đào sâu vào vấn đề này và tìm thấy một cách tốt hơn để đối phó với độ phân giải màn hình. – MusiGenesis

0

Tôi đã từ bỏ nhà thiết kế cho tất cả trừ các ứng dụng nhỏ gọn cơ bản nhất. Tôi cố gắng đặt mọi điều khiển toán học bằng cách sử dụng kích thước màn hình. Nghe có vẻ đau đớn nhưng một khi bạn nhận được nó sẽ trở thành bản chất thứ hai.

Đối với mọi biểu mẫu tôi tạo phương thức 'tạo lại' được kích hoạt bất cứ khi nào biểu mẫu được hiển thị hoặc thay đổi kích thước. Trong phương pháp đó, tôi thường đặt vị trí, kích thước và, nếu cần thiết, kích thước phông chữ cho mỗi điều khiển trên biểu mẫu. Khi đặt điều khiển, quy trình suy nghĩ của tôi là:

  1. OK cho thiết bị chân dung thông thường?
  2. OK cho thiết bị cảnh quan thông thường?
  3. OK cho thiết bị hình vuông?
  4. OK cho thiết bị VGA (640x480) (DPI cao)?

Đối với kích thước phông chữ và đối phó với DPI cao (Dots Per Inch) các thiết bị VGA, tôi sử dụng tài sản -:

CurrentAutoScaleDimensions.Height/96

... để sản xuất một font-rộng hệ số. (Thiết bị thông thường là 96 DPI)

Như một phương sách cuối cùng, bạn có thể sử dụng câu lệnh có điều kiện (if) trong mã tạo lại để kiểm tra các kích cỡ/hình dạng màn hình khác nhau.

Vẫn có thể sử dụng trình thiết kế cho bố cục cơ bản nhưng bạn cần chạy các biểu mẫu trên nhiều trình mô phỏng/thiết bị khác nhau và thử chuyển đổi dọc/ngang để kiểm tra đầy đủ các phương pháp 'tạo lại'.

Các vấn đề liên quan