// // framewnd.cpp // // Implementation of CTscFrameWnd // Frame window class // // Copyright(C) Microsoft Corporation 2000 // Author: Nadim Abdo (nadima) // // #include "stdafx.h" #define TRC_GROUP TRC_GROUP_UI #define TRC_FILE "framewnd" #include #include "framewnd.h" CTscFrameWnd::CTscFrameWnd() { _hWnd = NULL; } CTscFrameWnd::~CTscFrameWnd() { } // // Create the window // params: // hInstance - app instance // hWndParent - parent window // szClassName - window class name (will create) // dwStyle - window style // returns: // window handle // HWND CTscFrameWnd::CreateWnd(HINSTANCE hInstance,HWND hwndParent, LPTSTR szClassName, LPTSTR szTitle, DWORD dwStyle, LPRECT lpInitialRect, HICON hIcon) { BOOL rc = FALSE; DC_BEGIN_FN("CreateWnd"); TRC_ASSERT(hInstance, (TB, _T("hInstance is null"))); TRC_ASSERT(szClassName, (TB, _T("szClassName is null"))); TRC_ASSERT(lpInitialRect, (TB, _T("lpInitialRect is null"))); if(!hInstance || !szClassName || !lpInitialRect) { return NULL; } TRC_ASSERT(!_hWnd, (TB,_T("Double create window. Could be leaking!!!"))); _hInstance = hInstance; #ifndef OS_WINCE WNDCLASSEX wndclass; wndclass.cbSize = sizeof (wndclass); #else //OS_WINCE WNDCLASS wndclass; #endif wndclass.style = 0; wndclass.lpfnWndProc = CTscFrameWnd::StaticTscFrameWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = hIcon; wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject(NULL_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szClassName; #ifndef OS_WINCE wndclass.hIconSm = NULL; #endif #ifndef OS_WINCE if ((0 == RegisterClassEx(&wndclass)) && #else if ((0 == RegisterClass(&wndclass)) && #endif (ERROR_CLASS_ALREADY_EXISTS != GetLastError())) { TRC_ERR((TB,_T("RegisterClassEx failed: %d"),GetLastError())); return NULL; } _hWnd = CreateWindow(szClassName, szTitle, dwStyle, 0, 0, lpInitialRect->right - lpInitialRect->left, lpInitialRect->bottom - lpInitialRect->top, hwndParent, NULL, hInstance, this); if(_hWnd) { // put a reference to the current object into the hwnd // so we can access the object from the WndProc SetLastError(0); if(!SetWindowLongPtr(_hWnd, GWLP_USERDATA, (LONG_PTR)this)) { if(GetLastError()) { TRC_ERR((TB,_T("SetWindowLongPtr failed 0x%x"), GetLastError())); return NULL; } } } else { TRC_ERR((TB,_T("CreateWindow failed 0x%x"), GetLastError())); return NULL; } DC_END_FN(); return _hWnd; } LRESULT CALLBACK CTscFrameWnd::StaticTscFrameWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { DC_BEGIN_FN("StaticTscFrameWndProc"); // pull out the pointer to the container object associated with this hwnd CTscFrameWnd *pwnd = (CTscFrameWnd *)GetWindowLongPtr(hwnd, GWLP_USERDATA); if(pwnd) { return pwnd->WndProc( hwnd, uMsg, wParam, lParam); } else { return DefWindowProc (hwnd, uMsg, wParam, lParam); } DC_END_FN(); }