2011-11-03 38 views
5

Chúng tôi đang gặp sự cố với một trong các ứng dụng dựa trên Win32 MFC hiện có của chúng tôi. Nó không hiển thị chính xác trên màn hình sử dụng cài đặt dpi cao. Cụ thể hơn trong Windows XP với 120 dpi được chọn, có một số vị trí trong ứng dụng nơi văn bản mở rộng nhưng không chứa các vùng chứa của chúng (văn bản tràn các giới hạn của nút đó, v.v.). Điều này cũng xảy ra trong Windows 7 (và Vista) khi chọn> 96 dpi và "sử dụng tỷ lệ dpi XP kiểu" được chọn. Nếu xp style scaling không được chọn thì tôi hiểu Win7 sử dụng ảo hóa DPI thay vào đó. Mọi thứ đều ổn khi sử dụng ảo hóa DPI (Ok mọi thứ bị mờ nhưng ít nhất là chúng đúng). Theo mặc định trong Win7 120 dpi sử dụng quy mô kiểu xp và cài đặt tiếp theo (144 dpi) thì không. Vì vậy, ứng dụng của chúng tôi có vẻ chính xác ở mức 144 dpi nhưng sai ở 120 dpi.Ứng dụng Windows - Các vấn đề DPI

Nếu tôi chỉnh sửa tệp kê khai ứng dụng để khai báo ứng dụng là "nhận thức DPI" thì điều này sẽ chuyển thành ảo hóa DPI (nhưng không phải là chia tỷ lệ dpi XP). Mọi thứ vẫn trông rất tệ (không thay đổi 120 dpi, 144 dpi giờ đã bị hỏng).

Tôi cần khắc phục sự cố này và tôi đã thử đọc các vấn đề về DPI/mở rộng nói chung và đó là trải nghiệm học tập. Cho đến nay tôi đã không tìm thấy một giải pháp phù hợp. Tại thời điểm này tôi hiện không có ý định sửa chữa toàn diện và chính xác (ứng dụng sẽ cân chính xác tất cả các phần tử theo dpi). Điều đó sẽ liên quan đến một LOT của viết lại. Tôi nghĩ có hai giải pháp khả thi. Một là tắt bất kỳ loại DPI mở rộng với nhau. Điều đó có nghĩa là nếu hệ thống Win7 của người dùng được đặt thành 120 dpi thì mọi thứ trên hệ thống của họ sẽ đẹp/lớn nhưng ứng dụng của chúng tôi sẽ chính xác nhưng sẽ nhỏ so với mọi thứ khác trong các ứng dụng khác. Giải pháp thứ hai sẽ là làm thế nào để ứng dụng của chúng tôi sử dụng ảo hóa DPI nhưng không bao giờ sử dụng quy mô dpi XP. Tôi muốn điều này là một thay đổi bên ứng dụng và không dựa vào người dùng cuối để phải thay đổi cấu hình Windows.

Cho đến nay tôi chưa tìm được cách để thực hiện một trong hai giải pháp.

Ai đó có thể hiểu biết nhiều hơn về chủ đề này, vui lòng trả lời và chỉ cho tôi đúng cách?

Cảm ơn

+1

Có phải sự cố trong mã bố cục hoặc mã bản vẽ của bạn không? Ví dụ: vấn đề bạn đang tạo nút và các điều khiển tiêu chuẩn khác x theo y pixel hoặc là sự cố bạn có mã vẽ các điều khiển của riêng bạn (ví dụ: sử dụng cuộc gọi GDI) có kích thước cố định? Làm thế nào bạn đang làm bố trí của bạn? Các hình thức? Mẫu hộp thoại? Mã tùy chỉnh? –

+0

Không có phép thuật ở đây, bạn sẽ chỉ phải làm cho cửa sổ của bạn lớn hơn. Hoặc phông chữ của bạn nhỏ hơn, hãy chọn chất độc của bạn. –

Trả lời

2

Bạn không thể ép DPI Virtualization trên 120 cài đặt DPI. Tôi đã tự mình nghiên cứu sản phẩm này vì có cái nhìn mờ ở DPI cao dường như là một sự cân bằng tốt.

Chúng tôi đã kết thúc viết lại toàn bộ vị trí giao diện người dùng và chia tỷ lệ để có tỷ lệ mở rộng phù hợp với tỷ lệ phông chữ trong cài đặt DPI cao. Bây giờ khách hàng đã hoàn toàn nhận thức được DPI và quy mô đúng cách trong bất kỳ thiết lập DPI nào.

Công việc để thực hiện việc này đúng cách mất một anh chàng ~ 3 tháng trong trường hợp của chúng tôi cho một khách hàng khá phức tạp.

Chúng tôi đã có kế hoạch thứ cấp mà chúng tôi chưa bao giờ thử nhưng có thể phù hợp với bạn: Khi khởi động, hãy đọc hệ số nhân rộng DPI của hệ điều hành. Sau đó giảm tất cả các trường hợp phông chữ mà bạn có bởi yếu tố này để khi Windows mở rộng phông chữ lại, chúng sẽ trở lại kích thước nơi giao diện người dùng có thể phù hợp với chúng. Tất nhiên người dùng có cài đặt DPI cao sẽ không nhận được phông chữ lớn hơn trong ứng dụng của bạn nhưng ít nhất cũng có thể sử dụng được.

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