000
26.11.2006, 14:08 Uhr
CppProgrammer
|
Hallo Ich versuche schon seit einiger Zeit ein Popup Menu transparent zu machen. Im Internet bin ich hierzu auf diese Seite gestoßen. Ich hab jedoch das Gefühl dass dieser Code nur auf Win2k funktioniert und nicht auf meinem WinXP+SP2 (VC++ 6.0). Zumindest konnte ich den Code weder im Demo Projekt noch einzeln kompilieren. Mein Popup Menu öffne ich mit folgender Funktion:
C++: |
bool TrackPopupMenu(CWnd* pWnd, UINT nIDResource, UINT nFlags=TPM_LEFTALIGN|TPM_RIGHTBUTTON) { CPoint CurPos; CMenu* MMnu = new CMenu(); if(!MMnu->LoadMenu(nIDResource)){ delete MMnu; return false; } GetCursorPos(&CurPos); MMnu->GetSubMenu(0)->TrackPopupMenu(nFlags, CurPos.x, CurPos.y, pWnd); MMnu->DestroyMenu(); delete MMnu; return true; }
|
Normale Fenster auf die ich auch ein Handle hab kann ich mit dieser Funktion transparent machen:
C++: |
BOOL MakeWindowTransparent(HWND hWnd, int value=255) { if(value > 255) value = 255; if(value < 0) value = 0;
typedef DWORD (WINAPI *PSLWA)(HWND, DWORD, BYTE, DWORD); static PSLWA pSetLayeredWindowAttributes = NULL; static BOOL initialized = FALSE; #define WS_EX_LAYERED 0x00080000 #define LWA_COLORKEY 0x00000001 #define LWA_ALPHA 0x00000002 HMODULE hDLL = LoadLibrary ("user32"); pSetLayeredWindowAttributes = (PSLWA) GetProcAddress(hDLL, "SetLayeredWindowAttributes"); if(pSetLayeredWindowAttributes == NULL) return FALSE; SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED); if(GetLastError()) return FALSE; int result = pSetLayeredWindowAttributes (hWnd, RGB(200, 200, 200), (int)(value), LWA_ALPHA); return result; }
|
Hat irgendjemand vielleicht etwas Code oder ne Idee wie man ein solches transparentes Menu umsetzen kann?
Danke schon mal. Dieser Post wurde am 26.11.2006 um 14:18 Uhr von CppProgrammer editiert. |