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; } }
//鼠标消息 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; }
//鼠标左键事件 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; }
//鼠标左键事件 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; }
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; }
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); }
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); }
/* ============== 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." ); }
//命令函数 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); }
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; }
BOOL CALLBACK EnumWindowsRestore(HWND hwnd, LPARAM lParam) { if (IsGoodWindow(hwnd)) { RestoreWindow(hwnd); } return TRUE; }
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; }
// 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(); }