示例#1
0
//--------------------------------------------------------------------------
void VeWindows::_SetWindowTitle(Window* pkWindow)
{
	WindowData* pkData = (WindowData*)(VeRefObject*)pkWindow->m_spDriverData;
	VeUInt32 u32Len = MultiByteToWideChar(CP_UTF8, 0, pkWindow->m_kTitle, -1, NULL, 0);
	VeChar16* wszGBK = VeAlloc(VeChar16, u32Len + 1);
	VeZeroMemory(wszGBK, sizeof(VeChar16) * (u32Len + 1));
	MultiByteToWideChar(CP_UTF8, 0, pkWindow->m_kTitle, -1, wszGBK, u32Len);
	u32Len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
	VeChar8* szGBK = VeAlloc(VeChar8, u32Len + 1);
	VeZeroMemory(szGBK, sizeof(VeChar8) * (u32Len + 1));
	WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, u32Len, NULL, NULL);
	SetWindowText(pkData->m_hWnd, szGBK);
	VeFree(wszGBK);
	VeFree(szGBK);
}
示例#2
0
//--------------------------------------------------------------------------
VeOMBlendStateTick::VeOMBlendStateTick(const VeChar8* pcName)
	: VeRenderTick(VeRenderTick::OM_BLEND_STATE)
	, m_u32SampleMask(0xffffffff)
{
	VeZeroMemory(m_af32Factor, sizeof(m_af32Factor));
	g_pRenderer->GetRenderObject(pcName, m_spBlendState);
}
示例#3
0
//--------------------------------------------------------------------------
void VeStringA_S::UpdateGBKToValueData()
{
	if(m_kGBKData.Length())
	{
		VeUInt32 u32Len = MultiByteToWideChar(CP_ACP, 0, m_kGBKData, -1, NULL, 0);
		VeChar16* wszGBK = VeAlloc(VeChar16, u32Len + 1);
		VeZeroMemory(wszGBK, sizeof(VeChar16) * (u32Len + 1));
		MultiByteToWideChar(CP_ACP, 0, m_kGBKData, -1, wszGBK, u32Len);
		u32Len = WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, NULL, 0, NULL, NULL);
		VeChar8* szUTF8 = VeAlloc(VeChar8, u32Len + 1);
		VeZeroMemory(szUTF8, sizeof(VeChar8) * (u32Len + 1));
		WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, szUTF8, u32Len, NULL, NULL);
		m_kValue = szUTF8;
		VeFree(wszGBK);
		VeFree(szUTF8);
	}
	else
	{
		m_kValue = "";
	}
}
示例#4
0
//--------------------------------------------------------------------------
VeSurfacePtr VeSurface::CreateRGBSurface(VeUInt32 u32Flags,
	VeInt32 i32Width, VeInt32 i32Height, VeInt32 i32Depth,
	VeUInt32 u32Rmask, VeUInt32 u32Gmask, VeUInt32 u32Bmask,
	VeUInt32 u32Amask) noexcept
{
	VeUInt32 u32Format = VeMasksToPixelFormatEnum(i32Depth, u32Rmask,
		u32Gmask, u32Bmask, u32Amask);
	if (u32Format == VE_PIXELFORMAT_UNKNOWN) return nullptr;

	VeSurfacePtr spSurface = VE_NEW VeSurface();
	VE_ASSERT(spSurface);
	spSurface->m_spFormat = VePixelFormat::Create(u32Format);
	if (!spSurface->m_spFormat) return nullptr;
	
	spSurface->m_i32Width = i32Width;
	spSurface->m_i32Height = i32Height;
	spSurface->m_i32Pitch = spSurface->CalculatePitch();

	if (VE_ISPIXELFORMAT_INDEXED(spSurface->m_spFormat->m_u32Format))
	{
		VePalettePtr spPattle = VE_NEW VePalette((1 << spSurface->m_spFormat->m_u8BitsPerPixel));
		VE_ASSERT(spPattle);
		if (spPattle->m_kColors.size() == 2)
		{
			spPattle->m_kColors[0].r() = 0xFF;
			spPattle->m_kColors[0].g() = 0xFF;
			spPattle->m_kColors[0].b() = 0xFF;
			spPattle->m_kColors[1].r() = 0x00;
			spPattle->m_kColors[1].g() = 0x00;
			spPattle->m_kColors[1].b() = 0x00;
		}
		spSurface->SetPalette(spPattle);
	}

	if (spSurface->m_i32Width && spSurface->m_i32Height)
	{
		VeSizeT stSize = spSurface->m_i32Height * spSurface->m_i32Pitch;
		spSurface->m_spPixels = VE_NEW VeBlob(stSize);
		VeZeroMemory(*spSurface->m_spPixels, stSize);
	}

	return spSurface;
}
示例#5
0
//--------------------------------------------------------------------------
bool WindowsMouse::_CreateCursor(VeCursor::Data* pkCur,
                                 const VeSurfacePtr& spSurface,
                                 VeInt32 i32HotX, VeInt32 i32HotY) noexcept
{
    VE_ASSERT(spSurface && pkCur);
    const VeSizeT pad = (sizeof(VeSizeT) * 8);
    HICON hicon;
    HDC hdc;
    BITMAPV4HEADER bmh;
    LPVOID pixels;
    LPVOID maskbits;
    size_t maskbitslen;
    ICONINFO ii;

    VeInt32 w = spSurface->GetWidth();
    VeInt32 h = spSurface->GetHeight();

    VeZeroMemory(&bmh, sizeof(bmh));
    bmh.bV4Size = sizeof(bmh);
    bmh.bV4Width = w;
    bmh.bV4Height = -h;
    bmh.bV4Planes = 1;
    bmh.bV4BitCount = 32;
    bmh.bV4V4Compression = BI_BITFIELDS;
    bmh.bV4AlphaMask = 0xFF000000;
    bmh.bV4RedMask = 0x00FF0000;
    bmh.bV4GreenMask = 0x0000FF00;
    bmh.bV4BlueMask = 0x000000FF;

    maskbitslen = ((w + (pad - (w % pad))) / 8) * h;
    maskbits = VeStackAlloc(VeUInt8, maskbitslen);

    VeMemorySet(maskbits, 0xFF, maskbitslen);

    hdc = GetDC(nullptr);
    VeZeroMemory(&ii, sizeof(ii));
    ii.fIcon = FALSE;
    ii.xHotspot = (DWORD)i32HotX;
    ii.yHotspot = (DWORD)i32HotY;
    ii.hbmColor = CreateDIBSection(hdc, (BITMAPINFO*)&bmh, DIB_RGB_COLORS, &pixels, nullptr, 0);
    ii.hbmMask = CreateBitmap(w, h, 1, 1, maskbits);
    ReleaseDC(nullptr, hdc);
    VeStackFree(maskbits);

    VE_ASSERT(spSurface->GetFormat()->m_u32Format == VE_PIXELFORMAT_ARGB8888);
    VE_ASSERT(spSurface->GetPitch() == w * 4);
    VeMemoryCopy(pixels, spSurface->GetBuffer(), h * spSurface->GetPitch());

    hicon = CreateIconIndirect(&ii);

    DeleteObject(ii.hbmColor);
    DeleteObject(ii.hbmMask);

    pkCur->m_pvDriverdata = hicon;

    if (!hicon)
    {
        return false;
    }

    return true;
}
示例#6
0
//--------------------------------------------------------------------------
void Server::Start()
{
	VeXMLElement* pkServer = m_kConfig.RootElement()->FirstChildElement("Server");
	const VeChar8* pcVersion = pkServer->FirstChildElement("Version")->GetText();
	{
		VeZeroMemory(&m_kVersion, sizeof(Version));
		VeChar8 acBuffer[64];
		VeStrcpy(acBuffer, 64, pcVersion);
		VeChar8* pcContext;
		const VeChar8* pcTemp = VeStrtok(acBuffer, ".", &pcContext);
		VeUInt32 i(0);
		while(pcTemp && i < 4)
		{
			m_kVersion.m_au8Version[i] = VeAtoi(pcTemp);
			pcTemp = VeStrtok(NULL, ".", &pcContext);
			++i;
		}
	}
	VeUInt16 u16Port;
	VE_ASSERT_EQ(VeStringA(pkServer->FirstChildElement("ServerPort")->GetText()).To(u16Port), true);
	VeUInt16 u16MaxConnections;
	VE_ASSERT_EQ(VeStringA(pkServer->FirstChildElement("MaxConnections")->GetText()).To(u16MaxConnections), true);
	VeUInt32 u32TimeOut;
	VE_ASSERT_EQ(VeStringA(pkServer->FirstChildElement("TimeOut")->GetText()).To(u32TimeOut), true);
	const VeChar8* pcPassword = pkServer->FirstChildElement("Password")->GetText();

	m_pkPeer->SetIncomingPassword(pcPassword, (VeInt32)VeStrlen(pcPassword));
	m_pkPeer->SetTimeoutTime(u32TimeOut, UNASSIGNED_SYSTEM_ADDRESS);

	SocketDescriptor akSocketDesc[2];
	akSocketDesc[0].port = u16Port;
	akSocketDesc[0].socketFamily = AF_INET;
	akSocketDesc[1].port = u16Port;
	akSocketDesc[1].socketFamily = AF_INET6;

	bool bRes = m_pkPeer->Startup(u16MaxConnections, akSocketDesc, 2, 30) == VENET_STARTED;
	m_pkPeer->SetMaximumIncomingConnections(u16MaxConnections);

	if(bRes)
	{
		printf("%s Server Started, Waiting For Connections.\n", m_kName);
	}	
	else
	{
		bRes = m_pkPeer->Startup(u16MaxConnections, akSocketDesc, 1, 30) == VENET_STARTED;
		if(!bRes)
		{
			VeChar8 acBuffer[256];
			VeSprintf(acBuffer, 256, "%s Server failed to start. Terminating.", m_kName);
			puts(acBuffer);
			exit(1);
		}
		printf("%s Server Started, Waiting For Connections.\n", m_kName);
	}

	m_pkPeer->SetOccasionalPing(true);
	m_pkPeer->SetUnreliableTimeout(1000);

	DataStructures::List< VENetSmartPtr<VENetSocket> > kSockets;
	m_pkPeer->GetSockets(kSockets);
	for(VeUInt32 i(0); i < kSockets.Size(); ++i)
	{
		printf("Ports Used By :%i. %i\n", i+1, kSockets[i]->boundAddress.ToString(true));
	}
	for(VeUInt32 i(0); i < m_pkPeer->GetNumberOfAddresses(); ++i)
	{
		printf("\n本机可提供服务的IP :\n%i. %s\n", i+1, m_pkPeer->GetLocalIP(i));
	}
	printf("%s Server GUID is %s\n", m_kName, m_pkPeer->GetGuidFromSystemAddress(UNASSIGNED_SYSTEM_ADDRESS).ToString());
	
	{
		VeXMLElement* pkDBLink = m_kConfig.RootElement()->FirstChildElement("DBLink");
		VeStringA kAccount = pkDBLink->FirstChildElement("Account")->GetText();
		VeStringA kPassword = pkDBLink->FirstChildElement("Password")->GetText();
		VeStringA kDBSource = pkDBLink->FirstChildElement("DBSource")->GetText();
        printf("\nDBSource :%s\n", pkDBLink->FirstChildElement("DBSource")->GetText());
		m_kDatabase = VE_NEW DBBusiness(kAccount,kPassword,kDBSource);
	}
	
	LoadProperties();
	m_u64ServerStartTime = m_u64ServerTime;
	AttachByDelay(TIMER(_SyncToDatabase), SAVE_DB_DELAY);
	OnStart();
}
示例#7
0
//--------------------------------------------------------------------------
VE_BOOL VeWindows::GetDisplayMode(LPCSTR deviceName, DWORD index,
	VeDevice::DisplayMode* pkMode)
{
	DisplayModeData* pkData;
	DEVMODEA kDevMode;
	HDC hHdc;

	kDevMode.dmSize = sizeof(kDevMode);
	kDevMode.dmDriverExtra = 0;
	if(!EnumDisplaySettings(deviceName, index, &kDevMode)) return VE_FALSE;

	pkData = VE_NEW DisplayModeData;
	if (!pkData) return VE_FALSE;

	pkData->m_kDeviceMode = kDevMode;
	pkData->m_kDeviceMode.dmFields =
		(DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY |
		DM_DISPLAYFLAGS);
	pkData->m_f32ScaleX = 1.0f;
	pkData->m_f32ScaleY = 1.0f;

	pkMode->m_u32Format = VeRenderer::FMT_UNKNOWN;
	pkMode->w = kDevMode.dmPelsWidth;
	pkMode->h = kDevMode.dmPelsHeight;
	pkMode->m_i32RefreshRate = kDevMode.dmDisplayFrequency;
	pkMode->m_spDriverData = pkData;

	if (index == ENUM_CURRENT_SETTINGS
		&& (hHdc = CreateDC(deviceName, NULL, NULL, NULL)) != NULL)
	{
			char bmi_data[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)];
			LPBITMAPINFO bmi;
			HBITMAP hbm;
			int logical_width = GetDeviceCaps( hHdc, HORZRES );
			int logical_height = GetDeviceCaps( hHdc, VERTRES );

			pkData->m_f32ScaleX = (float)logical_width / kDevMode.dmPelsWidth;
			pkData->m_f32ScaleY = (float)logical_height / kDevMode.dmPelsHeight;
			pkMode->w = logical_width;
			pkMode->h = logical_height;

			VeZeroMemory(bmi_data, sizeof(bmi_data));
			bmi = (LPBITMAPINFO) bmi_data;
			bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

			hbm = CreateCompatibleBitmap(hHdc, 1, 1);
			GetDIBits(hHdc, hbm, 0, 1, NULL, bmi, DIB_RGB_COLORS);
			GetDIBits(hHdc, hbm, 0, 1, NULL, bmi, DIB_RGB_COLORS);
			DeleteObject(hbm);
			DeleteDC(hHdc);
			if (bmi->bmiHeader.biCompression == BI_BITFIELDS) {
				switch (*(VeUInt32 *) bmi->bmiColors) {
				case 0x00FF0000:
					pkMode->m_u32Format = VE_PIXELFORMAT_RGB888;
					break;
				case 0x000000FF:
					pkMode->m_u32Format = VE_PIXELFORMAT_BGR888;
					break;
				case 0xF800:
					pkMode->m_u32Format = VE_PIXELFORMAT_RGB565;
					break;
				case 0x7C00:
					pkMode->m_u32Format = VE_PIXELFORMAT_RGB555;
					break;
				}
			} else if (bmi->bmiHeader.biBitCount == 8) {
				pkMode->m_u32Format = VE_PIXELFORMAT_INDEX8;
			} else if (bmi->bmiHeader.biBitCount == 4) {
				pkMode->m_u32Format = VE_PIXELFORMAT_INDEX4LSB;
			}
	}
	else
	{
		if ((kDevMode.dmFields & DM_BITSPERPEL) == DM_BITSPERPEL) {
			switch (kDevMode.dmBitsPerPel) {
			case 32:
				pkMode->m_u32Format = VE_PIXELFORMAT_RGB888;
				break;
			case 24:
				pkMode->m_u32Format = VE_PIXELFORMAT_RGB24;
				break;
			case 16:
				pkMode->m_u32Format = VE_PIXELFORMAT_RGB565;
				break;
			case 15:
				pkMode->m_u32Format = VE_PIXELFORMAT_RGB555;
				break;
			case 8:
				pkMode->m_u32Format = VE_PIXELFORMAT_INDEX8;
				break;
			case 4:
				pkMode->m_u32Format = VE_PIXELFORMAT_INDEX4LSB;
				break;
			}
		}
	}
	return VE_TRUE;
}
示例#8
0
//--------------------------------------------------------------------------
static bool GetDisplayMode(LPCSTR deviceName, DWORD index,
	VeDisplayMode* mode) noexcept
{
	VeDisplayModeData* data;
	DEVMODEA devmode;
	HDC hdc;

	devmode.dmSize = sizeof(devmode);
	devmode.dmDriverExtra = 0;
	if (!EnumDisplaySettingsA(deviceName, index, &devmode))
	{
		return false;
	}

	data = VE_NEW VeDisplayModeData;
	VE_ASSERT(data);
	data->DeviceMode = devmode;
	data->DeviceMode.dmFields =
		(DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY |
			DM_DISPLAYFLAGS);
	data->ScaleX = 1.0f;
	data->ScaleY = 1.0f;

	mode->m_u32Format = VE_PIXELFORMAT_UNKNOWN;
	mode->m_i32Width = devmode.dmPelsWidth;
	mode->m_i32Height = devmode.dmPelsHeight;
	mode->m_i32RefreshRate = devmode.dmDisplayFrequency;
	mode->m_spDriverData = data;

	if (index == ENUM_CURRENT_SETTINGS
		&& (hdc = CreateDCA(deviceName, nullptr, nullptr, nullptr)) != nullptr)
	{
		char bmi_data[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)];
		LPBITMAPINFO bmi;
		HBITMAP hbm;
		int logical_width = GetDeviceCaps(hdc, HORZRES);
		int logical_height = GetDeviceCaps(hdc, VERTRES);

		data->ScaleX = (float)logical_width / devmode.dmPelsWidth;
		data->ScaleY = (float)logical_height / devmode.dmPelsHeight;
		mode->m_i32Width = logical_width;
		mode->m_i32Height = logical_height;

		VeZeroMemory(bmi_data, sizeof(bmi_data));
		bmi = (LPBITMAPINFO)bmi_data;
		bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

		hbm = CreateCompatibleBitmap(hdc, 1, 1);
		GetDIBits(hdc, hbm, 0, 1, nullptr, bmi, DIB_RGB_COLORS);
		GetDIBits(hdc, hbm, 0, 1, nullptr, bmi, DIB_RGB_COLORS);
		DeleteObject(hbm);
		DeleteDC(hdc);
		if (bmi->bmiHeader.biCompression == BI_BITFIELDS)
		{
			switch (*(VeUInt32 *)bmi->bmiColors)
			{
			case 0x00FF0000:
				mode->m_u32Format = VE_PIXELFORMAT_RGB888;
				break;
			case 0x000000FF:
				mode->m_u32Format = VE_PIXELFORMAT_BGR888;
				break;
			case 0xF800:
				mode->m_u32Format = VE_PIXELFORMAT_RGB565;
				break;
			case 0x7C00:
				mode->m_u32Format = VE_PIXELFORMAT_RGB555;
				break;
			}
		}
		else if (bmi->bmiHeader.biBitCount == 8)
		{
			mode->m_u32Format = VE_PIXELFORMAT_INDEX8;
		}
		else if (bmi->bmiHeader.biBitCount == 4)
		{
			mode->m_u32Format = VE_PIXELFORMAT_INDEX4LSB;
		}
	}
	else
	{
		if ((devmode.dmFields & DM_BITSPERPEL) == DM_BITSPERPEL)
		{
			switch (devmode.dmBitsPerPel)
			{
			case 32:
				mode->m_u32Format = VE_PIXELFORMAT_RGB888;
				break;
			case 24:
				mode->m_u32Format = VE_PIXELFORMAT_RGB24;
				break;
			case 16:
				mode->m_u32Format = VE_PIXELFORMAT_RGB565;
				break;
			case 15:
				mode->m_u32Format = VE_PIXELFORMAT_RGB555;
				break;
			case 8:
				mode->m_u32Format = VE_PIXELFORMAT_INDEX8;
				break;
			case 4:
				mode->m_u32Format = VE_PIXELFORMAT_INDEX4LSB;
				break;
			}
		}
	}
	return true;
}