/// <summary>
        ///     ウィンドウを作成します。
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns>作成したウィンドウハンドル。</returns>
        private IntPtr CreateWindow(WindowSourceParameters parameters)
        {
            Contract.Requires <ArgumentNullException>(parameters != null);
            Contract.Ensures(Contract.Result <IntPtr>() != IntPtr.Zero);

            var res = RegisterClass();

            var hwnd = CreateWindowEx(
                0,
                (IntPtr)res,
                parameters.WindowName,
                0,
                0, 0, 0, 0,
                HWND_MESSAGE,
                IntPtr.Zero,
                IntPtr.Zero,
                IntPtr.Zero);

            if (hwnd == IntPtr.Zero)
            {
                throw new Win32Exception();
            }

            if (parameters.WindowSourceHook != null)
            {
                AddHook(hwnd, parameters.WindowSourceHook);
            }

            return(hwnd);
        }
        /// <summary>
        ///     <see cref="WindowSource" />クラスの新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="parameters">ウィンドウ作成パラメータ。</param>
        public WindowSource(WindowSourceParameters parameters)
        {
            Contract.Requires <ArgumentNullException>(parameters != null);

            this.Handle = CreateWindow(parameters);
        }