2009-09-11 39 views
7

Tôi đã viết một chương trình vẽ tiện ích con trên hình nền máy tính để bàn, dưới biểu tượng máy tính để bàn và tất cả đều tốt. Nhưng tôi tiết lộ một lỗi lạ - chương trình của tôi không hoạt động trên một số máy tính khác - chúng hiển thị cùng một máy tính mà không có tiện ích sau khi bắt đầu.vẽ theo biểu tượng trên máy tính để bàn

Vì vậy, có bất kỳ ai hết hạn, một số kiến ​​thức trong lĩnh vực này không? Làm ơn giúp tôi! :)

(Tôi không thể tìm thấy bất kỳ máy tính gần, nơi phụ tùng không hoạt động, trong máy tính của tôi tất cả hoạt động tốt. tôi đã viết rất nhiều các chương trình kiểm tra, mà cố gắng vẽ bất cứ điều gì trên máy tính để bàn với hơn phương pháp, nhưng thử nghiệm hiển thị gì quá trong máy tính bạn bè của tôi)

phương pháp Vẽ:.

tôi đã viết một dll, người phát hiện cửa sổ máy tính để bàn (progman-> từ trẻ> trẻ em)) và tạo ra một cái móc và cài đặt thủ tục một cửa sổ riêng cho máy tính để bàn. Trong thủ tục cửa sổ i treo WM_ERASEBKGND:

case WM_ERASEBKGND: 
    HDC hdc = (HDC)wparam; 
    PaintDesktop(hdc); 
    WidgetPaint(hdc); 
    return 1; 

// Tôi bỏ qua trong mã này nhận và thiết lập vùng cắt để vẽ nhanh. (Tôi đã thử tất cả các kết hợp với cắt và không cắt)

Và trong các thử nghiệm, tôi cũng cố gắng vẽ tiện ích trong tin nhắn WM_PAINT với cùng một kết quả - tất cả đã hoạt động với tôi, nhưng không hoạt động ở tất cả bạn bè của tôi.

cập nhật: Tôi đã giải quyết! :)

+0

Mã của bạn có hoạt động trong Windows XP và * không * hoạt động trong Windows Vista hoặc Windows 7 không? – MusiGenesis

+0

Có, mã của tôi hoạt động trong XP và Windows Vista. Nhưng hoàn toàn không hoạt động trong Windows 7. Trong Windows 7, tôi giả sử, cơ chế bảo vệ của nó. (Tôi thậm chí không thể liệt kê các tệp DLL được tải trong quá trình explorer.exe) – vsvasya

+1

Ngoài sự tò mò, sửa lỗi là gì? – Brian

Trả lời

3

Tôi đã giải quyết! Nó đơn giản là một máy 64-bit) Vì vậy, tôi biên dịch mã của tôi cho 64-bit và công việc bắt đầu phụ tùng khá tốt!

Và, cũng -

PaintDesktop(hdc); 

sẽ tạo ra hình nền rất sáng trong Windows7 (và Vista) với Aero. (Hình nền của người dùng trở nên sáng hơn). Phải

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

Nguyên nhân của việc này - Aero đối xử với PaintDesktop() như sơn thông thường (trên nền màn hình ảo, có nghĩa là giống như trên máy tính để bàn) với tổng màu.

Trân trọng! :)

+0

Tôi chỉ đang cố gắng viết một điều tương tự. Tôi muốn hiển thị hình ảnh bên dưới biểu tượng màn hình. Tôi không phải là một chuyên gia lập trình cửa sổ vì vậy tôi có một số thời gian khó khăn với điều này. Bạn có thể vui lòng đăng một nơi nào đó mã nguồn cho tiện ích của bạn không? – ciamej

+0

Bạn có thể đăng câu trả lời chi tiết hơn không. Tôi tò mò làm thế nào bạn vẽ dưới các biểu tượng máy tính để bàn. – Ampere

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