WS_EX_LAYERED - Es scheint nicht definiert zu sein...
-
hi,
ich habe Platform SDK February 2003 und habe dort von WS_EX_LAYERED gelesen, welches man bei CreateWindowEx setzen kann. Ich laß auch im internet, dass ich bevor ich windows.h einbinde, _WIN32_WINNT auf 0x0500 definieren muss. Allerdings gibt es die konstante WS_EX_LAYERED nicht, egal was ich mache.
hier das script (ganz simpel):
#define _WIN32_WINNT 0x0500 #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = "Bla"; HWND hWnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; RegisterClass(&wndclass); hWnd = CreateWindowEx( WS_EX_LAYERED, szAppName, "Bla", WS_OVERLAPPEDWINDOW | WS_EX_LAYERED, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }wieso gibt es diese konstante bei mir nicht (genauso wie LWA_Alpha und die funktion SetLayeredWindowAttributes)?
MfG, Herr-Vorragend
P.S.: Ich hab windows xp
-
WinUser.h schrieb:
#if(_WIN32_WINNT >= 0x0500)
#define WS_EX_LAYERED 0x00080000#endif /* _WIN32_WINNT >= 0x0500 */
Guck mal was in deiner WinUser.h steht.
Btw: den ex-Style gibt man nicht auch noch als normalen Style an.
-
Hast Du das PSDK auch in deine IDE eingebunden (sind die PSDK-Verzeichnisse als erstes bei den Include-Ordnern genannnt)?
In der winuser.h steht definitiv:
#if(_WIN32_WINNT >= 0x0500) #define WS_EX_LAYERED 0x00080000 #endif /* _WIN32_WINNT >= 0x0500 */Kann höchstens sein das deine IDE dein PSDK vom Februar 2003 nicht kennt...
-
also in der winuser.h steht überhaupt nichts von WS_EX_LAYERED...
und wieso steht es nicht in der datei, wird aber in der dazugehörigen hilfe beschrieben?
-
Herr-Vorragend schrieb:
also in der winuser.h steht überhaupt nichts von WS_EX_LAYERED...
und wieso steht es nicht in der datei, wird aber in der dazugehörigen hilfe beschrieben?
Tja, dann hast Du nicht das Platform SDK vom Februar 2003, denn aus genau der winuser.h hab ich obigen Code kopiert (oder Du schaust in die veraltete, vom Compiler mitgelieferte winuser.h, womit ich erneut auf mein voriges Posting hinweisen möchte: Kennt deine IDE die Verzeichnisse des installierten PSDK's?).
-
keine ahnung, wo kann man das denn nachschauen? also ich habe nach der installation von dem psdk den menüpunkt "Register PSDK Directories with Visual Studio" aufgerufen...
und in der Datei winuser.h, im verzeichnis D:\Microsoft PSDK\include steht bei mir nichts über WS_EX_LAYERED.
Allerdings habe ich eben gesehen, dass es in der datei winuser.rh steht, jedoch ist die datei nur knapp 50kb groß, sonst hätte ich sie einfach umbenannt in winuser.h
-
Dann stimmt irgendwas mit deinem Platform SDK nicht!
Bei mir steht in der winuser.h exakt dasselbe wie bei hepi und zwar in den Zeilen 2413-2416
-
ich habs jetzt noch mal neu installiert und jetzt steht's drin.
allerdings funktioniert es immernoch nicht. wie kann ich denn sehen, ob die include-dateien des PSDK eine höhere "priorität" haben als die anderen include dateien?
-
Anhand der Reihenfolge unter Extras > Optionen > Verzeichnisse

-
tausend dank, jetzt funktionierts
