000
14.11.2006, 17:48 Uhr
xXx
Devil
|
Also folgender Code:
| C++: |
bool rcWindow::_RegisterWindow(HINSTANCE hInstance) { if (hInstance == NULL) return false;
WNDCLASSEX wc; wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)rcApplication::Instance().WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_RCCONFIG)); wc.hIconSm = static_cast<HICON>(LoadImage(wc.hInstance, MAKEINTRESOURCE(IDI_RCCONFIG), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = CreateSolidBrush(RGB(50, 50, 50)); wc.lpszMenuName = NULL; _sntprintf(m_szClassName, 128, _T("rcWindow")); wc.lpszClassName = m_szClassName;
return (RegisterClassEx(&wc) == 0 ? false : true); }
|
Das sollte ja selbsterklärend sein
| C++: |
unsigned long rcWindow::Create(unsigned short x, unsigned short y, unsigned short nWidth, unsigned short nHeight, unsigned long dwStyle, rcWindow* pParentWnd, LPCTSTR lpstWindowCaption) { if (lpstWindowCaption == NULL) return error_invalid_parameter;
HWND hWndParent = NULL;
if (pParentWnd != NULL) pParentWnd->GetSafeHwnd(hWndParent); // GetSafeHwnd(HWND& hWnd) ..
_RegisterWindow(rcApplication::Instance().GetSafeHandle());
m_hWnd = CreateWindowEx(0, m_szClassName, lpstWindowCaption, dwStyle, x, y, nWidth, nHeight, hWndParent, (HMENU)NULL, rcApplication::Instance().GetSafeHandle(), this); // THIS-Pointer übergeben... wird in WM_NCCREATE und WM_CREATE übergeben.
rcApplication::Instance().ErrorMessageBox();
if(m_hWnd == NULL) return error_could_not_create_window;
return error_none; }
|
ErrorMessageBox formatiert die Fehlermeldung die ich mit GetLastError hole ... Nun meldet sie mir aber, das ein ungeültiges Fensterhandle existieren würde... jemand ne Idee woran das liegen soll? bis dahin ist doch da garkein fehler drin?!
Aja ... hmm evt. liegt es auch an der MessageProc... also:
| C++: |
LRESULT CALLBACK rcApplication::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { rcWindow* pWindow = NULL; if (message == WM_NCCREATE) { pWindow = reinterpret_cast<rcWindow*>(((LPCREATESTRUCT)lParam)->lpCreateParams); // Übergebener this-Pointer ... SetWindowLong(hWnd, GWL_USERDATA, reinterpret_cast<LONG>(pWindow)); // Als Userdata setzen ... } else pWindow = reinterpret_cast<rcWindow*>(GetWindowLong(hWnd, GWL_USERDATA)); if (pWindow != NULL) return pWindow->MessageProc(message, wParam, lParam); // Die MessageProc des Windows aufrufen if (rcApplication::Instance().GetWindow() != NULL) // Wenn der WIndow-Pointer net existierte den der Anwendung selbst versuchen zu bekommen return rcApplication::Instance().GetWindow()->MessageProc(message, wParam, lParam); // Wenn möglich dessen MessageProc aufrufen ...
return DefWindowProc(hWnd, message, wParam, lParam); // Notfalls Standardverarbeitung wählen... }
|
Einmal die static die das ganze dann an die einzellnen Windows weiterleitet ... eine der wenigen Möglichkeiten dieses dumme Problem mit den Klassen zu lösen 
| C++: |
LRESULT rcWindow::MessageProc(UINT message, WPARAM wParam, LPARAM lParam) { // Normal noch gucken ob FUnktionen zur Nachrichtenverarbeitung vom Benutzer registriert worden. Sonnst weiter arbeiten. switch (message) { case WM_CREATE: { return 0; }break; case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(m_hWnd, &ps); RECT rcClient; GetClientRect(m_hWnd, &rcClient); LineTo(hDC, rcClient.right, rcClient.bottom); EndPaint(m_hWnd, &ps); } break; case WM_DESTROY: { PostQuitMessage(0); } break; default: return DefWindowProc(m_hWnd, message, wParam, lParam); } return 0; }
|
Hab einfach mal nur so ne Linie zeichnen lassen. Seht ihr hier irgendnen Fehler?  Dieser Post wurde am 14.11.2006 um 18:39 Uhr von xXx editiert. |