void initialize() {
			if (window_handle_) {
				return;
			}
			if (!(atom_ = ::RegisterClassEx(&window_class_))) {
				KTL_ERROR(
					KTL_ERROR_SECTION,
					SPRIG_KRKR_TJS_W("ウインドウクラスの登録に失敗しました"),
					sprig::krkr::win32_error
					);
				return;
			}
			window_handle_ = ::CreateWindowEx(
				0,												// 拡張ウィンドウスタイル
				reinterpret_cast<LPCTSTR>(MAKELONG(atom_, 0)),	// クラス名
				window_class_.lpszClassName,					// ウィンドウタイトル
				0,												// ウィンドウスタイル
				CW_USEDEFAULT,									// ウィンドウ位置
				0,												// ウィンドウ位置
				CW_USEDEFAULT,									// ウィンドウサイズ
				0,												// ウィンドウサイズ
				HWND_MESSAGE,									// 親ウィンドウ
				0,												// メニュー
				window_class_.hInstance,						// インスタンス
				0												// ウィンドウ作成データのアドレス
				);
			if (!window_handle_) {
				KTL_ERROR(
					KTL_ERROR_SECTION,
					SPRIG_KRKR_TJS_W("ウインドウの作成に失敗しました"),
					sprig::krkr::win32_error
					);
				return;
			}
		}
	//
	//	SUMMARY: 読み込み系メソッド
	//
	KTL_INLINE bool NativeLayeredSplashWindow::loadImages(tTJSString const& storage) {
		sprig::com_ptr<::IStream> in(::TVPCreateIStream(storage, TJS_BS_READ));
		if (!in) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				tTJSString(SPRIG_KRKR_TJS_W("ファイルオープンに失敗しました: ")) + storage,
				sprig::krkr::bad_state
				);
			return false;
		}
		LARGE_INTEGER move;
		move.QuadPart = 0;
		ULARGE_INTEGER new_pos;
		if (FAILED(in->Seek(move, TJS_BS_SEEK_END, &new_pos))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				tTJSString(SPRIG_KRKR_TJS_W("ファイルシークに失敗しました: ")) + storage,
				sprig::krkr::internal_error
				);
			return false;
		}
		size_type file_size = static_cast<size_type>(new_pos.QuadPart);
		if (!file_size) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				tTJSString(SPRIG_KRKR_TJS_W("ファイルが空です: ")) + storage,
				sprig::krkr::bad_state
				);
			return false;
		}
		move.QuadPart = 0;
		if (FAILED(in->Seek(move, TJS_BS_SEEK_SET, &new_pos))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				tTJSString(SPRIG_KRKR_TJS_W("ファイルシークに失敗しました: ")) + storage,
				sprig::krkr::internal_error
				);
			return false;
		}
		std::vector<byte_type> buffer(file_size);
		ULONG io_size = 0;
		if (FAILED(in->Read(&buffer[0], buffer.size(), &io_size))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				tTJSString(SPRIG_KRKR_TJS_W("ファイル読込に失敗しました: ")) + storage,
				sprig::krkr::internal_error
				);
		}
		return impl_->loadImages(&buffer[0], io_size);
	}
Exemple #3
0
	KTL_INLINE void NativeOSVersion::OSVersionInfo::initialize() {
		if (initialized_) {
			return;
		}
		OSVERSIONINFOEX os_version_info;
		os_version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
		if (!::GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&os_version_info))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				SPRIG_KRKR_TJS_W("error in GetVersionEx()"),
				sprig::krkr::internal_error
				);
			return;
		}
		major_version_ = os_version_info.dwMajorVersion;
		minor_version_ = os_version_info.dwMinorVersion;
		build_number_ = os_version_info.dwBuildNumber;
		platform_id_ = os_version_info.dwPlatformId;
		csd_version_ = sprig::str_cast<string_type>(os_version_info.szCSDVersion);
		service_pack_major_ = os_version_info.wServicePackMajor;
		service_pack_minor_ = os_version_info.wServicePackMinor;
		suite_mask_ = os_version_info.wSuiteMask;
		product_type_ = os_version_info.wProductType;
		initialized_ = true;
		return;
	}
	bool NativeStorageStream::readBuffer(binary_type& buffer) {
		if (!stream_) {
			return false;
		}
		int_type current_pos = current();
		if (current_pos < 0) {
			return false;
		}
		int_type total_size = size();
		if (total_size < 0 || current_pos < total_size) {
			return false;
		}
		size_type result_size = total_size - current_pos;
		if (!result_size) {
			buffer.clear();
			return true;
		}
		buffer.resize(result_size);
		ULONG io_size = 0;
		if (FAILED(stream_->Read(&buffer[0], result_size, &io_size))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				SPRIG_KRKR_TJS_W("ファイル読込に失敗しました"),
				sprig::krkr::internal_error
				);
			return false;
		}
		return true;
	}
	//
	//	SUMMARY: シーク系メソッド
	//
	KTL_INLINE NativeStorageStream::int_type NativeStorageStream::seek(int_type offset, flag_type flag) {
		if (!stream_) {
			return -1;
		}
		LARGE_INTEGER move;
		move.QuadPart = offset;
		ULARGE_INTEGER new_pos;
		if (FAILED(stream_->Seek(move, flag, &new_pos))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				SPRIG_KRKR_TJS_W("ファイルシークに失敗しました"),
				sprig::krkr::internal_error
				);
			return -1;
		}
		return static_cast<int_type>(new_pos.QuadPart);
	}
	KTL_INLINE NativeStorageStream::int_type NativeStorageStream::writeBytes(byte_type const* data, size_type size) {
		if (!stream_) {
			return -1;
		}
		if (!size) {
			return size;
		}
		ULONG io_size = 0;
		if (FAILED(stream_->Write(data, size, &io_size))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				SPRIG_KRKR_TJS_W("ファイル書込に失敗しました"),
				sprig::krkr::internal_error
				);
			return io_size;
		}
		return io_size;
	}
	bool NativeStorageStream::readBuffer(binary_type& buffer, size_type size) {
		if (!stream_) {
			return false;
		}
		if (!size) {
			buffer.clear();
			return true;
		}
		buffer.resize(size);
		ULONG io_size = 0;
		if (FAILED(stream_->Read(&buffer[0], size, &io_size))) {
			KTL_ERROR(
				KTL_ERROR_SECTION,
				SPRIG_KRKR_TJS_W("ファイル読込に失敗しました"),
				sprig::krkr::internal_error
				);
			return false;
		}
		return true;
	}