我看了一些小軟件,他們是來做的美化桌面的,將系統的右下角的小時鐘改為自己的樣式了,也可以改為 Longhorn 樣式的小時鐘。
我想知道:
1.這個是什麼原理?誰有代碼可以參考?
2.使用了鉤子嗎?應該修改系統文件吧?難道得到 TrayClockClass 的句柄,然後在它上面畫出來?十分感謝你的回答,我會為問題再加分的(200分)。

解决方案 »

  1.   

    step1:隐藏托盘时间
      function ShowTrayClock(bValue: Boolean) : Boolean;
      var
        TrayWnd, TrayNWnd, ClockWnd: HWND;
      begin
        TrayWnd  := FindWindow('Shell_TrayWnd', nil);
        TrayNWnd := FindWindowEx(TrayWnd, 0, 'TrayNotifyWnd', nil);
        ClockWnd := FindWindowEx(TrayNWnd, 0, 'TrayClockWClass', nil);
        Result := IsWindow(ClockWnd);
        if Result then
        begin
          ShowWindow(ClockWnd, Ord(bValue));
          PostMessage(ClockWnd, WM_PAINT, 0, 0);
        end;
      end;
    step2:将你的程序最小化到托盘中显示动态的修改托盘图标
      

  2.   

    謝謝hongqi162(失踪的月亮) 呵,我也想到隱藏 TrayClockWClass,也想到動態修改拖盤圖標,但是好象拖盤圖標一般隻是 24*24 的大小,我暫時不能做到 24 * 48 或者 24 * 56 樣式,該怎麼辦?請大俠繼續賜教啊。
      

  3.   

    为什么非要用它的呢?可以自己把图标放在托盘处!TrayIcon就可以!控件 盒子 里有!
      

  4.   

    那种你说的工具栏是否还是windows的工具栏?
      

  5.   

    但是windows的始終顯示區域已經不是簡單規則 16*16 這樣了,而是隨這用戶的設置而變更,例如,上午 09:10  或者 AM 09:10 這樣,它的顯示區域是 16*76 這樣的一個 RECT(使用SPY++查看)。糾正我一直在說的一個錯誤:系統托盤圖標是 16*16,而不是 24*24。不知道  hongqi162(失踪的月亮) 大俠說的是什麼意思?“那种你说的工具栏是否还是windows的工具栏?”是否說可考慮將工具攔做到托盤區域?
      

  6.   

    可以通过修改windows样式实现
    相当于给他换skin不过自己做不太会
    ding