在 Internet Explorer 中呈現半透明或非矩形 ActiveX 控件,需解決兩大關鍵:
<OBJECT> 標籤樣式加入 FILTER: alpha(opacity=80) 指定透明度 (0-100),需 IE 5.5+ 支援。在控件類別覆寫 GetControlFlags,加入 windowlessActivate 旗標:
DWORD CTestCtrl::GetControlFlags()
{
DWORD dwFlags = COleControl::GetControlFlags();
// 允許無視窗啟用
dwFlags |= windowlessActivate;
return dwFlags;
}
注意:無視窗模式下 m_hWnd 為 NULL,訊息處理需改用 OnDraw、OnMouseMove 等虛擬函式,無法直接使用視窗訊息映射。選單彈出、焦點管理等需繞道解決 (文中採用迂迴法)。
<OBJECT
ID="TestCtrl"
CLASSID="CLSID:你的控件CLSID"
STYLE="FILTER: alpha(opacity=80); WIDTH: 300px; HEIGHT: 200px"
></OBJECT>
opacity=80 表示 80% 不透明度 (20% 透明)。OnDraw 中勿填滿背景,僅繪製前景圖形/文字。

| 問題 | 原因 | 建議對策 |
|---|---|---|
| 滑鼠事件不靈敏/無法彈出選單 | 無視窗控件無 HWND,IE 不直接分派視窗訊息 | 在 OnMouseMove/OnButtonDown 手動處理點擊測試;選單改用 TrackPopupMenu 配合容器座標轉換 |
| 未正確處理透明混合 | OnDraw 使用 TransparentBlt 或 GDI+ AlphaBlend;確認容器背景色 | |
| Alpha Filter 需 IE 5.5+ | 偵測版本降級顯示或改用 PNG 透明圖片替代 |
本文配套原始碼 (含測試 HTML) 可供下載。