Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
void DESKTOP_PANEL::add_mdi_window ( unsigned int size_x, unsigned int size_y, unsigned int pos_x, unsigned int pos_y, std::wstring titel, LRESULT CALLBACK mdi_proc ( HWND wnd, UINT message, WPARAM wparam, LPARAM lparam ) ) { HINSTANCE instance = reinterpret_cast < HINSTANCE > ( GetWindowLongW ( _parent,GWL_HINSTANCE ) ); WNDCLASSW wndclass; std::wstring class_name = L"TMP"; ZeroMemory ( &wndclass, sizeof ( WNDCLASSW ) ); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = mdi_proc; wndclass.cbClsExtra = NULL; wndclass.cbWndExtra = NULL; wndclass.hInstance = instance; wndclass.hIcon = LoadIconW ( 0, IDI_APPLICATION ); wndclass.hCursor = LoadCursor ( 0, IDC_ARROW ); wndclass.hbrBackground = reinterpret_cast < HBRUSH > ( 16 ); wndclass.lpszClassName = class_name.c_str ( ); if ( !RegisterClassW ( &wndclass ) ) MessageBoxW ( _parent, L"COUDLN'T REGISTER CLASS", L"ERROR", MB_OK ); _mdicreate.szClass = class_name.c_str ( ); _mdicreate.szTitle = titel.c_str ( ); _mdicreate.hOwner = instance; _mdicreate.x = pos_x; _mdicreate.y = pos_y; _mdicreate.cx = size_x; _mdicreate.cy = size_y; _mdicreate.style = NULL; _mdicreate.lParam = NULL; _mdi = ( HWND ) SendMessageW ( _client, WM_MDICREATE, 0, ( LPARAM )( LPMDICREATESTRUCT ) &_mdicreate ); if ( !IsWindow( _mdi ) ) { ErrorExit(L"Add MDI Window"); } } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
void ErrorExit(LPTSTR lpszFunction) { wchar_t szBuf[80]; LPVOID lpMsgBuf; DWORD dw = GetLastError(); FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); wsprintf(szBuf, L"%s failed with error %d: %s", lpszFunction, dw, lpMsgBuf); MessageBoxW(NULL, szBuf, L"Error", MB_OK); LocalFree(lpMsgBuf); ExitProcess(dw); } |
Zitat
Wichtig: GetLastError gibt immer irgendwas zurück. Das muss nicht zwangsläufig ein Fehler sein, der aus dem letzten WinAPI Aufruf stammt. Wenn dieser erfolgreich war, kann der Fehler schon älter sein. Es ist nicht genau definiert, wie eine Funktion mit dem Fehlercode verfährt, wenn sie erfolgreich ist. Referenz: GetLastError - Return Code
Zitat
Ich bin mir auch nicht sicher, ob man die Behandlung der WM_MDICREATE Message nicht auch selbst implementieren muss, damit auch wirklich ein Fenster erzeugt wird... es gibt ja CreateMDIWindow. Oder du hast vergessen, diese Meldung an den Windows Standardhandler DefWindowProc weiterzuleiten..
Werbeanzeige