diff options
author | alexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-09 20:38:18 +0000 |
---|---|---|
committer | alexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-09 20:38:18 +0000 |
commit | 7a66b99fbf5cd967ba12e643fc0072fc20514990 (patch) | |
tree | d4bec32782951f4c63a4aca99b655222017c6002 /base/win | |
parent | decd4114476cb68ef734dd91cbea6d56c404bee5 (diff) | |
download | chromium_src-7a66b99fbf5cd967ba12e643fc0072fc20514990.zip chromium_src-7a66b99fbf5cd967ba12e643fc0072fc20514990.tar.gz chromium_src-7a66b99fbf5cd967ba12e643fc0072fc20514990.tar.bz2 |
Added base::win::InitializeWindowClass() wrapper to make sure that window classes are properly associated with the modules containing their window procedures.
TEST=win,win_rel
Review URL: https://chromiumcodereview.appspot.com/10315012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136116 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/win')
-rw-r--r-- | base/win/wrapped_window_proc.cc | 33 | ||||
-rw-r--r-- | base/win/wrapped_window_proc.h | 19 |
2 files changed, 50 insertions, 2 deletions
diff --git a/base/win/wrapped_window_proc.cc b/base/win/wrapped_window_proc.cc index c94c5ae..04e59c5 100644 --- a/base/win/wrapped_window_proc.cc +++ b/base/win/wrapped_window_proc.cc @@ -1,10 +1,12 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/win/wrapped_window_proc.h" #include "base/atomicops.h" +#include "base/logging.h" +#include "base/process_util.h" namespace { @@ -28,5 +30,34 @@ int CallExceptionFilter(EXCEPTION_POINTERS* info) { EXCEPTION_CONTINUE_SEARCH; } +BASE_EXPORT void InitializeWindowClass( + const char16* class_name, + WNDPROC window_proc, + UINT style, + int class_extra, + int window_extra, + HCURSOR cursor, + HBRUSH background, + const char16* menu_name, + HICON large_icon, + HICON small_icon, + WNDCLASSEX* class_out) { + class_out->cbSize = sizeof(WNDCLASSEX); + class_out->style = style; + class_out->lpfnWndProc = window_proc; + class_out->cbClsExtra = class_extra; + class_out->cbWndExtra = window_extra; + class_out->hInstance = base::GetModuleFromAddress(window_proc); + class_out->hIcon = large_icon; + class_out->hCursor = cursor; + class_out->hbrBackground = background; + class_out->lpszMenuName = menu_name; + class_out->lpszClassName = class_name; + class_out->hIconSm = small_icon; + + // Check if |window_proc| is valid. + DCHECK(class_out->hInstance != NULL); +} + } // namespace win } // namespace base diff --git a/base/win/wrapped_window_proc.h b/base/win/wrapped_window_proc.h index c9916504..6d887ae 100644 --- a/base/win/wrapped_window_proc.h +++ b/base/win/wrapped_window_proc.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -14,6 +14,7 @@ #include <windows.h> #include "base/base_export.h" +#include "base/string16.h" namespace base { namespace win { @@ -34,6 +35,22 @@ BASE_EXPORT WinProcExceptionFilter SetWinProcExceptionFilter( // Calls the registered exception filter. BASE_EXPORT int CallExceptionFilter(EXCEPTION_POINTERS* info); +// Initializes the WNDCLASSEX structure |*class_out| to be passed to +// RegisterClassEx() making sure that it is associated with the module +// containing the window procedure. +BASE_EXPORT void InitializeWindowClass( + const char16* class_name, + WNDPROC window_proc, + UINT style, + int class_extra, + int window_extra, + HCURSOR cursor, + HBRUSH background, + const char16* menu_name, + HICON large_icon, + HICON small_icon, + WNDCLASSEX* class_out); + // Wrapper that supplies a standard exception frame for the provided WindowProc. // The normal usage is something like this: // |