2011-02-05 43 views
5

Với C#, tôi đã dễ dàng có thể có được hiệu quả tôi muốn:Tạo một cửa sổ bằng CreateWindowEx không có biểu tượng

standard window without icon in title bar

Tuy nhiên, tôi đang gặp rắc rối làm điều tương tự bằng cách sử dụng API Win32 trong C. Tôi không biết cách tạo cửa sổ có không có biểu tượng (ở tất cả), nhưng vẫn có chú thích, nút thu nhỏ và nút đóng.

Tôi đã đăng ký lớp học của mình đúng cách, nhưng tôi không thể tìm ra những gì cần đặt cho kiểu cửa sổ/kiểu cửa sổ mở rộng.

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] = 
    TEXT("StuffClass"); 

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass, 
    lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, 
    CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL); 

Mã sản xuất trên:

standard window WITH an icon in the title bar

mà vẫn có một biểu tượng trên thanh tiêu đề và không phải là những gì tôi muốn.

Trả lời

7

Cửa sổ chuẩn yêu cầu biểu tượng vì nó cần một dạng biểu diễn trong thanh tác vụ ở cuối màn hình. Điều gì sẽ được hiển thị khi bạn nhấn Alt + Tab trong trình chuyển cửa sổ nếu một trong các cửa sổ chính không có biểu tượng?

Bạn cần chỉ định WS_EX_DLGMODALFRAME extended style. Đây là cùng một hiệu ứng mà WinForms đặt khi bạn tắt biểu tượng trong thanh tiêu đề.

Bạn cũng cần đảm bảo rằng bạn không chỉ định biểu tượng khi bạn đăng ký lớp cửa sổ. Bạn cần phải đặt hIconhIconSm lĩnh vực cấu trúc WNDCLASSEX để 0.

Thay đổi mã của bạn như sau:

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] = 
    TEXT("StuffClass"); 

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass, 
    lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, 
    CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL); 
+0

Tôi đã thử điều đó, nhưng sau đó cửa sổ không có nút đóng. http://localhostr.com/files/k3WzHR6/Stuff.png –

+0

@myeviltacos: Tôi cho rằng tôi đã bỏ lỡ điểm của câu hỏi. Việc loại bỏ menu hệ thống trong thực tế sẽ loại bỏ hộp đóng; đó là do thiết kế. Bạn đang thực sự tìm kiếm một cửa sổ hộp thoại để mô phỏng phong cách tương tự trong WinForms. Một cửa sổ chính tiêu chuẩn sẽ không làm những gì bạn đang hy vọng. Tôi đã cập nhật câu trả lời của mình. –

+0

Cảm ơn, đó là chính xác những gì tôi cần! –

1

Trên một mặt lưu ý, sử dụng Spy ++ hoặc công cụ tương tự khác để xem phong cách mà bất kỳ HWND đã cho nào thực sự sử dụng. Trỏ nó vào cửa sổ C# của bạn, sau đó nhân đôi các kiểu báo cáo trong mã C của bạn.

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