首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 修改桌面圖示文字背景為透明:直接操作 SysListView32 視窗訊息

     編輯:VC 教學

原理

Windows 桌面圖示由 SysListView32 控件 (在 Progman → SHELLDLL_DefView 層級下) 繪製。透過未公開訊息 0x1026 (設定背景模式) 與 0x1024 (設定前景色) 可將文字背景設為透明、前景設為白色。

完整程式碼


#include 

int main()
{
    HWND hWnd = GetDesktopWindow();

    // 依序尋找:Program Manager → SHELLDLL_DefView → SysListView32
    hWnd = FindWindowEx(hWnd, 0, _T("Progman"), _T("Program Manager"));
    if (!hWnd) return 1;

    hWnd = FindWindowEx(hWnd, 0, _T("SHELLDLL_DefView"), NULL);
    if (!hWnd) return 1;

    hWnd = FindWindowEx(hWnd, 0, _T("SysListView32"), NULL);
    if (!hWnd) return 1;

    // 0x1026: 設定文字背景模式 (0=不透明, 1=透明)
    // wParam=0, lParam=0xFFFFFFFF 表示透明
    SendMessage(hWnd, 0x1026, 0, 0xFFFFFFFF);

    // 0x1024: 設定文字前景色 (COLORREF)
    // 0x00FFFFFF = 白色 (RGB(255,255,255))
    SendMessage(hWnd, 0x1024, 0, 0x00FFFFFF);

    // 強制重繪
    InvalidateRect(hWnd, NULL, TRUE);

    return 0;
}

注意事項

  • 版本相容:此訊息在 Windows 95/98/NT/2000/XP 有效,Vista 以降桌面組件架構改變 (Desktop Window Manager) 可能失效。
  • 權限:需以相同完整性層級執行 (非管理員亦可),若桌面由更高權限進程建立則需提權。
  • 持久性:設定僅對當前 Session 有效,重開機後還原。若需永久,可放入啟動資料夾或登錄 Run 鍵。
  • 替代方案:SystemParametersInfo(SPI_SETDESKWALLPAPER...) 僅能換壁紙,無法直接控制圖示文字樣式。

擴充應用

同樣技巧可用於:

  • 自訂桌面圖示文字顏色 (傳入任意 COLORREF)。
  • 開發桌面美化小工具,提供透明/半透明/陰影等多種文字樣式切換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved