Tôi đang phát triển một ứng dụng MFC và gần đây tôi đã tìm kiếm một phương pháp tốt để xóa biểu tượng khỏi thanh tiêu đề Windows, nhưng giữ nút đóng. Hai giải pháp ứng cử viên rõ ràng là tắt kiểu menu hệ thống hoặc sử dụng kiểu cửa sổ công cụ, nhưng tôi không muốn vô hiệu hóa menu hệ thống hoặc sử dụng thanh tiêu đề của cửa sổ công cụ bị thu nhỏ. Nhiều ứng dụng MFC có chức năng này, vì vậy tôi tự hỏi: Tôi có thiếu một số cách tiêu chuẩn để làm điều này?Xóa biểu tượng khỏi thanh tiêu đề Windows mà không bỏ qua nút đóng hoặc menu hệ thống?
Trả lời
Bạn có thể sử dụng WM_NCRBUTTONDOWN
để phát hiện xem người dùng đã nhấp chuột phải vào chú thích và sau đó hiển thị menu hệ thống.
điều gì về việc thoát khỏi menu hệ thống và sau đó đặt nó trở lại ở một nơi khác của bạn (nói bên cạnh nút đóng, v.v ...)?
Nếu không có biểu tượng, phương pháp duy nhất tôi có thể tưởng tượng để người dùng truy cập menu hệ thống là thông qua nhấp chuột phải vào thanh tiêu đề.
Nếu đó là những gì bạn có trong tâm trí, bạn có thể xử lý WM_RBUTTONDOWN trên khung chính của bạn và sau đó tính toán nếu nhấp chuột phải là trên thanh tiêu đề.
int clickX = GET_X_LPARAM(lParam);
int clickY = GET_Y_LPARAM(lParam);
CRect frameRect;
mainFrame.GetWindowRect(&frameRect);
int titleBarHeight = GetSystemMetrics(SM_CYCAPTION);
if (clickX >= frameRect.left &&
clickX <= frameRect.right &&
clickY >= frameRect.top &&
clickY <= frameRect.top + titleBarHeight)
{
TrackPopupMenu(m_systemMenu);
}
Đặt WS_EX_DLGMODALFRAME
kiểu mở rộng.
Bạn có thể sử dụng biểu tượng hoàn toàn trong suốt.
Một mẫu mã trong Delphi mà loại bỏ biểu tượng:
const
WM_ResetIcon = WM_APP - 1;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
protected
procedure WMResetIcon(var Message: TMessage); message WM_ResetIcon;
end;
implementation
procedure TForm1.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_ResetIcon, 0, 0);
end;
procedure TForm1.WMResetIcon(var Message: TMessage);
const
ICON_SMALL = 0;
ICON_BIG = 1;
begin
DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_BIG, 0));
DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_SMALL, 0));
end;
Một mã tương tự nên làm việc cho MFC. Về cơ bản, bạn chỉ cần WM_SETICON để NULL ở đúng nơi.
- 1. Cách xóa thanh tiêu đề khỏi biểu mẫu
- 2. C# 2005: Xóa biểu tượng khỏi thanh tiêu đề của biểu mẫu
- 3. Android 3.2 xóa tiêu đề khỏi thanh tác vụ
- 4. Cách hiển thị biểu tượng trong thanh tiêu đề QDockWidget?
- 5. Tải các menu và thanh công cụ WinForms để sử dụng chủ đề hệ thống?
- 6. Xoá thanh tiêu đề trong Windows Forms
- 7. menu tùy chọn - xóa tiêu điểm khỏi mục
- 8. Bỏ qua cuộc gọi hệ thống
- 9. Xóa biểu tượng thông báo khỏi thanh trạng thái
- 10. Vô hiệu hoá nút đóng trong thanh tiêu đề của cửa sổ WPF (C#)
- 11. Biểu tượng chủ đề hệ thống và PyQt4
- 12. Tạo Menu và Nút thả xuống của Firefox 4 trên Mẫu Tiêu đề Thanh C#
- 13. Xóa thanh tiêu đề trong Gnome
- 14. Làm cách nào để tùy chỉnh menu hệ thống của Biểu mẫu Windows?
- 15. PyQT Xóa chương trình Thanh Tiêu đề?
- 16. Biểu tượng khay hệ thống trong C++
- 17. Xóa tiêu đề khỏi phản hồi
- 18. Xóa biểu tượng khỏi JOptionPane
- 19. Có thể xóa nút mở rộng/thu gọn khỏi tiêu đề jqGrid không?
- 20. JTable có nút “đóng” trong tiêu đề cột
- 21. Đặt biểu tượng thanh tác vụ khác thành biểu tượng được hiển thị trên thanh tiêu đề (C#)?
- 22. Loại bỏ - Xóa mục khỏi ViewModel không xóa khỏi DOM
- 23. Tự động thêm menuitem vào menu mà không đóng menu
- 24. Làm thế nào để loại bỏ menu hệ thống trong WPF?
- 25. Thanh tiêu đề tùy chỉnh mà không cần đệm (Android)
- 26. Android thanh tiêu đề loại bỏ
- 27. Làm mới biểu tượng khay hệ thống theo chương trình
- 28. Chủ đề tổ ong * .Không có hành độngBar hoặc * .NoTitleBar - nút Menu ở đâu?
- 29. Mở cửa sổ từ biểu tượng Khay hệ thống
- 30. Nút xóa iOS - Mục tiêu C
Điều này đáng lẽ phải là câu trả lời. – c00000fd