Beispiel #1
0
void DestroyObjects(DDContext *dd)
{
	RestoreWindow(dd);

	/*remove all surfaces*/
	while (ChainGetCount(dd->surfaces)) {
		DDSurface *pS = ChainGetEntry(dd->surfaces, 0);
		ChainDeleteEntry(dd->surfaces, 0);
		SAFE_DD_RELEASE(pS->pSurface);
		free(pS);
	}

	SAFE_DD_RELEASE(dd->pPrimary);
	SAFE_DD_RELEASE(dd->pBack);
	SAFE_DD_RELEASE(dd->pDD);
	dd->ddraw_init = 0;

	/*delete openGL context*/
	if (dd->gl_HRC) {
		wglDeleteContext(dd->gl_HRC);
		dd->gl_HRC = NULL;
	}
	if (dd->gl_HDC) {
		ReleaseDC(dd->hWnd, dd->gl_HDC);
		dd->gl_HDC = NULL;
	}
}
Beispiel #2
0
//鼠标消息
void CGameFrame::OnLButtonDblClk(UINT nFlags, CPoint Point)
{
	__super::OnLButtonDblClk(nFlags,Point);

	//状态判断
	if (Point.y>m_ImageInfoFrame.nTBorder-FRAME_EXALTATION) return;

	//控制窗口
	if (m_bMaxShow==true) RestoreWindow();
	else MaxSizeWindow();

	return;
}
//鼠标消息
VOID CGameFrameWnd::OnLButtonDblClk(UINT nFlags, CPoint Point)
{
	__super::OnLButtonDblClk(nFlags,Point);

	//状态判断
	if (Point.y>CAPTION_SIZE) return;

	//窗口控制
	if (m_bMaxShow==true)
	{
		RestoreWindow();
	}
	else
	{
		MaxSizeWindow();
	}
	
	return;
}
Beispiel #4
0
//鼠标左键事件
bool CSkinWndObject::OnLMouseUpEvent(CPoint ClientPoint)
{
	//按钮搜索
	if (m_cbNowDownButton!=255)
	{
		ReleaseCapture();
		if ((m_rcButton[m_cbNowDownButton].PtInRect(ClientPoint))
			&&(!(m_cbButtonState[m_cbNowDownButton]&BUT_DISABLE)))
		{
			switch (m_cbNowDownButton)
			{
			case BST_CLOSE:		//关闭按钮
				{
					m_cbNowDownButton=255;
					m_pWndHook->PostMessage(WM_CLOSE,0,0);
					return true;
				}
			case BST_MAX:		//还原按钮
				{
					m_cbNowDownButton=255;
					if (m_bMaxSize==true) RestoreWindow();
					else MaxSizeWindow();
					return true;
				}
			case BST_MIN:		//最小化按钮
				{
					m_cbNowDownButton=255;
					m_pWndHook->ShowWindow(SW_MINIMIZE);
					return true;
				}
			}
		}

		//默认操作
		m_cbNowDownButton=255;
		DrawSkinView(NULL);
	}

	return true;
}
Beispiel #5
0
//鼠标左键事件
bool CSkinWndObject::OnLMouseDoubleEvent(CPoint ClientPoint)
{
	//判断按下
	if (m_cbNowDownButton!=255) return false;	

	//按钮搜索
	for (int i=0;i<3;i++)
	{
		if ((m_cbButtonState[i]&BUT_EXIST)&&(m_rcButton[i].PtInRect(ClientPoint)))
			return true;
	}

	//最大化窗口
	if ((ClientPoint.y<GetYExcursionPos())&&(m_cbButtonState[BST_MAX]&BUT_EXIST)&&
		(!(m_cbButtonState[BST_MAX]&BUT_DISABLE)))
	{
		if (m_bMaxSize==true) RestoreWindow();
		else MaxSizeWindow();
	}
	
	return true;
}
Beispiel #6
0
BOOL CGameClientDlg::OnInitDialog()
{
	__super::OnInitDialog();
	
	//SetWindowPos(NULL,200,50,1024,768,SWP_NOZORDER);
	ModifyStyle(WS_THICKFRAME, CS_VREDRAW| CS_HREDRAW|DS_MODALFRAME|DS_CENTER, 0);
	CenterWindow();
	RestoreWindow();

	CRect rtWindow;
	GetWindowRect(&rtWindow);
	ScreenToClient(&rtWindow);
	rtMax.left = rtWindow.right-48;
	rtMax.right = rtMax.left+22;
	rtMax.top = rtWindow.top+2;
	rtMax.bottom = rtMax.top+17;
	//TCHAR str[100];
	//sprintf(str,"%d,%d,%d,%d,\n%d,%d,%d,%d",rtMax.left,rtMax.right,rtMax.top,rtMax.bottom,rtWindow.left,rtWindow.right,rtWindow.top,rtWindow.bottom);
	//MessageBox(str);

	return TRUE;
}
Beispiel #7
0
	void D2DWnd::Init()
	{
		YString msc_fontName = _T("Verdana");
		static const FLOAT msc_fontSize = 50;
		Button *pButton(dynamic_cast<Button*>(m_pControlManger->FindControl(_T("closebtn"))));
		assert(pButton && "pButton not find");
		pButton->SetClickEvent([&](){
			Close();
		});
		pButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("minbtn")));
		assert(pButton && "pButton not find");
		pButton->SetClickEvent([&](){
			MinWindow();
		});
		pButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("maxbtn")));
		assert(pButton && "pButton not find");
		pButton->SetClickEvent([&](){
			MaxWindow();
			Button* pButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("maxbtn")));
			pButton->SetVisible(false);
			CountRefPtr<Button> RestoreButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("restorebtn")));	
			assert(RestoreButton && "restore button can't find");
			RestoreButton->SetVisible(true);
		});
		pButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("restorebtn")));
		assert(pButton && "pButton not find");
		pButton->SetClickEvent([&](){
			RestoreWindow();
			Button *pButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("restorebtn")));
			pButton->SetVisible(false);
			CountRefPtr<Button> MaxButton = dynamic_cast<Button*>(m_pControlManger->FindControl(_T("maxbtn")));	
			assert(MaxButton && "restore button can't find");
			MaxButton->SetVisible(true);
		});
        SetIcon(IDI_BLACKCAT);
		HRESULT hr = S_OK;
	}
//命令函数
BOOL CGameFrameWnd::OnCommand(WPARAM wParam, LPARAM lParam)
{
	//变量定义
	UINT nCommandID=LOWORD(wParam);

	//功能按钮
	switch (nCommandID)
	{
	case IDC_MIN:				//最小按钮
		{
			ShowWindow(SW_MINIMIZE);
			return TRUE;
		}
	case IDC_MAX:				//最大按钮
		{
			//窗口控制
			if (m_bMaxShow==true)
			{
				RestoreWindow();
			}
			else
			{
				MaxSizeWindow();
			}

			//更新界面
			RedrawWindow(NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_ERASENOW|RDW_UPDATENOW);

			return TRUE;
		}
	case IDC_CLOSE:				//关闭按钮
		{
			//获取用户
			ASSERT(m_pIClientKernel!=NULL);
			IClientUserItem * pIClientUserItem=m_pIClientKernel->GetMeUserItem();

			//强退提示
			if ((pIClientUserItem!=NULL)&&(pIClientUserItem->GetUserStatus()==US_PLAYING))
			{
				//提示消息
				CInformation Information(this);
				if (Information.ShowMessageBox(TEXT("您正在游戏中,强行退出将被扣分,确实要强退吗?"),MB_ICONQUESTION|MB_YESNO,0)!=IDYES)
				{
					return TRUE;
				}
			}
			
			//投递关闭
			PostMessage(WM_CLOSE,0,0);

			return TRUE;
		}
	case IDC_OPTION:		//选项按钮
		{
			//显示配置
			CDlgGameOption DlgGameOption;
			if (DlgGameOption.CreateGameOption(NULL,0)==true)
			{
				return true;
			}
			return true;
		}
	case IDC_MUTE:
		{
			//定义变量
			CGlobalUnits *pGlobalUnits=CGlobalUnits::GetInstance();
			pGlobalUnits->m_bMuteStatuts=!pGlobalUnits->m_bMuteStatuts;

			//设置按钮
			HINSTANCE hInstance=GetModuleHandle(GAME_FRAME_DLL_NAME);
			m_btMuteContrl.SetButtonImage((pGlobalUnits->m_bMuteStatuts==false)?IDB_BT_MUTE:IDB_BT_SLIENT,hInstance,true,false);

			//状态处理
			if(pGlobalUnits->m_bMuteStatuts)
			{
				pGlobalUnits->StopSound();
			}

			//通知游戏
			if(m_pIClientKernel)
			{
				m_pIClientKernel->OnGameOptionChange();
			}

			return true;
		}
	case IDC_RULE:
		{
			try
			{
				//创建对象
				if (m_pDlgGameRule==NULL) m_pDlgGameRule=new CDlgGameRule;

				//创建窗口
				if (m_pDlgGameRule->m_hWnd==NULL)
				{
					AfxSetResourceHandle(GetModuleHandle(GAME_FRAME_DLL_NAME));
					m_pDlgGameRule->Create(IDD_GAME_RULE,GetDesktopWindow());
					AfxSetResourceHandle(GetModuleHandle(NULL));
				}

				//显示窗口
				m_pDlgGameRule->ShowWindow(SW_RESTORE);
				m_pDlgGameRule->SetForegroundWindow();

				return true;
			}
			catch (...)
			{ 
				ASSERT(FALSE); 
				return false; 
			}

			return true;
		}
	case IDC_CONTROL:		//控制按钮
		{
			//设置变量
			m_bShowControl = !m_bShowControl;

			//更新按钮
			HINSTANCE hInstance=GetModuleHandle(GAME_FRAME_DLL_NAME);
			m_btControl.SetButtonImage(IDB_BT_CONTROL_BACK,(m_bShowControl==false)?TEXT("BT_GAME_LIST_SHOW"):TEXT("BT_GAME_LIST_HIDE"),hInstance,true,false);

			//调整界面
			CRect rcClient;
			GetClientRect(&rcClient);
			RectifyControl(rcClient.Width(),rcClient.Height());

			return true;
		}
	}

	return __super::OnCommand(wParam,lParam);
}
Beispiel #9
0
BOOL CMyFrameWnd::OnCommand(WPARAM wParam, LPARAM lParam)
{
	//变量定义
	UINT nCommandID=LOWORD(wParam);

	//功能按钮
	switch (nCommandID)
	{
	case IDC_MIN:				//最小按钮
		{
			ShowWindow(SW_MINIMIZE);
			return TRUE;
		}
	case IDC_MAX:				//最大按钮
		{
			//窗口控制
			if (m_bMaxShow==true)
			{
				RestoreWindow();
			}
			else
			{
				MaxSizeWindow();
			}

			//更新界面
			RedrawWindow(NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_ERASENOW|RDW_UPDATENOW);

			return TRUE;
		}
	case IDC_CLOSE:				//关闭按钮
		{
			//PostMessage(WM_CLOSE,0,0);
			return TRUE;
		}
	case IDC_SKIN:				//界面控制
		{
			//创建窗口
// 			if (m_DlgSkinControl.m_hWnd==NULL)
// 			{
// 				m_DlgSkinControl.Create(IDD_SKIN_CONTROL,this);
// 			}
// 
// 			//获取位置
// 			CRect rcButton;
// 			CRect rcControl;
// 			m_btSkin.GetWindowRect(&rcButton);
// 			m_DlgSkinControl.GetWindowRect(&rcControl);
// 
// 			//显示窗口
// 			UINT uFlags=SWP_NOZORDER|SWP_NOSIZE|SWP_SHOWWINDOW;
// 			m_DlgSkinControl.SetWindowPos(NULL,rcButton.right-rcControl.Width(),rcButton.bottom,0,0,uFlags);

			return TRUE;
		}
// 	case IDC_CONTROL:			//控制按钮
// 		{
// 			//控制列表
// 			ControlServerList(ServerListControl_Turn,true);
// 
// 			return TRUE;
// 		}
// 	case IDC_LOCK_LIST:			//锁定列表
// 		{
// 			//设置变量
// 			m_bLockGameList=!m_bLockGameList;
// 
// 			//设置按钮
// 			HINSTANCE hInstance=AfxGetInstanceHandle();
// 			m_btLockList.SetButtonImage(IDB_BK_LIST,(m_bLockGameList==true)?TEXT("BT_UNLOCK_LIST"):TEXT("BT_LOCK_LIST"),hInstance,true,false);
// 
// 			return TRUE;
// 		}
// 	case IDC_NAVIGATION+2:
// 		{
// 			//变量定义
// 			bool bGoldServer=false;
// 			CServerViewItem * pServerViewGold=NULL;
// 
// 			//查找房间
// 			for (INT_PTR i=0;i<m_ServerViewItemArray.GetCount();i++)
// 			{
// 				//获取房间
// 				ASSERT(m_ServerViewItemArray[i]!=NULL);
// 				CServerViewItem * pServerViewItem=m_ServerViewItemArray[i];
// 
// 				//房间类型
// 				WORD wServerType=pServerViewItem->GetServerType();
// 				enServiceStatus ServiceStatus=pServerViewItem->GetServiceStatus();
// 
// 				//房间判断
// 				if (((wServerType&GAME_GENRE_GOLD)/*||(wServerType&GAME_GENRE_MATCH)*/)&&(ServiceStatus==ServiceStatus_ServiceIng))
// 				{
// 					//设置变量
// 					bGoldServer=true;
// 					pServerViewGold=pServerViewItem;
// 
// 					break;
// 				}
// 			}
// 
// 			//设置资源
// 			AfxSetResourceHandle(GetModuleHandle(SHARE_CONTROL_DLL_NAME));
// 
// 			//银行中心
// 			if (bGoldServer==false)
// 			{
// 				//广场银行
// 				CDlgInsurePlaza DlgInsurePlaza;
// 				INT_PTR nResult=DlgInsurePlaza.DoModal();
// 			}
// 			else
// 			{
// 				//房间银行
// 				ASSERT(pServerViewGold!=NULL);
// 				pServerViewGold->ShowInsureView();
// 			}
// 			return TRUE;
// 		}
// 	case IDC_NAVIGATION+0:
// 	case IDC_NAVIGATION+1:
// 		{
// 			//变量定义
// 			// 			ASSERT(CParameterGlobal::GetInstance()!=NULL);
// 			// 			CParameterGlobal * pParameterGlobal=CParameterGlobal::GetInstance();
// 			// 
// 			// 			//构造地址
// 			// 			TCHAR szNavigation[256]=TEXT("");
// 			// 			_sntprintf(szNavigation,CountArray(szNavigation),TEXT("%s/Navigation%ld.aspx"),szPlatformLink,(nCommandID-IDC_NAVIGATION)+1);
// 			// 
// 			// 			//连接地址
// 			// 			WebBrowse(szNavigation,true);
// 			// 
// 			// 			return TRUE;
// 		}
// 	case IDC_NAVIGATION+3:       //导航按钮
// 		{
// 			//变量定义
// 			ASSERT(CParameterGlobal::GetInstance()!=NULL);
// 			CParameterGlobal * pParameterGlobal=CParameterGlobal::GetInstance();
// 
// 			//构造地址
// 			TCHAR szNavigation[256]=TEXT("");
// 			_sntprintf(szNavigation,CountArray(szNavigation),TEXT("%s/Navigation%ld.aspx"),szPlatformLink,(nCommandID-IDC_NAVIGATION)+1);
// 
// 			//连接地址
// 			WebBrowse(szNavigation,true);
// 
// 			return TRUE;
// 		}
// 	case IDC_NAVIGATION+4:		//客服按钮
// 		{
// 			//变量定义
// 			ASSERT(CParameterGlobal::GetInstance()!=NULL);
// 			CParameterGlobal * pParameterGlobal=CParameterGlobal::GetInstance();
// 
// 			//构造地址
// 			TCHAR szNavigation[256]=TEXT("");
// 			_sntprintf(szNavigation,CountArray(szNavigation),TEXT("%s/Service/IssueList.aspx"),szPlatformLink);
// 			/*_sntprintf(szNavigation,CountArray(szNavigation),TEXT("http://wpa.qq.com/msgrd?v=3&uin=653969305&site=qq&menu=yes"));*/
// 
// 			//连接地址
// 			WebBrowse(szNavigation,true);
// 
// 			return TRUE;
// 
// 		}
 	}

	//菜单命令
	switch (nCommandID)
	{
	case IDM_USER_LOGON:		//用户登录
		{
			m_MissionLogon.ShowLogon();

			return TRUE;
		}
	case IDM_SWITCH_ACCOUNTS:	//切换帐号
		{
			//切换询问
// 			if ((m_ServerViewItemArray.GetCount()>0L)||(m_pServerViewItem!=NULL))
// 			{
// // 				CInformation Information(this);
// // 				if (Information.ShowMessageBox(TEXT("所有的游戏房间即将关闭,确实要“切换帐号”吗? "),MB_YESNO)!=IDYES) return TRUE;
// 
// 			}

			//全局设置
// 			CGlobalUnits::GetInstance()->DeleteUserCookie();
// 			CGlobalUserInfo::GetInstance()->ResetUserInfoData();
// 
// 			//发送事件
// 			CPlatformEvent * pPlatformEvent=CPlatformEvent::GetInstance();
// 			if (pPlatformEvent!=NULL) pPlatformEvent->SendPlatformEvent(EVENT_USER_LOGOUT,0L);

			return TRUE;
		}
	case IDM_RESTORE:   //还原
		{
			if(IsIconic())
			{
				ShowWindow(SW_RESTORE);
			}
			return TRUE;
		}
	case IDM_MINIMIZE:  //最小化
		{
			ShowWindow(SW_MINIMIZE);
			return TRUE;
		}
	case IDM_MAXIMIZE:  //最大化
		{
			if(IsIconic())
			{
				ShowWindow(SW_RESTORE);
			}
			//MaxSizeWindow();
			return TRUE;
		}
		//case SC_RESTORE :
		//	{
		//		if(IsIconic())
		//		{
		//			ShowWindow(SW_RESTORE);
		//		}
		//		return TRUE;
		//	}
	}

	return __super::OnCommand(wParam,lParam);
}
Beispiel #10
0
/*
==============
RenderBumpFlat_f

==============
*/
void RenderBumpFlat_f( const idCmdArgs &args ) {
	int		width, height;
	idStr	source;
	int		i;
	idBounds	bounds;
	srfTriangles_t	*mesh;

	// update the screen as we print
	common->SetRefreshOnPrint( true );

	width = height = 256;

	// check options
	for ( i = 1 ; i < args.Argc() - 1; i++ ) {
		const char *s;

		s = args.Argv( i );
		if ( s[0] == '-' ) {
			i++;
			s = args.Argv( i );
		}

		if ( !idStr::Icmp( s, "size" ) ) {
			if ( i + 2 >= args.Argc() ) {
				i = args.Argc();
				break;
			}
			width = atoi( args.Argv( i + 1 ) );
			height = atoi( args.Argv( i + 2 ) );
			i += 2;
		} else {
			common->Printf( "WARNING: Unknown option \"%s\"\n", s );
			break;
		}
	}

	if ( i != ( args.Argc() - 1 ) ) {
		common->Error( "usage: renderBumpFlat [-size width height] asefile" );
		return;
	}

	common->Printf( "Final image size: %i, %i\n", width, height );

	// load the source in "fastload" mode, because we don't
	// need tangent and shadow information
	source = args.Argv( i );

	idRenderModel *highPolyModel = renderModelManager->AllocModel();

	highPolyModel->PartialInitFromFile( source );

	if ( highPolyModel->IsDefaultModel() ) {
		common->Error( "failed to load %s", source.c_str() );
	}

	// combine the high poly model into a single polyset
	if ( highPolyModel->NumSurfaces() != 1 ) {
		highPolyModel = CombineModelSurfaces( highPolyModel );
	}

	// create normals if not present in file
	const modelSurface_t *surf = highPolyModel->Surface( 0 );
	mesh = surf->geometry;

	// bound the entire file
	R_BoundTriSurf( mesh );
	bounds = mesh->bounds;

	SaveWindow();
	ResizeWindow( width, height );

	// for small images, the viewport may be less than the minimum window
	qglViewport( 0, 0, width, height );

	qglEnable( GL_CULL_FACE );
	qglCullFace( GL_FRONT );
	qglDisable( GL_STENCIL_TEST );
	qglDisable( GL_SCISSOR_TEST );
	qglDisable( GL_ALPHA_TEST );
	qglDisable( GL_BLEND );
	qglEnable( GL_DEPTH_TEST );
	qglDisable( GL_TEXTURE_2D );
	qglDepthMask( GL_TRUE );
	qglDepthFunc( GL_LEQUAL );

	qglColor3f( 1, 1, 1 );

	qglMatrixMode( GL_PROJECTION );
	qglLoadIdentity();
	qglOrtho( bounds[0][0], bounds[1][0], bounds[0][2],
		bounds[1][2], -( bounds[0][1] - 1 ), -( bounds[1][1] + 1 ) );

	qglMatrixMode( GL_MODELVIEW );
	qglLoadIdentity();

	// flat maps are automatically anti-aliased

	idStr	filename;
	int		j, k, c;
	byte	*buffer;
	int		*sumBuffer, *colorSumBuffer;
	bool	flat;
	int		sample;

	sumBuffer = (int *)Mem_Alloc( width * height * 4 * 4 );
	memset( sumBuffer, 0, width * height * 4 * 4 );
	buffer = (byte *)Mem_Alloc( width * height * 4 );

	colorSumBuffer = (int *)Mem_Alloc( width * height * 4 * 4 );
	memset( sumBuffer, 0, width * height * 4 * 4 );

	flat = false;
//flat = true;

	for ( sample = 0 ; sample < 16 ; sample++ ) {
		float	xOff, yOff;

		xOff = ( ( sample & 3 ) / 4.0 ) * ( bounds[1][0] - bounds[0][0] ) / width;
		yOff = ( ( sample / 4 ) / 4.0 ) * ( bounds[1][2] - bounds[0][2] ) / height;

		for ( int colorPass = 0 ; colorPass < 2 ; colorPass++ ) {
			qglClearColor(0.5,0.5,0.5,0);
			qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

			qglBegin( GL_TRIANGLES );
			for ( i = 0 ; i < highPolyModel->NumSurfaces() ; i++ ) {
				const modelSurface_t *surf = highPolyModel->Surface( i );

				mesh = surf->geometry;

				if ( colorPass ) {
					// just render the surface color for artist visualization
					for ( j = 0 ; j < mesh->numIndexes ; j+=3 ) {
						for ( k = 0 ; k < 3 ; k++ ) {
							int		v;
							float	*a;

							v = mesh->indexes[j+k];
							qglColor3ubv( mesh->verts[v].color );
							a = mesh->verts[v].xyz.ToFloatPtr();
							qglVertex3f( a[0] + xOff, a[2] + yOff, a[1] );
						}
					}
				} else {
					// render as normal map
					// we can either flat shade from the plane,
					// or smooth shade from the vertex normals
					for ( j = 0 ; j < mesh->numIndexes ; j+=3 ) {
						if ( flat ) {
							idPlane		plane;
							idVec3		*a, *b, *c;
							int			v1, v2, v3;

							v1 = mesh->indexes[j+0];
							v2 = mesh->indexes[j+1];
							v3 = mesh->indexes[j+2];

							a = &mesh->verts[ v1 ].xyz;
							b = &mesh->verts[ v2 ].xyz;
							c = &mesh->verts[ v3 ].xyz;

							plane.FromPoints( *a, *b, *c );

							// NULLNORMAL is used by the artists to force an area to reflect no
							// light at all
							if ( surf->shader->GetSurfaceFlags() & SURF_NULLNORMAL ) {
								qglColor3f( 0.5, 0.5, 0.5 );
							} else {
								qglColor3f( 0.5 + 0.5*plane[0], 0.5 - 0.5*plane[2], 0.5 - 0.5*plane[1] );
							}

							qglVertex3f( (*a)[0] + xOff, (*a)[2] + yOff, (*a)[1] );
							qglVertex3f( (*b)[0] + xOff, (*b)[2] + yOff, (*b)[1] );
							qglVertex3f( (*c)[0] + xOff, (*c)[2] + yOff, (*c)[1] );
						} else {
							for ( k = 0 ; k < 3 ; k++ ) {
								int		v;
								float	*n;
								float	*a;

								v = mesh->indexes[j+k];
								n = mesh->verts[v].normal.ToFloatPtr();

								// NULLNORMAL is used by the artists to force an area to reflect no
								// light at all
								if ( surf->shader->GetSurfaceFlags() & SURF_NULLNORMAL ) {
									qglColor3f( 0.5, 0.5, 0.5 );
								} else {
								// we are going to flip the normal Z direction
									qglColor3f( 0.5 + 0.5*n[0], 0.5 - 0.5*n[2], 0.5 - 0.5*n[1] );
								}

								a = mesh->verts[v].xyz.ToFloatPtr();
								qglVertex3f( a[0] + xOff, a[2] + yOff, a[1] );
							}
						}
					}
				}
			}

			qglEnd();
			qglFlush();
			GLimp_SwapBuffers();
			qglReadPixels( 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer );

			c = width * height;

			if ( colorPass ) {
				// add to the sum buffer
				for ( i = 0 ; i < c ; i++ ) {
					colorSumBuffer[i*4+0] += buffer[i*4+0];
					colorSumBuffer[i*4+1] += buffer[i*4+1];
					colorSumBuffer[i*4+2] += buffer[i*4+2];
					colorSumBuffer[i*4+3] += buffer[i*4+3];
				}
			} else {
				// normalize
				for ( i = 0 ; i < c ; i++ ) {
					idVec3	v;

					v[0] = ( buffer[i*4+0] - 128 ) / 127.0;
					v[1] = ( buffer[i*4+1] - 128 ) / 127.0;
					v[2] = ( buffer[i*4+2] - 128 ) / 127.0;

					v.Normalize();

					buffer[i*4+0] = 128 + 127 * v[0];
					buffer[i*4+1] = 128 + 127 * v[1];
					buffer[i*4+2] = 128 + 127 * v[2];
				}

				// outline into non-drawn areas
				for ( i = 0 ; i < 8 ; i++ ) {
					OutlineNormalMap( buffer, width, height, 128, 128, 128 );
				}

				// add to the sum buffer
				for ( i = 0 ; i < c ; i++ ) {
					sumBuffer[i*4+0] += buffer[i*4+0];
					sumBuffer[i*4+1] += buffer[i*4+1];
					sumBuffer[i*4+2] += buffer[i*4+2];
					sumBuffer[i*4+3] += buffer[i*4+3];
				}
			}
		}
	}

	c = width * height;

	// save out the color map
	for ( i = 0 ; i < c ; i++ ) {
		buffer[i*4+0] = colorSumBuffer[i*4+0] / 16;
		buffer[i*4+1] = colorSumBuffer[i*4+1] / 16;
		buffer[i*4+2] = colorSumBuffer[i*4+2] / 16;
		buffer[i*4+3] = colorSumBuffer[i*4+3] / 16;
	}
	filename = source;
	filename.StripFileExtension();
	filename.Append( "_color.tga" );
	R_VerticalFlip( buffer, width, height );
	R_WriteTGA( filename, buffer, width, height );

	// save out the local map
	// scale the sum buffer back down to the sample buffer
	// we allow this to denormalize
	for ( i = 0 ; i < c ; i++ ) {
		buffer[i*4+0] = sumBuffer[i*4+0] / 16;
		buffer[i*4+1] = sumBuffer[i*4+1] / 16;
		buffer[i*4+2] = sumBuffer[i*4+2] / 16;
		buffer[i*4+3] = sumBuffer[i*4+3] / 16;
	}

	filename = source;
	filename.StripFileExtension();
	filename.Append( "_local.tga" );
	common->Printf( "writing %s (%i,%i)\n", filename.c_str(), width, height );
	R_VerticalFlip( buffer, width, height );
	R_WriteTGA( filename, buffer, width, height );


	// free the model
	renderModelManager->FreeModel( highPolyModel );

	// free our work buffer
	Mem_Free( buffer );
	Mem_Free( sumBuffer );
	Mem_Free( colorSumBuffer );

	RestoreWindow();

	// stop updating the screen as we print
	common->SetRefreshOnPrint( false );

	common->Error( "Completed." );
}
Beispiel #11
0
//命令函数
BOOL CGameFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
	//变量定义
	UINT nCommandID=LOWORD(wParam);

	//切换按钮
	if ((nCommandID>=IDC_BT_VIEW_ITEM)&&(nCommandID<(IDC_BT_VIEW_ITEM+CountArray(m_btViewItem))))
	{
		ActiveRoomViewItem(m_pRoomViewItem[nCommandID-IDC_BT_VIEW_ITEM]);
		return TRUE;
	}

	//消息处理
	switch(nCommandID)
	{
	case IDC_BT_MIN	:					//最小化窗
		{
			ShowWindow(SW_MINIMIZE);

			return TRUE;
		}
	case IDC_BT_MAX		:				//最大化窗
		{
			if (m_bMaxShow==true) RestoreWindow();
			else MaxSizeWindow();

			return TRUE;
		}
	case IDC_BT_BUTTON_1:				//功能按钮
	case IDC_BT_BUTTON_3:				//功能按钮
	case IDC_BT_BUTTON_4:				//功能按钮
	case IDC_BT_BUTTON_5:				//功能按钮
		{
			if(IDC_BT_BUTTON_1==nCommandID)WebBrowse(TEXT("http://127.0.0.1:8086/"),true);
			if(IDC_BT_BUTTON_3==nCommandID)WebBrowse(TEXT("http://127.0.0.1:8086/PayBuy.asp"),true);
			if(IDC_BT_BUTTON_4==nCommandID)WebBrowse(TEXT("http://127.0.0.1:8086/user/ExChange.asp"),true);
			if(IDC_BT_BUTTON_5==nCommandID)WebBrowse(TEXT("http://127.0.0.1:8086/"),true);

			return TRUE;
		}
	case IDC_BT_BUTTON_2:				//上传头像
		{
			//创建窗体
			if ( m_DlgCustomFace.m_hWnd == NULL )
			{
				m_DlgCustomFace.Create(IDD_CUSTOM_FACE, this);
			}

			//显示窗体
			m_DlgCustomFace.CenterWindow();
			m_DlgCustomFace.ShowWindow(SW_SHOW);
			m_DlgCustomFace.SetActiveWindow();
			m_DlgCustomFace.SetForegroundWindow();

			return TRUE;
		}
	case IDC_BT_PLAZA	:				//大厅按钮
		{
			ActivePlazaViewItem();

			return TRUE;
		}
	case IDC_BT_EXCHANGE_SINK:			//换肤按钮
		{
			g_GlobalUnits.m_PlatformResourceModule->SetResourceType(RESOURCE_RED);
			UpdateSkinResource();
			m_DlgGamePlaza.UpdateSkinResource();
			m_UserInfoView.UpdateSkinResource();
			for (int i=0;i<CountArray(m_pRoomViewItem);i++)
			{
				if (m_pRoomViewItem[i]==NULL) break;
				m_pRoomViewItem[i]->UpdateSkinResource();
			}

			return TRUE;
		}
	case IDC_BT_CLOSE	:				//关闭房间
	case IDC_BT_QUIT_GAME	:			//退出游戏
		{
			CloseCurrentViewItem();

			return TRUE;
		}
	case IDC_BT_SYSTEM_OPTION	:		//系统配置
		{
			//系统设置
			ShowSystemOption();

			return TRUE;
		}
	case IDC_BT_SELF_OPTION:			//个人配置
		{
			CDlgIndividualInfo DlgIndividualInfo;
			DlgIndividualInfo.DoModal();

			return TRUE;
		}
	case IDC_BT_SWITCH_ACCOUNTS :		//切换按钮
		{
			//状态判断
			tagGlobalUserData & GlobalUserData=g_GlobalUnits.GetGolbalUserData();
			if (GlobalUserData.dwUserID==0L) return TRUE;

			//切换询问
			if (m_pRoomViewItem[0]!=NULL)
			{
				const TCHAR szMessage[]=TEXT("切换用户帐号,将会关闭所有游戏房间,确实要切换用户帐号吗? ");
				int iResult=ShowMessageBox(szMessage,MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
				if (iResult!=IDYES) return TRUE;
			}
			else
			{
				const TCHAR szMessage[]=TEXT("确实要注销当前用户,切换用户帐号吗? ");
				int iResult=ShowMessageBox(szMessage,MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
				if (iResult!=IDYES) return TRUE;
			}

			//关闭房间
			ActivePlazaViewItem();
			CloseAllRoomViewItem();

			//删除记录
			g_GlobalUnits.DeleteUserCookie();

			//设置变量
			memset(&GlobalUserData,0,sizeof(GlobalUserData));

			//投递消息
			m_DlgGamePlaza.SendLogonMessage();

			return TRUE;
		}
	case IDC_BT_LIST_CONTROL_1:			//列表按钮
	case IDC_BT_LIST_CONTROL_2:			//列表按钮
		{
			//隐藏列表
			if(m_bHideGameList)
			{
				//隐藏按钮
				m_btListControl1.ShowWindow(SW_HIDE);
				m_btListControl2.ShowWindow(SW_HIDE);
				m_ServerItemView.ShowWindow(SW_HIDE);
				m_UserCompanionList.ShowWindow(SW_HIDE);
			}
			//显示列表
			else
			{
				//设置变量
				m_wShowListType = nCommandID;

				//设置按钮
				m_btListControl1.ShowWindow(SW_SHOW);
				m_btListControl2.ShowWindow(SW_SHOW);
				UINT uControl1=((IDC_BT_LIST_CONTROL_1==m_wShowListType)?GetPlatformRes().uFrameServiceBtShow1:GetPlatformRes().uFrameServiceBtHide1);
				UINT uControl2=((IDC_BT_LIST_CONTROL_2==m_wShowListType)?GetPlatformRes().uFrameServiceBtShow2:GetPlatformRes().uFrameServiceBtHide2);
				m_btListControl1.SetButtonImage(uControl1,GetResInstanceHandle(),false);
				m_btListControl2.SetButtonImage(uControl2,GetResInstanceHandle(),false);

				//判断显示
				m_ServerItemView.ShowWindow((m_wShowListType==IDC_BT_LIST_CONTROL_1)?SW_SHOW:SW_HIDE);
				m_UserCompanionList.ShowWindow((m_wShowListType==IDC_BT_LIST_CONTROL_2)?SW_SHOW:SW_HIDE);
			}

			return TRUE;
		}
	}

	return __super::OnCommand(wParam,lParam);
}
Beispiel #12
0
LRESULT CTrayDialog::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
    UINT uID = (UINT)wParam;
 	if (uID != 1)
		return 0;

	CPoint pt;
    UINT uMsg = (UINT)lParam;
    switch (uMsg)
	{ 
		case WM_MOUSEMOVE:
			GetCursorPos(&pt);
			ClientToScreen(&pt);
			OnTrayMouseMove(pt);
			break;

		case WM_LBUTTONDOWN:
			GetCursorPos(&pt);
			ClientToScreen(&pt);
			OnTrayLButtonDown(pt);
			break;

		case WM_LBUTTONUP:
			// Handle the WM_LBUTTONUP only if we know that there was also an according
			// WM_LBUTTONDOWN or WM_LBUTTONDBLCLK on our tray bar icon. If we would handle
			// WM_LBUTTONUP without checking this, we may get a single WM_LBUTTONUP message
			// whereby the according WM_LBUTTONDOWN message was meant for some other tray bar
			// icon.
			if (m_bLButtonDblClk)
			{
				KillSingleClickTimer();
				RestoreWindow();
				m_bLButtonDblClk = false;
			}
			else if (m_bLButtonDown)
			{
				if (m_uSingleClickTimer == 0)
				{
					if (!IsWindowVisible())
						m_uSingleClickTimer = SetTimer(IDT_SINGLE_CLICK, 300, NULL);
				}
				m_bLButtonDown = false;
			}
			break;

		case WM_LBUTTONDBLCLK:
			KillSingleClickTimer();
			GetCursorPos(&pt);
			ClientToScreen(&pt);
			OnTrayLButtonDblClk(pt);
			break;

		case WM_RBUTTONUP:
		case WM_CONTEXTMENU:
			KillSingleClickTimer();
			GetCursorPos(&pt);
			//ClientToScreen(&pt);
			OnTrayRButtonUp(pt);
			break;

		case WM_RBUTTONDBLCLK:
			KillSingleClickTimer();
			GetCursorPos(&pt);
			ClientToScreen(&pt);
			OnTrayRButtonDblClk(pt);
			break;
	} 
	return 1;
}
Beispiel #13
0
BOOL CALLBACK EnumWindowsRestore(HWND hwnd, LPARAM lParam)
{
  if (IsGoodWindow(hwnd)) { RestoreWindow(hwnd); }
  return TRUE;
}
Beispiel #14
0
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  node *current = NULL;
  node *nodes;
  unsigned short tag;

  switch (msg)
  {
    case WM_CREATE:
      if (experimental_mouse) {
        SetTimer(hwnd, TIMER_UPDATE_MOUSE, 500, NULL); // Poll for mouse position
      }
      break;

    case WM_CLOSE:
      {
        ClipCursor(0); // Release Cursor Lock
        DeregisterShellHookWindow(hwnd);
        UnregisterHotkeys(hwnd);
        if (experimental_mouse) {
          KillTimer(hwnd, TIMER_UPDATE_MOUSE); // Mouse Poll Timer
        }
        for (tag=0; tag<TAGS; tag++) {
          nodes = tags[tag].nodes;
          for (current = nodes; current;) {
            node *next = current->next;
            RestoreWindow(current->hwnd);
            RemoveNode(current->hwnd, tag);
            current = next;
          }
          DestroyWindow(hwnd);
        }
      }
      break;

    case WM_DESTROY:
      PostQuitMessage(WM_QUIT);
      break;

    case WM_HOTKEY:
      if (wParam >= KEY_TOGGLE_T1 && wParam < (KEY_TOGGLE_T1 + TAGS)) {
        ToggleTag(wParam - KEY_TOGGLE_T1);
        break;
      } else if (wParam >= KEY_SWITCH_T1 && wParam < (KEY_SWITCH_T1 + TAGS)) {
        MinimizeTag(current_tag);
        current_tag = wParam - KEY_SWITCH_T1;
        ArrangeWindows();
        break;
      }

      current = tags[current_tag].current_window;

      switch (wParam)
      {
        case KEY_SELECT_UP:
          if (current) {
            tags[current_tag].current_window = GetNextNode();
            FocusCurrent();
          }
          break;

        case KEY_SELECT_DOWN:
          if (current) {
            tags[current_tag].current_window = GetPreviousNode();
            FocusCurrent();
          }
          break;

        case KEY_MOVE_MAIN:
          SwapWindowWithNode(tags[current_tag].nodes);
          ArrangeWindows();
          break;

        case KEY_EXIT:
          PostMessage(hwnd, WM_CLOSE, 0, 0);
          break;

        case KEY_MARGIN_LEFT:
          margin -= 20;
          ArrangeWindows();
          break;

        case KEY_MARGIN_RIGHT:
          margin += 20;
          ArrangeWindows();
          break;

        case KEY_IGNORE:
          if (!disableNext) {
            disableNext = 1;
          } else {
            disableNext = 0;
          }
          break;

        case KEY_MOUSE_LOCK:
          if (lockMouse) {
            lockMouse = 0;
            ClipCursor(0);
          } else {
            lockMouse = 1;
            FocusCurrent();
          }
          break;

        case KEY_TILING_MODE:
          tags[current_tag].tilingMode = (tags[current_tag].tilingMode + 1) % 3;
          ArrangeWindows();
          break;

        case KEY_MOVE_UP:
          if (current) {
            SwapWindowWithNode(GetNextNode());
            ArrangeWindows();
          }
          break;

        case KEY_MOVE_DOWN:
          if (current) {
            SwapWindowWithNode(GetPreviousNode());
            ArrangeWindows();
          }
          break;

        case KEY_DISP_CLASS:
          {
            LPSTR temp = (LPSTR)malloc(sizeof(TCHAR) * 128);
            GetClassName(GetForegroundWindow(), temp, 128);
            MessageBox(NULL, temp, "Window Class", MB_OK);
            free(temp);
          }
          break;

        case KEY_TILE:
          if (IsGoodWindow(GetForegroundWindow())) {
            AddNode(GetForegroundWindow(), current_tag);
            ArrangeWindows();
          }
          break;

        case KEY_UNTILE:
          FullRemoveNode(GetForegroundWindow());
          ArrangeWindows();
          break;

        case KEY_INC_AREA:
          tags[current_tag].masterarea_count++;
          ArrangeWindows();
          break;

        case KEY_DEC_AREA:
          tags[current_tag].masterarea_count--;
          ArrangeWindows();
          break;

        case KEY_CLOSE_WIN:
          PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0);
          break;
      }
      break;

    case WM_TIMER:
      switch (wParam)
      {
        case TIMER_UPDATE_MOUSE:
          UpdateMousePos(hwnd);
          break;
      }
      break;

    default:
      if (msg == shellhookid) { // Handle the Shell Hook message
        switch (wParam)
        {
          case HSHELL_WINDOWCREATED:
            if (IsGoodWindow((HWND)lParam)) {
              AddNode((HWND)lParam, current_tag);
              ArrangeWindows();
              FocusCurrent();
            }
            break;

          case HSHELL_WINDOWDESTROYED:
            FullRemoveNode((HWND)lParam);
            ArrangeWindows();
            FocusCurrent();
            break;

          case HSHELL_WINDOWACTIVATED:
            {
              node *found = FindNode((HWND)lParam, current_tag);
              if (found) {
                tags[current_tag].current_window = current = found;
                FocusCurrent();
              }
            }
            break;
        }
      } else {
        return DefWindowProc(hwnd, msg, wParam, lParam);
      }
  }
  return 0;
}
Beispiel #15
0
// This does the actual tiling
void ArrangeWindows()
{
  int a, i, x, y, width, height;
  unsigned short masterarea_count;
  node *nodes;
  node *temp;

  a = CountNodes();
  if (a == -1) return;
  i = 0;

  nodes = tags[current_tag].nodes;
  masterarea_count = tags[current_tag].masterarea_count;

  for (temp = nodes; temp; temp = temp->next) {
    RestoreWindow(temp->hwnd);

    if (a == 0) { // I think this is universal to all tiling modes
      x = 0;
      y = 0;
      width = screen_width;
      height = screen_height;
    } else {
      switch (tags[current_tag].tilingMode)
      {
        default:
        case MODE_VERTICAL:
          {
            if (i < masterarea_count) {
              x = 0;
              y = (screen_height / masterarea_count) * i;
              width = (screen_width / 2) + margin;
              height = (screen_height / masterarea_count);
            } else {
              x = (screen_width / 2) + margin;
              y = (screen_height / ((a + 1) - masterarea_count)) * (a - i);
              width = (screen_width / 2) - margin;
              height = (screen_height / ((a + 1) - masterarea_count));
            }
          }
          break;
        case MODE_HORIZONTAL:
          {
            if (i < masterarea_count) {
              // Main window
              x = (screen_width / masterarea_count) * i;
              y = 0;
              width = (screen_width / masterarea_count);
              height = (screen_height / 2) + margin;
            } else {
              // Normal windows to be tiled
              x = (screen_width / ((a + 1) - masterarea_count)) * (a - i);
              y = (screen_height / 2) + margin;
              width = (screen_width / ((a + 1) - masterarea_count));
              height = (screen_height / 2) - margin;
            }
          }
          break;
        case MODE_GRID: // See dvtm-license.txt
          {
            int ah, aw, rows, cols;
            for (cols = 0; cols <= (a + 1)/2; cols++) {
              if (cols * cols >= (a + 1)) {
                break;
              }
            }
            rows = (cols && (cols - 1) * cols >= (a + 1)) ? cols - 1 : cols;
            height = screen_height / (rows ? rows : 1);
            width = screen_width / (cols ? cols : 1);
            if (rows > 1 && i == (rows * cols) - cols && ((a + 1) - i) <= ((a + 1) % cols)) {
              width = screen_width / ((a + 1) - i);
            }
            x = (i % cols) * width;
            y = (i / cols) * height;
            ah = (i >= cols * (rows - 1)) ? screen_height - height * rows: 0;
            if (rows > 1 && i == (a + 1) - 1 && ((a + 1) - i) < ((a + 1) % cols)) {
              aw = screen_width - width * ((a + 1) % cols);
            } else {
              aw = ((i + 1) % cols == 0) ? screen_width - width * cols : 0;
            }
            width += aw;
            height += ah;
          }
          break;
        case MODE_FULLSCREEN:
          x = 0;
          y = 0;
          width = screen_width;
          height = screen_height;
          break;
      }
    }

    SetWindowPos(temp->hwnd, HWND_TOP, x + screen_x, y + screen_y, width, height, SWP_SHOWWINDOW);
    i++;
  }

  FocusCurrent();
}