2008-09-09 27 views
8

Tôi đang tạo một cửa sổ ToolTip và thêm công cụ vào nó bằng cách sử dụng cờ TTF_IDISHWND | TTF_SUBCLASS. (C++, win32)Mẹo Công cụ Win32 biến mất không bao giờ xuất hiện lại với Commctl 6

Tôi có một tệp kê khai sao cho chương trình của tôi sử dụng các chủ đề WindowsXP mới (phiên bản comctrl32 6).

Khi tôi di chuột qua công cụ đã đăng ký, đầu xuất hiện.
Tốt.
Khi tôi nhấp chuột, đầu biến mất.
Ok.
Tuy nhiên, di chuyển ra khỏi công cụ và quay lại một lần nữa không làm cho đầu xuất hiện trở lại. Tôi cần phải di chuột qua một công cụ khác nhau và sau đó quay lại công cụ của tôi để nhận mẹo để quay lại.

Khi tôi xóa tệp kê khai của mình (để sử dụng comctrl32 không phải là XP cũ), sự cố biến mất.

Sau khi thực hiện một số thử nghiệm, tôi phát hiện ra những khác biệt sau giữa ToolTips trong phiên bản Comctl32 5 (cũ) và Comctl32 phiên bản 6 (mới):

  • New TTF_TRANSPARENT ToolTips (khi sử dụng In-Place) thực sự trả lại HTCLIENT từ WM_NCITTEST nếu nút chuột bị hỏng, do đó nhận được WM_LBUTTONDOWN và lấy cắp lấy nét trong giây lát trước khi biến mất. Điều này làm cho biên giới của ứng dụng nhấp nháy là .

  • TTF_TRANSPARENT ToolTips cũ luôn trả về HTTRANSPARENT từ WM_NCHITTEST, và do đó không bao giờ tự nhận được WM_LBUTTONDOWN và không bao giờ lấy cắp tiêu điểm. (Điều này có vẻ chỉ là thẩm mỹ, nhưng có thể ảnh hưởng đến điểm tiếp theo ...)

  • Mẹo công cụ mới dường như không nhận được sự kiện WM_TIMER sau khi nhấp chuột và chỉ tiếp tục nhận được (một loạt) sự kiện hẹn giờ sau bị kích hoạt và kích hoạt lại. Do đó, họ không hiển thị lại cửa sổ mẹo của họ sau khi nhấp chuột và thả chuột .

  • Chú giải công cụ cũ nhận được tin nhắn WM_TIMER ngay khi chuột được di chuyển lần nữa sau khi nhấp/thả, để chúng sẵn sàng hiển thị lại mẹo của chúng.

Vì vậy, như một cách giải quyết comctl32, tôi phải:

  • lớp cửa sổ TOOLTIPS_CLASS và luôn luôn trả HTTRANSPARENT từ WM_NCHITTEST nếu công cụ này yêu cầu minh bạch.

  • tránh sử dụng TTF_SUBCLASS và thay vào đó xử lý thông báo của chuột để Tôi có thể hủy kích hoạt/kích hoạt lại khi nhận WM_xBUTTONUP.

Tôi cho rằng thay đổi trong hành vi nội bộ là để thích ứng với các tính năng "có thể nhấp" mới trong ToolTips như siêu liên kết, nhưng hành vi di chuột dường như bị hỏng.

Có ai biết giải pháp nào tốt hơn giải pháp phân lớp phụ của tôi không? Tôi có thiếu một số điểm khác không?

Trả lời

0

Tôi không biết, nhưng điều này nghe có vẻ như một vấn đề thực sự "khó khăn" (theo nghĩa là tất cả các vấn đề trong thế giới thực) thực sự khó khăn. Tôi đặt cược vấn đề cơ bản là một cái gì đó để làm với các thiết lập của tập trung. Windows tự làm điều đó là ác và thường bị tất cả các cách của lỗi.

1

Bạn không phải là người duy nhất có vấn đề tương thích với chú giải công cụ giữa các DLLS này.

Tôi cũng đã có không có gì ngoài sự cố bằng chú giải công cụ mới trong các điều khiển chung có thể sử dụng. Chúng tôi đã được khỉ với thông điệp chuột và hoạt động/hủy kích hoạt các lời khuyên trước khi thêm các biểu hiện và theming ứng dụng của chúng tôi - vì vậy nó có vẻ như những gì bạn làm không quá điên rồ.

Chúng tôi vẫn đang gặp sự cố với các tin nhắn TTN_NEEDTEXT đang được gửi liên tục khi di chuyển chuột (không chỉ khi di chuột), các vấn đề định vị với các mẹo lớn (có thể không phải là điều mới) và các thông báo unicode lẻ được gửi thay vì ANSI các phiên bản (mà tôi dự định đăng bài như một câu hỏi tại một số điểm).

+0

Tôi gặp sự cố tương tự với điều khiển 'tooltip'. Vấn đề của tôi có vẻ đơn giản, nhưng không ai cung cấp giải pháp cho nó. Tôi cung cấp một tiền thưởng nhưng có 1 câu trả lời đó không phải là hữu ích cho tôi. Tôi hỏi bạn nếu bạn có thể xem [câu hỏi của tôi] (http://stackoverflow.com/questions/21238449/tooltip-is-never-shown-again-after-i-click-on-the-button-rephrased-to -reflect) và cho tôi biết nếu bạn đã từng gặp phải và giải quyết vấn đề như vậy. Tôi xin lỗi vì đã làm phiền bạn như thế này, thông thường tôi không yêu cầu giúp đỡ theo cách này nhưng tôi tuyệt vọng. Cảm ơn bạn. Trân trọng. – AlwaysLearningNewStuff

+0

@AlwaysLearningNewStuff, tôi đã xem câu hỏi. Quá nhiều thời gian đã trôi qua kể từ khi tôi đã làm win32 cho tôi để giúp đỡ với một cái gì đó rất cụ thể, xin lỗi. – Aardvark

+0

Cảm ơn bạn đã dành thời gian. Trân trọng. – AlwaysLearningNewStuff

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