2010-07-24 37 views
7

Tôi đã ra lệnh cho Lập trình Windows Ấn bản lần thứ năm cách đây vài ngày và bắt đầu làm việc với nó.Làm thế nào tôi có thể làm cho cửa sổ API Win32 hiện đại hơn?

Tôi bắt đầu tìm hiểu về win32 api, tuy nhiên, tôi có một câu hỏi. Các cửa sổ không nhìn hiện đại winxp/win vista/win 7 phong cách ở tất cả. Làm thế nào để sửa lỗi này?

Nó hiện giống như thế này, phông chữ crap và tất cả.

enter image description here

Cảm ơn bạn trước!

Machiel

+0

Bạn có hoàn toàn mới lập trình không? Nếu vậy, tôi khuyên bạn hãy xem xét điều này: http://www.microsoft.com/express/windows/ –

+2

@Camilo Martin: Nhà thiết kế trực quan trong Visual Studio chỉ dành cho các dự án được quản lý. Chúng không hoạt động với C và C++. –

+0

@ Quan điểm của tôi là anh ta nên xem xét Visual Basic thay thế. Hoặc Delphi nếu anh ấy thích hiệu suất của C. –

Trả lời

10

Để lấy font đúng bạn nên gọi này sau khi CreateWindow(Ex):

NONCLIENTMETRICS ncm; 
ncm.cbSize = sizeof(NONCLIENTMETRICS); 
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0); 
HFONT hFont = ::CreateFontIndirect(&ncm.lfMessageFont); 
::SendMessage(hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); 
+4

Tôi xin lỗi, nhưng điều này không chính xác và không được đánh dấu là câu trả lời, hãy xem http://blogs.msdn.com/b/oldnewthing/archive/2005/07/07/436435.aspx – Anders

+1

Nó không chính xác . – StackedCrooked

+3

Bạn đã kiểm tra liên kết của tôi chưa? Nó thậm chí còn cho bạn biết API chính xác là gì "Nó được tạo ra trong quá trình phát triển Windows 95 với hy vọng trở thành phông chữ GUI mặc định mới, nhưng vào tháng 7 năm 1994, Windows đã ngừng sử dụng nó để ủng hộ các phông chữ khác nhau được trả về bởi hàm SystemParametersInfo" – Anders

4

Bạn chưa thực sự đọc sách này. Bạn đang tìm kiếm WM_SETFONT. Có một lý do khiến các điều khiển chung không phải là điều đầu tiên mà cuốn sách đề cập đến.

+0

Tôi thích nhận được downvotes ngẫu nhiên mà không có nhiều như một bình luận freaking là tại sao. KHÔNG PHẢI! –

+0

+1 vì điểm của bạn hợp lệ. –

+1

Tôi nghĩ rằng downvotes là bởi vì anh ấy đang tìm kiếm nhiều hơn font chữ, anh ấy đang tìm kiếm một phong cách hiện đại hơn tổng thể. (Không biết về bản thân mình, tôi đoán có một bộ tiện ích khác và có thể là một bộ API hoàn toàn khác, liên quan đến cách nào đó.) Lưu ý rằng tôi đã không để lại một lời giới thiệu. – fennec

0

Bạn có thể muốn đăng một số ảnh chụp màn hình về chính xác những gì bạn đang nói về sự khác biệt, điều này sẽ giúp tìm ra những gì bạn cần thay đổi.

Nói chung, tôi có thể nói rằng bạn có thể cần phải bao gồm tệp kê khai approprite với ứng dụng của mình để ứng dụng của bạn sử dụng các điều khiển chung mới nhất.

Ngoài ra, những ngày này hầu hết giao diện người dùng không được phát triển sử dụng mã kiểu SDK, điều này rất khó lập trình/duy trì, thay vào đó hãy sử dụng một số loại thư viện giao diện người dùng, MFC.

+0

Kiểu trực quan đã được bật. Một chút lẻ. Nhưng đó là ấn bản thứ năm ... –

2

Bạn có thể muốn kiểm tra GetThemeSysFont để điền vào LOGFONT của phông chữ hệ thống thích hợp, tạo nó bằng cách sử dụng CreateFontIndirectWM_SETFONT để gán cho mỗi điều khiển bạn tạo.

Theo tôi, không có cách nào để đặt mặc định khác cho cửa sổ mới được tạo trong ứng dụng của bạn. Cũng không có cách nào để thiết lập tất cả các cửa sổ mà bạn đã tạo trong một bước (tức là thay vì chỉ lặp qua tất cả các cửa sổ đó hoặc chỉ định riêng từng cửa sổ). Ngoại lệ là hộp thoại khi được tạo từ tài nguyên cho phép tài nguyên chỉ định phông chữ được sử dụng cho tất cả các điều khiển trên hộp thoại.

+2

Không, bạn không muốn sử dụng DEFAULT_GUI_FONT, xem http://blogs.msdn.com/b/oldnewthing/archive/2005/07/07/436435.aspx – Anders

+0

Hm, tốt gọi điện. Đã cập nhật. –

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