【发布时间】:2014-08-02 02:15:13
【问题描述】:
我将WS_EX_LAYERED 样式添加到菜单窗口句柄以使 TPopupMenu 透明但代码不起作用,我的意思是菜单不透明。
这是我正在使用的代码
var
hHookID: HHOOK;
function HookCallWndProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall;
var
cwps: TCWPStruct;
lRet: THandle;
szClass: array[0..256] of char;
dwNewLong : NativeInt;
begin
if (nCode = HC_ACTION) then
begin
CopyMemory(@cwps, Pointer(lParam), SizeOf(CWPSTRUCT));
case cwps.message of
WM_CREATE:
begin
GetClassName(cwps.hwnd, szClass, Length(szClass)-1);
if (lstrcmpi(szClass, '#32768') = 0) then
begin
dwNewLong := GetWindowLongPtr(cwps.hwnd, GWL_EXSTYLE);
if (dwNewLong and WS_EX_LAYERED) = 0 then
begin
SetWindowLongPtr(cwps.hwnd, GWL_EXSTYLE, dwNewLong or WS_EX_LAYERED);
SetLayeredWindowAttributes(cwps.hwnd, 0, 180, LWA_ALPHA);
end;
end;
end;
end;
end;
Result := CallNextHookEx(WH_CALLWNDPROC, nCode, wParam, lParam);
end;
procedure TForm4.FormDestroy(Sender: TObject);
begin
if (hHookID<>0) then
UnhookWindowsHookEx(hHookID);
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
hHookID := SetWindowsHookEx(WH_CALLWNDPROC, @HookCallWndProc, 0, GetWindowThreadProcessId(Handle, 0));
end;
关于如何使 TPopupmenu 透明或为什么上述代码不起作用的任何想法?
【问题讨论】:
-
请参阅
CallNextHookEx的文档。 -
另外,也可以直接使用
PCWPStruct(lParam)^,不需要内部复制。
标签: delphi delphi-xe4