1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/win/wrapped_window_proc.h" 6 7 #include "base/atomicops.h" 8 #include "base/logging.h" 9 #include "base/process/memory.h" 10 11 namespace { 12 13 base::win::WinProcExceptionFilter s_exception_filter = NULL; 14 15 } // namespace. 16 17 namespace base { 18 namespace win { 19 20 WinProcExceptionFilter SetWinProcExceptionFilter( 21 WinProcExceptionFilter filter) { 22 subtle::AtomicWord rv = subtle::NoBarrier_AtomicExchange( 23 reinterpret_cast<subtle::AtomicWord*>(&s_exception_filter), 24 reinterpret_cast<subtle::AtomicWord>(filter)); 25 return reinterpret_cast<WinProcExceptionFilter>(rv); 26 } 27 28 int CallExceptionFilter(EXCEPTION_POINTERS* info) { 29 return s_exception_filter ? s_exception_filter(info) : 30 EXCEPTION_CONTINUE_SEARCH; 31 } 32 33 BASE_EXPORT void InitializeWindowClass( 34 const char16* class_name, 35 WNDPROC window_proc, 36 UINT style, 37 int class_extra, 38 int window_extra, 39 HCURSOR cursor, 40 HBRUSH background, 41 const char16* menu_name, 42 HICON large_icon, 43 HICON small_icon, 44 WNDCLASSEX* class_out) { 45 class_out->cbSize = sizeof(WNDCLASSEX); 46 class_out->style = style; 47 class_out->lpfnWndProc = window_proc; 48 class_out->cbClsExtra = class_extra; 49 class_out->cbWndExtra = window_extra; 50 class_out->hInstance = base::GetModuleFromAddress(window_proc); 51 class_out->hIcon = large_icon; 52 class_out->hCursor = cursor; 53 class_out->hbrBackground = background; 54 class_out->lpszMenuName = menu_name; 55 class_out->lpszClassName = class_name; 56 class_out->hIconSm = small_icon; 57 58 // Check if |window_proc| is valid. 59 DCHECK(class_out->hInstance != NULL); 60 } 61 62 } // namespace win 63 } // namespace base 64