//鼠标消息 VOID CSkinSplitter::OnMouseMove(UINT nFlags, CPoint Point) { __super::OnMouseMove(nFlags,Point); if (m_bMouseDown==true) { //获取位置 CRect rcWindow; GetWindowRect(&rcWindow); //效验位置 CPoint PointParent=Point; MapWindowPoints(GetParent(),&PointParent,1); //控件位置 CSize SizeControl; SizeControl.SetSize(rcWindow.Width(),rcWindow.Height()); //设置光标 if (m_SplitterType==SplitterType_Hor) { if ((PointParent.y>(m_nMaxDragPos-SizeControl.cy/2))||(PointParent.y<(m_nMinDragPos+SizeControl.cy/2))) { //设置光标 SetCursor(LoadCursor(NULL,IDC_NO)); //设置位置 PointParent.y=__min(m_nMaxDragPos-SizeControl.cy/2,PointParent.y); PointParent.y=__max(m_nMinDragPos+SizeControl.cy/2,PointParent.y); } else SetCursor(LoadCursor(NULL,IDC_SIZENS)); } else { if ((PointParent.x>(m_nMaxDragPos-SizeControl.cx/2))||(PointParent.x<(m_nMinDragPos+SizeControl.cx/2))) { //设置光标 SetCursor(LoadCursor(NULL,IDC_NO)); //设置位置 PointParent.x=__min(m_nMaxDragPos-SizeControl.cx/2,PointParent.x); PointParent.x=__max(m_nMinDragPos+SizeControl.cx/2,PointParent.x); } else SetCursor(LoadCursor(NULL,IDC_SIZEWE)); } //转换位置 CPoint PointScreen=PointParent; GetParent()->ClientToScreen(&PointScreen); //计算区域 CRect rcCurrentDraw=m_rcDrawLine; if (m_SplitterType==SplitterType_Hor) { rcCurrentDraw.top=PointScreen.y-SizeControl.cy/2; rcCurrentDraw.bottom=rcCurrentDraw.top+SizeControl.cy; } else { rcCurrentDraw.left=PointScreen.x-SizeControl.cx/2; rcCurrentDraw.right=rcCurrentDraw.left+SizeControl.cx; } //绘画线条 if (rcCurrentDraw!=m_rcDrawLine) { //设置 DC CDC * pDC=CDC::FromHandle(::GetDC(NULL)); pDC->SelectObject(CDC::GetHalftoneBrush()); //绘画拆分 pDC->PatBlt(m_rcDrawLine.left,m_rcDrawLine.top,m_rcDrawLine.Width(),m_rcDrawLine.Height(),PATINVERT); pDC->PatBlt(rcCurrentDraw.left,rcCurrentDraw.top,rcCurrentDraw.Width(),rcCurrentDraw.Height(),PATINVERT); //释放资源 ::ReleaseDC(NULL,pDC->m_hDC); //设置变量 m_rcDrawLine=rcCurrentDraw; } } return; }
//绘画经验 VOID CUserItemElement::DrawExperience(CDC * pDC, INT nXPos, INT nYPos, DWORD dwExperience) { if (dwExperience>0L) { //加载资源 CPngImage ImageExperience; ImageExperience.LoadImage(GetModuleHandle(SHARE_CONTROL_DLL_NAME),TEXT("USER_EXPERIENCE")); //获取属性 CSize SizeExperience; SizeExperience.SetSize(ImageExperience.GetWidth()/3,ImageExperience.GetHeight()); //获取经验 BYTE cbOrderIndex[MAX_EXPERIENCE]; WORD wExperienceLevel=GetExperienceLevel(dwExperience); WORD wIndexCount=GetExperienceIndex(wExperienceLevel,cbOrderIndex,CountArray(cbOrderIndex)); //绘画经验 for (WORD i=0;i<wIndexCount;i++) { INT nXDrawPos=nXPos+i*(SizeExperience.cx+2L); ImageExperience.DrawImage(pDC,nXDrawPos,nYPos,SizeExperience.cx,SizeExperience.cy,cbOrderIndex[i]*SizeExperience.cx,0); } } return; }
//获取尺寸 VOID CFaceItemControl::GetFaceItemSize(CSize & SizeFace) { //设置变量 SizeFace.SetSize(FACE_CX,FACE_CY); return; }
int main_1( char**, int ) { using std::cout; using std::endl; using std::shared_ptr; std::cout << "Hello,World!" << std::endl; std::shared_ptr<DemoApp> app( new DemoApp ); cout << "the shared_ptr size is: " << sizeof( app ) << endl;// 应该说有12字节 shared_ptr<int> int_ptr( new int ); //vector //CSize //CSize // Gdiplus::RectF using DUI_V0_1::CSize; CSize size = {1,2}; size = CSize( 2, 1 ); size += CSize( 1, 1 ); size -= CSize( 2, 2 ); size.SetSize( 3, 3 ); //size = (-size); cout << "cx:" << size.cx << "cy:" << size.cy << endl; using DUI_V0_1::CPoint; CPoint pt; typedef DUI_V0_1::DUI_BASE::CSizeT<CPoint::value_type> CSize2; CSize sz2(1,2); pt.Offset( size.To<CSize2>() );// 类型检查,显然不安全,所以直接用编译不通过 cout << "pt.x:" << pt.x << "pt.y" << pt.y << endl; DUI_V0_1::CPoint ptf( 2, 3 ); cout << ptf.x << " "<< ptf.y << endl; system( "pause" ); return 0; }
/***************************************************************************************** << --- CNPainterView::resetScrollSizes 2013-12-02 --- >> 说明:根据窗口客户区(设备坐标:像素)设定滚轴区间,使纸保持在窗口客户区中心 参数: clientArea = 窗口客户区,由GetClientRect或OnSize得到(设备坐标) 返回值: *****************************************************************************************/ void CNPainterView::resetScrollSizes(CSize clientArea) { CNPainterDoc *pdoc = GetDocument(); if(!pdoc) return; CRect rtclient; const CSize client = clientArea; if(clientArea.cx <= 0 || clientArea.cy <= 0) { GetClientRect(rtclient); rtclient.NormalizeRect(); clientArea.SetSize(rtclient.Width(), rtclient.Height()); } CClientDC dc(NULL); // 转换到逻辑坐标 clientArea.cx = MulDiv(clientArea.cx, 254, dc.GetDeviceCaps(LOGPIXELSX)); clientArea.cy = MulDiv(clientArea.cy, 254, dc.GetDeviceCaps(LOGPIXELSY)); // 工作台尺寸(逻辑单位) > 纸张尺寸 > 窗口客户区 int32_t cx = 0;// max(clientArea.cx, pdoc->getAdminer().getPager().getPaperInfo().bsSize.cx)+20; int32_t cy = 0;// max(clientArea.cy, pdoc->getAdminer().getPager().getPaperInfo().bsSize.cy)+20; gtc::BSPaperInfo &paper = pdoc->getAdminer().getPager()->getPaperInfo(); if(paper.isLandscape()) // 默认是纵向1 横向2 { cx = max(clientArea.cx, paper.bsSize.height)+20; cy = max(clientArea.cy, paper.bsSize.width)+20; //std::swap(cx, cy); } else { cx = max(clientArea.cx, paper.bsSize.width)+20; cy = max(clientArea.cy, paper.bsSize.height)+20; } if(m_szWorker.cx < cx) m_szWorker.cx = cx; if(m_szWorker.cy < cy) m_szWorker.cy = cy; // CSize szWorker = m_szWorker; szWorker.cx = MulDiv(szWorker.cx, dc.GetDeviceCaps(LOGPIXELSX), 254); szWorker.cy = MulDiv(szWorker.cy, dc.GetDeviceCaps(LOGPIXELSY), 254); SetScrollSizes(MM_TEXT, szWorker); // 水平滚动条居中 SCROLLINFO scrinfo = {0}; scrinfo.cbSize = sizeof(SCROLLINFO); GetScrollInfo(SB_HORZ, &scrinfo); SetScrollPos(SB_HORZ, (scrinfo.nMax-scrinfo.nMin-scrinfo.nPage)/2); // 垂直显示纸边 GetScrollInfo(SB_VERT, &scrinfo); CSize szPaper = paper.bsSize.toMSSize(); if(paper.isLandscape()) // 默认是纵向 std::swap(szPaper.cx, szPaper.cy); szPaper.cx = MulDiv(szPaper.cx, dc.GetDeviceCaps(LOGPIXELSX), 254); szPaper.cy = MulDiv(szPaper.cy, dc.GetDeviceCaps(LOGPIXELSY), 254); SetScrollPos(SB_VERT, (scrinfo.nMax-scrinfo.nMin-scrinfo.nPage)*(szPaper.cy+50)/szWorker.cy); }
//绘画数字 VOID CDlgInsureGame::DrawNumberString(CDC * pDC, SCORE lScore, INT nXPos, INT nYPos) { //转换逗号 TCHAR szControl[128]=TEXT(""); CString cs; //转换格式 MakeString(cs,lScore); _sntprintf(szControl,CountArray(szControl),TEXT("%s"),cs); //变量定义 INT nXDrawPos=nXPos; INT nScoreLength=lstrlen(szControl); //绘画判断 if (nScoreLength>0L) { //获取大小 CSize SizeNumber; SizeNumber.SetSize(m_ImageNumber.GetWidth()/12L,m_ImageNumber.GetHeight()); //绘画数字 for (INT i=0;i<nScoreLength;i++) { //绘画逗号 if (szControl[i]==TEXT(',')) { m_ImageNumber.DrawImage(pDC,nXDrawPos,nYPos,SizeNumber.cx,SizeNumber.cy,SizeNumber.cx*10L,0L); } //绘画点号 if (szControl[i]==TEXT('.')) { m_ImageNumber.DrawImage(pDC,nXDrawPos,nYPos,SizeNumber.cx,SizeNumber.cy,SizeNumber.cx*11L,0L); } //绘画数字 if (szControl[i]>=TEXT('0')&&szControl[i]<=TEXT('9')) { m_ImageNumber.DrawImage(pDC,nXDrawPos,nYPos,SizeNumber.cx,SizeNumber.cy,SizeNumber.cx*(szControl[i]-TEXT('0')),0L); } //设置位置 nXDrawPos+=SizeNumber.cx; } } return; }
CSize GetBorderSize(HWND hWnd, bool dwmEnabled) { // Check for Caption DWORD dwStyle = ::GetWindowLong(hWnd, GWL_STYLE); bool caption = (dwStyle & WS_CAPTION) != 0; DWORD dwExStyle = ::GetWindowLong(hWnd, GWL_EXSTYLE); // Get BorderMultiplierFactor int bmfactor = 0; ::SystemParametersInfo(SPI_GETBORDER, 0, &bmfactor, 0); int factor = bmfactor - 1; CSize border; if ((dwExStyle & WS_EX_CLIENTEDGE) != 0) { // Fixed3D border = GetFixedFrameBorderSize() + GetBorder3DSize(); } else if ((dwStyle & WS_THICKFRAME) != 0) { // Dialog if ((dwExStyle & WS_EX_DLGMODALFRAME) != 0) { // Dialog with WS_EX_DLGMODALFRAME has double border int cx = ::GetSystemMetrics(SM_CXDLGFRAME); int cy = ::GetSystemMetrics(SM_CYDLGFRAME); border.SetSize(cx + cx, cy + cy); } // Sizable or SizableToolWindow else if (IsVista()) border = GetFrameBorderSize(); else border = GetFixedFrameBorderSize() + (caption ? GetBorderSize() + CSize(factor, factor) : CSize(factor, factor)); } else { if (dwmEnabled) border = GetFrameBorderSize(); else border = GetFixedFrameBorderSize(); } return border; }
inline CSize StringToCSize( const string &str ) { CSize ret; CString cstr = str.c_str(); if ( cstr.Find( "x", 0 ) ) { int currpos = 0; CString strx = cstr.Tokenize( "x", currpos ); CString stry = cstr.Tokenize( "x", currpos ); ret.cx = atoi( strx ); ret.cy = atoi( stry ); } else ret.SetSize( 0, 0 ); return ret; }
//绘画消息 VOID CDlgBuyProperty::OnDrawClientArea(CDC * pDC, INT nWidth, INT nHeight) { //框架位置 INT nTBorder=m_SkinAttribute.m_EncircleInfoFrame.nTBorder; INT nBBorder=m_SkinAttribute.m_EncircleInfoFrame.nBBorder; INT nLBorder=m_SkinAttribute.m_EncircleInfoFrame.nLBorder; INT nRBorder=m_SkinAttribute.m_EncircleInfoFrame.nRBorder; //加载资源 CPngImageSB ImagePropertyFrame; ImagePropertyFrame.LoadImage(GetModuleHandle(GAME_PROPERTY_DLL_NAME),TEXT("PROPERTY_FRAME")); //获取大小 CSize SizePropertyFrame; SizePropertyFrame.SetSize(ImagePropertyFrame.GetWidth(),ImagePropertyFrame.GetHeight()); //绘画框架 INT nXItemPos=nLBorder+10; INT nYItemPos=nTBorder+10; ImagePropertyFrame.DrawImage(pDC,nXItemPos-(SizePropertyFrame.cx-PROPERTY_SYMBOL_CX)/2,nYItemPos-(SizePropertyFrame.cy-PROPERTY_SYMBOL_CY)/2); //绘画图标 if (m_pGamePropertyItem!=NULL) { //获取资源 tagPropertyImage PropertyImage; m_pGamePropertyItem->GetImageInfo(PropertyImage); //绘画图标 CPngImageSB ImageSymbol; ImageSymbol.LoadImage(PropertyImage.hResInstance,PropertyImage.pszSymbolID); ImageSymbol.DrawImage(pDC,nXItemPos,nYItemPos,PROPERTY_SYMBOL_CX,PROPERTY_SYMBOL_CY,0,0,ImageSymbol.GetWidth(),ImageSymbol.GetHeight()); } return; }
//构造名片 VOID CUserItemElement::ConstructNameCard(IClientUserItem * pIClientUserItem, IGameLevelParser * pIGameLevelParser, CImage&ImageNameCard) { //创建名片 CSize ImageSize; ImageSize.SetSize(NAME_CARD_CX,NAME_CARD_CY); ImageNameCard.Create(ImageSize.cx,ImageSize.cy,32); //变量定义 TCHAR szString[128]=TEXT(""); tagCustomFaceInfo * pCustomFaceInfo=pIClientUserItem->GetCustomFaceInfo(); //设置 DC CDC * pDC=CDC::FromHandle(ImageNameCard.GetDC()); pDC->SelectObject(CSkinResourceManager::GetInstance()->GetDefaultFont()); //设置 DC pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(CSkinMenuKernel::m_SkinAttribute.m_crNormalText); //位置定义 CRect rcNickName(60,5,ImageSize.cx-5,5+12); CRect rcGameLevel(60,25,ImageSize.cx-5,25+12); CRect rcExperience(60,45,ImageSize.cx-5,45+12); CRect rcUserGameID(60,65,ImageSize.cx-5,65+12); //绘画背景 pDC->FillSolidRect(0,0,ImageSize.cx,ImageSize.cy,CSkinMenuKernel::m_SkinAttribute.m_crNormalBack); //绘画头像 if ((pCustomFaceInfo->dwDataSize!=0L)&&(pIClientUserItem->GetCustomID()!=0L)) { m_pIFaceItemControl->DrawFaceItemFrame(pDC,2,16,ITEM_FRAME_NORMAL); m_pIFaceItemControl->DrawFaceNormal(pDC,2,16,pCustomFaceInfo->dwCustomFace); } else { m_pIFaceItemControl->DrawFaceItemFrame(pDC,2,16,ITEM_FRAME_NORMAL); m_pIFaceItemControl->DrawFaceNormal(pDC,2,16,pIClientUserItem->GetFaceID()); } //用户信息 LPCTSTR pszMember=m_pIUserOrderParser->GetMemberDescribe(pIClientUserItem->GetMemberOrder()); LPCTSTR pszMaster=m_pIUserOrderParser->GetMasterDescribe(pIClientUserItem->GetMasterOrder()); //用户信息 LPCTSTR pszUserOrder=(pszMaster[0]!=0)?pszMaster:((pszMember[0]!=0)?pszMember:TEXT("普通玩家")); _sntprintf(szString,CountArray(szString),TEXT("昵称:%s [ %s ]"),pIClientUserItem->GetNickName(),pszUserOrder); pDC->DrawText(szString,lstrlen(szString),&rcNickName,DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); //游戏等级 LPCTSTR pszKindName=pIGameLevelParser->GetKindName(); LPCTSTR pszGameLevel=pIGameLevelParser->GetLevelDescribe(pIClientUserItem); _sntprintf(szString,CountArray(szString),TEXT("级别:%s [ %s ]"),pszGameLevel,pszKindName); pDC->DrawText(szString,lstrlen(szString),&rcGameLevel,DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); //用户经验 DWORD dwExperience=pIClientUserItem->GetUserExperience(); _sntprintf(szString,CountArray(szString),TEXT("经验:%d 级"),GetExperienceLevel(dwExperience)); INT nExperienceLength=pDC->DrawText(szString,lstrlen(szString),&rcExperience,DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); //经验标志 if (dwExperience>0L) { DrawExperience(pDC,rcExperience.left+nExperienceLength*6+15,rcExperience.top-4L,dwExperience); } //用户标识 _sntprintf(szString,CountArray(szString),TEXT("号码:%ld"),pIClientUserItem->GetGameID()); pDC->DrawText(szString,lstrlen(szString),&rcUserGameID,DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); //释放资源 ImageNameCard.ReleaseDC(); return; }
//绘画背景 BOOL CGameFrameMedalView::OnEraseBkgnd(CDC * pDC) { //获取位置 CRect rcClient; GetClientRect(&rcClient); //建立缓冲 CImage ImageBuffer; ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32); //创建 DC CImageDC BufferDC(ImageBuffer); CDC * pBufferDC=CDC::FromHandle(BufferDC); //设置缓冲 pBufferDC->SetBkMode(TRANSPARENT); pBufferDC->SetTextAlign(TA_LEFT|TA_TOP); pBufferDC->SetTextColor(RGB(250,250,250)); pBufferDC->SelectObject(CSkinResourceManager::GetInstance()->GetDefaultFont()); //加载资源 CImage ImageUserMedalL; CImage ImageUserMedalM; CImage ImageUserMedalR; ImageUserMedalL.LoadFromResource(GetModuleHandle(GAME_FRAME_DLL_NAME),IDB_USER_MEDAL_L); ImageUserMedalM.LoadFromResource(GetModuleHandle(GAME_FRAME_DLL_NAME),IDB_USER_MEDAL_M); ImageUserMedalR.LoadFromResource(GetModuleHandle(GAME_FRAME_DLL_NAME),IDB_USER_MEDAL_R); //变量定义 INT nXStartPos=ImageUserMedalL.GetWidth(); INT nXConcludePos=rcClient.Width()-ImageUserMedalR.GetWidth(); //绘画框架 ImageUserMedalL.BitBlt(BufferDC,0,0); ImageUserMedalR.BitBlt(BufferDC,rcClient.Width()-ImageUserMedalR.GetWidth(),0); //绘画中间 for (INT nXPos=nXStartPos;nXPos<nXConcludePos;nXPos+=ImageUserMedalM.GetWidth()) { INT nCXDraw=__min(ImageUserMedalM.GetWidth(),nXConcludePos-nXPos); ImageUserMedalM.BitBlt(BufferDC,nXPos,0,nCXDraw,ImageUserMedalM.GetHeight(),0,0); } //加载资源 CPngImageSB ImageCount; CPngImageSB ImageStringL; CPngImageSB ImageStringR; ImageCount.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME),TEXT("MEDAL_COUNT")); ImageStringL.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME),TEXT("MEDAL_STRING_L")); ImageStringR.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME),TEXT("MEDAL_STRING_R")); //获取大小 CSize SizeCount; CSize SizeStringL; CSize SizeStringR; SizeCount.SetSize(ImageCount.GetWidth()/10L,ImageCount.GetHeight()); SizeStringL.SetSize(ImageStringL.GetWidth(),ImageStringL.GetHeight()); SizeStringR.SetSize(ImageStringR.GetWidth(),ImageStringR.GetHeight()); //构造奖牌 TCHAR szUserMedal[16]=TEXT(""); _sntprintf(szUserMedal,CountArray(szUserMedal),TEXT("%ld"),m_dwUserMedal); //变量定义 INT nNumCount=lstrlen(szUserMedal); INT nNumStart=(rcClient.Width()-nNumCount*SizeCount.cx)/2+10; //绘画字符 ImageStringL.DrawImage(pBufferDC,nNumStart-SizeStringL.cx-3,4); ImageStringR.DrawImage(pBufferDC,nNumStart+nNumCount*SizeCount.cx+3,4); //绘画奖牌 for (INT i=0;i<nNumCount;i++) { INT nXImage=(szUserMedal[i]-TEXT('0'))*SizeCount.cx; ImageCount.DrawImage(pBufferDC,nNumStart+i*SizeCount.cx,7,SizeCount.cx,SizeCount.cy,nXImage,0); } //绘画界面 pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY); return TRUE; }
//建立消息 INT CGameFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (__super::OnCreate(lpCreateStruct)==-1) return -1; //设置窗口 ModifyStyle(WS_CAPTION,0,0); ModifyStyleEx(WS_BORDER|WS_EX_CLIENTEDGE|WS_EX_WINDOWEDGE,0,0); //设置窗口 ModifyStyle(0, WS_MINIMIZEBOX); ModifyStyle(0, WS_MAXIMIZEBOX); //变量定义 ASSERT(CGlobalUnits::GetInstance()!=NULL); CGlobalUnits * pGlobalUnits=CGlobalUnits::GetInstance(); //查询接口 m_pIClientKernel=(IClientKernel *)pGlobalUnits->QueryGlobalModule(MODULE_CLIENT_KERNEL,IID_IClientKernel,VER_IClientKernel); m_pIGameFrameView=(IGameFrameView *)pGlobalUnits->QueryGlobalModule(MODULE_GAME_FRAME_VIEW,IID_IGameFrameView,VER_IGameFrameView); //创建按钮 CRect rcCreate(0,0,0,0); m_btMin.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MIN); m_btMax.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MAX); m_btClose.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_CLOSE); m_btOption.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_OPTION); m_btMuteContrl.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MUTE); m_btRule.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_RULE); m_btControl.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_CONTROL); //设置按钮 HINSTANCE hInstance=GetModuleHandle(GAME_FRAME_DLL_NAME); m_btMin.SetButtonImage(IDB_BT_MIN,hInstance,false,false); m_btMax.SetButtonImage(IDB_BT_MAX,hInstance,false,false); m_btClose.SetButtonImage(IDB_BT_CLOSE,TEXT("BT_CLOSE"),hInstance,false,false); m_btOption.SetButtonImage(IDB_BT_OPTION,hInstance,false,false); m_btMuteContrl.SetButtonImage((pGlobalUnits->m_bMuteStatuts==false)?IDB_BT_MUTE:IDB_BT_SLIENT,hInstance,false,false); m_btRule.SetButtonImage(IDB_BT_RULE,hInstance,false,false); m_btControl.SetButtonImage(IDB_BT_CONTROL_BACK,(m_bShowControl==false)?TEXT("BT_GAME_LIST_SHOW"):TEXT("BT_GAME_LIST_HIDE"),hInstance,true,false); //控制窗口 AfxSetResourceHandle(hInstance); m_GameFrameControl.Create(IDD_GAME_CONTROL,this); m_SkinSplitter.Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_SKIN_SPLITTER); //提示控件 m_ToolTipCtrl.Create(this); m_ToolTipCtrl.Activate(TRUE); m_ToolTipCtrl.AddTool(&m_btMin,TEXT("最小化")); m_ToolTipCtrl.AddTool(&m_btMax,TEXT("最大化")); m_ToolTipCtrl.AddTool(&m_btClose,TEXT("关闭游戏")); //设置位置 CSize SizeRestrict; SizeRestrict.SetSize(LESS_SCREEN_CX,LESS_SCREEN_CY); //设置分辨率 m_ScreenMetrics.cx = ::GetSystemMetrics(SM_CXSCREEN); m_ScreenMetrics.cy = ::GetSystemMetrics(SM_CYSCREEN); //窗口位置 CRect rcArce; SystemParametersInfo(SPI_GETWORKAREA,0,&rcArce,SPIF_SENDCHANGE); //读取位置 CWHRegKey InfoKeyItem; if (InfoKeyItem.OpenRegKey(REG_INTERFACE_INFO,false)==true) { SizeRestrict.cx=InfoKeyItem.GetValue(TEXT("ScreenWidth"),rcArce.Width()/2); SizeRestrict.cy=InfoKeyItem.GetValue(TEXT("ScreenHeight"),rcArce.Height()/2); } //位置调整 SizeRestrict.cx=__max(LESS_SCREEN_CX,SizeRestrict.cx); SizeRestrict.cy=__max(LESS_SCREEN_CY,SizeRestrict.cy); SizeRestrict.cx=__min(rcArce.Width(),SizeRestrict.cx); SizeRestrict.cy=__min(rcArce.Height(),SizeRestrict.cy); //移动窗口 m_rcNormalSize.top=(rcArce.Height()-SizeRestrict.cy)/2; m_rcNormalSize.left=(rcArce.Width()-SizeRestrict.cx)/2; m_rcNormalSize.right=m_rcNormalSize.left+SizeRestrict.cx; m_rcNormalSize.bottom=m_rcNormalSize.top+SizeRestrict.cy; SetWindowPos(NULL,m_rcNormalSize.left,m_rcNormalSize.top,m_rcNormalSize.Width(),m_rcNormalSize.Height(),SWP_NOZORDER); //创建视图 ASSERT(m_pIGameFrameView!=NULL); if (m_pIGameFrameView!=NULL) m_pIGameFrameView->CreateGameViewWnd(this,IDC_GAME_CLIENT_VIEW); //动画控件 IUnknownEx * pIUnknownEx=QUERY_ME_INTERFACE(IFlashControlSink); m_FlashControl.CreateControl(this,CRect(0,0,FALSH_MOVIE_CX,FALSH_MOVIE_CY),pIUnknownEx); m_FlashControl.ShowControl(SW_HIDE); //设置控件 m_btControl.SetParent(&m_SkinSplitter); m_SkinSplitter.SetSplitterEvent(this); m_SkinSplitter.SetSplitterType(SplitterType_Vor); m_SkinSplitter.SetSplitterColor(RGB(165,113,0)); //注册接口 m_pIClientKernel->SetClientPropertySink(QUERY_ME_INTERFACE(IClientPropertySink)); //显示窗口 //MaxSizeWindow(); //设置滚动 m_SkinScrollBar.InitScroolBar(this); return 0L; }
void CSgSelectionPreparationBar::CreateSgSettingButtons(UINT &nYPos) { CRect rcClient; GetClientRect(&rcClient); CRect rcElement; CPoint ptElementPosition; CSize szElement; m_rcOtherButtons.SetRectEmpty(); m_rcOtherButtons.left = X_OFFSET_SMALL; m_rcOtherButtons.top = nYPos + Y_OFFSET_SMALL; ptElementPosition.SetPoint(3 * X_OFFSET, nYPos + Y_OFFSET); //Checkbox Record Audio CString csTitle; //szElement.SetSize(BUTTON_WIDTH, BUTTON_HEIGHT + Y_OFFSET); //rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, // ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); //CString csTitle; //csTitle = LoadMyString(IDS_PREP_REC_AUDIO); //m_btnRecordAudio.Create(/*_T("Record Audio")*/csTitle, WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_MULTILINE, // rcElement, this, IDC_RECORDAUDIO); //m_btnRecordAudio.SetFlatStyle(TRUE); //m_btnRecordAudio.SetTheme(xtpButtonThemeStandard); //m_btnRecordAudio.SetFont(&m_Font1); //m_btnRecordAudio.SetTransparent(TRUE); //ptElementPosition.Offset(0, BUTTON_HEIGHT + /*2**/Y_OFFSET_SMALL); //Checkbox Record Show/Hide Presentationbar //szElement.SetSize(RADIOBUTTON_WIDTH, BUTTON_HEIGHT + Y_OFFSET); szElement.SetSize(BUTTON_WIDTH, BUTTON_HEIGHT + Y_OFFSET); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_SHOW_HIDE); m_btnShowHidePresentationBar.Create(/*_T("Show/Hide Presentationbar")*/csTitle, WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_MULTILINE, rcElement, this, IDC_SHOWPRESENTATIONBAR); m_btnShowHidePresentationBar.SetFlatStyle(TRUE); m_btnShowHidePresentationBar.SetTheme(xtpButtonThemeStandard); m_btnShowHidePresentationBar.SetTransparent(TRUE); m_btnShowHidePresentationBar.SetFont(&m_Font1); ptElementPosition.Offset(-X_OFFSET, BUTTON_HEIGHT + 2*Y_OFFSET); // Hotkey buttons // Start/Stop szElement.SetSize(BUTTON_WIDTH, 2* TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_SHORTCUT); m_txtShortcut.Create(/*_T("Shortcut to stop Recording")*/csTitle, WS_VISIBLE | WS_CHILD , rcElement, this,IDC_STATIC); m_txtShortcut.SetFont(&m_Font1); ptElementPosition.Offset(0, 2*TEXT_HEIGHT + Y_OFFSET_SMALL); szElement.SetSize(TEXT_WIDTH, TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_CTRL); m_txtStartStopUseCtrl.Create(/*_T("ctrl")*/csTitle, WS_VISIBLE | WS_CHILD, rcElement, this,IDC_STATIC); m_txtStartStopUseCtrl.SetFont(&m_Font1); ptElementPosition.Offset(0, TEXT_HEIGHT); szElement.SetSize(CHECKBOX_WIDTH, CHECKBOX_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnStartStopUseCtrl.Create(_T("+"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | WS_TABSTOP | BS_TOP, rcElement, this, IDC_CHECK_START_CTRL); m_btnStartStopUseCtrl.SetFlatStyle(TRUE); m_btnStartStopUseCtrl.SetTheme(xtpButtonThemeStandard); m_btnStartStopUseCtrl.SetFont(&m_Font1); m_btnStartStopUseCtrl.SetTransparent(TRUE); ptElementPosition.Offset(CHECKBOX_WIDTH + X_OFFSET_SMALL, -TEXT_HEIGHT); szElement.SetSize(TEXT_WIDTH, TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_txtStartStopUseShft.Create(_T("shift"), WS_VISIBLE | WS_CHILD, rcElement, this, IDC_STATIC); m_txtStartStopUseShft.SetFont(&m_Font1); ptElementPosition.Offset(0, TEXT_HEIGHT); szElement.SetSize(CHECKBOX_WIDTH, CHECKBOX_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnStartStopUseShft.Create(_T("+"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | WS_TABSTOP | BS_TOP, rcElement, this, IDC_CHECK_START_SHIFT); m_btnStartStopUseShft.SetFlatStyle(TRUE); m_btnStartStopUseShft.SetTheme(xtpButtonThemeStandard); m_btnStartStopUseShft.SetFont(&m_Font1); m_btnStartStopUseShft.SetTransparent(TRUE); ptElementPosition.Offset(CHECKBOX_WIDTH + X_OFFSET_SMALL, -TEXT_HEIGHT); szElement.SetSize(TEXT_WIDTH, TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_txtStartStopUseAlt.Create(_T("alt"), WS_VISIBLE | WS_CHILD, rcElement, this,IDC_STATIC); m_txtStartStopUseAlt.SetFont(&m_Font1); ptElementPosition.Offset(0, TEXT_HEIGHT); szElement.SetSize(CHECKBOX_WIDTH, CHECKBOX_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnStartStopUseAlt.Create(_T("+"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | WS_TABSTOP | BS_TOP, rcElement, this, IDC_CHECK_START_ALT); m_btnStartStopUseAlt.SetFlatStyle(TRUE); m_btnStartStopUseAlt.SetTheme(xtpButtonThemeStandard); m_btnStartStopUseAlt.SetFont(&m_Font1); m_btnStartStopUseAlt.SetTransparent(TRUE); ptElementPosition.Offset(CHECKBOX_WIDTH + X_OFFSET_SMALL, 0); szElement.SetSize(COMBO_WIDTH, COMBO_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y-5, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy + 200); m_cmbStartStop.Create(WS_VISIBLE | WS_CHILD |CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP, rcElement, this, IDC_COMBO_START); m_cmbStartStop.SetFont(&m_Font2); ptElementPosition.Offset(-3*(CHECKBOX_WIDTH + X_OFFSET_SMALL), COMBO_HEIGHT /*+ Y_OFFSET*/); UpdateHotKeyButton(); // SG Settings button /*szElement.SetSize(BUTTON_WIDTH, BUTTON_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnShowSgSettings.Create(_T("Settings"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rcElement, this, IDC_SHOWSGSETTINGS); ptElementPosition.Offset(0, BUTTON_HEIGHT + Y_OFFSET);*/ // Record button ptElementPosition.Offset(-X_OFFSET_SMALL, 0); szElement.SetSize(BUTTON_WIDTH, BUTTON_HEIGHT * 2); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_START_REC); m_btnStartRecording.Create(/*_T("Start Recording")*/csTitle, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rcElement, this, IDC_STARTRECORDING); SetButtonImage(&m_btnStartRecording, IDR_RECORD, CSize(32, 32)); m_btnStartRecording.SetTheme(xtpButtonThemeOffice2007/*xtpButtonThemeStandard*/); m_btnStartRecording.SetShowFocus(FALSE); m_btnStartRecording.SetFont(&m_Font2); ptElementPosition.Offset(0, BUTTON_HEIGHT); m_rcOtherButtons.right = rcClient.Width() - X_OFFSET_SMALL; m_rcOtherButtons.bottom = ptElementPosition.y + Y_OFFSET_SMALL; nYPos = ptElementPosition.y + Y_OFFSET; }
void CSgSelectionPreparationBar::CreateAudioButtons(UINT &nYPos) { CRect rcClient; GetClientRect(&rcClient); CRect rcElement; CPoint ptElementPosition; CSize szElement; m_rcAudioSettings.SetRectEmpty(); m_rcAudioSettings.left = X_OFFSET_SMALL; m_rcAudioSettings.top = nYPos + Y_OFFSET_SMALL; ptElementPosition.SetPoint(X_OFFSET + X_OFFSET_SMALL, nYPos + Y_OFFSET); CString csTitle; csTitle = LoadMyString(IDS_PREP_REC_SETTINGS); //Button Record Settings szElement.SetSize(BUTTON_WIDTH_SMALL, BUTTON_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnShowSgSettings.Create(/*_T("Record Settings")*/csTitle, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rcElement, this, IDC_SHOWSGSETTINGS); m_btnShowSgSettings.SetTheme(xtpButtonThemeOffice2007/*xtpButtonThemeStandard*/); m_btnShowSgSettings.SetShowFocus(FALSE); m_btnShowSgSettings.SetFont(&m_Font2); ptElementPosition.Offset(0, BUTTON_HEIGHT + Y_OFFSET_SMALL); //Button Audio Settings szElement.SetSize(BUTTON_WIDTH_SMALL, BUTTON_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_AUDIO_SETTINGS); m_btnAudioSettings.Create(/*_T("Audio Settings")*/csTitle, WS_CHILD | WS_VISIBLE, rcElement, this, IDC_SHOWAUDIOSETTINGS); m_btnAudioSettings.SetTheme(xtpButtonThemeOffice2007/*xtpButtonThemeStandard*/); m_btnAudioSettings.SetShowFocus(FALSE); m_btnAudioSettings.SetFont(&m_Font2); //ptElementPosition.Offset(0, BUTTON_HEIGHT); ptElementPosition.Offset(BUTTON_WIDTH_SMALL + 2/* + X_NEW_OFFSET*/ /*- 5*X_OFFSET*/, -(BUTTON_HEIGHT + Y_OFFSET)); //Slider Audio Volume //szElement.SetSize(/*SLIDER_WIDTH*/BUTTON_HEIGHT , BUTTON_HEIGHT * 2 + Y_OFFSET * 2); szElement.SetSize(24,SLIDER_WIDTH / 2); rcElement.SetRect(ptElementPosition.x - 8, ptElementPosition.y -3, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy-1); m_sldAudioInputLevel.Create(WS_CHILD | WS_VISIBLE | TBS_VERT |TBS_BOTH | WS_TABSTOP, rcElement, this, IDC_AUDIO_SLIDER); //ptElementPosition.Offset(-(AUDIOLEVEL_WIDTH + X_OFFSET_SMALL), AUDIOLEVEL_HEIGHT + Y_OFFSET); ptElementPosition.Offset(BUTTON_HEIGHT + X_OFFSET_SMALL /*+ X_NEW_OFFSET*/ , 2*Y_OFFSET); //Indicator Audio Level szElement.SetSize(AUDIOLEVEL_WIDTH, AUDIOLEVEL_HEIGHT ); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_pAudioInputLevelIndicator = new CAudioLevelIndicator((AudioLevelIndicatorListener *)this); m_pAudioInputLevelIndicator->Create(NULL, WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_CENTERIMAGE | SS_BITMAP, rcElement, this, IDC_VIEW_AUDIO); //m_pAudioInputLevelIndicator->SetPosition(); ptElementPosition.Offset(AUDIOLEVEL_WIDTH + X_OFFSET_SMALL, AUDIOLEVEL_HEIGHT); /*szElement.SetSize(SLIDER_WIDTH, BUTTON_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_sldAudioInputLevel.Create(WS_CHILD | WS_VISIBLE | TBS_HORZ | TBS_BOTH | WS_TABSTOP, rcElement, this, IDC_AUDIO_SLIDER); ptElementPosition.Offset(-(AUDIOLEVEL_WIDTH + X_OFFSET_SMALL), AUDIOLEVEL_HEIGHT + Y_OFFSET); */ /*szElement.SetSize(BUTTON_WIDTH, BUTTON_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnAudioSettings.Create(_T("Audio Settings"), WS_CHILD | WS_VISIBLE, rcElement, this, IDC_SHOWAUDIOSETTINGS); ptElementPosition.Offset(0, BUTTON_HEIGHT);*/ m_rcAudioSettings.right = rcClient.Width() - X_OFFSET_SMALL; m_rcAudioSettings.bottom = ptElementPosition.y + Y_OFFSET_SMALL; nYPos = ptElementPosition.y + Y_OFFSET; }
void CSgSelectionPreparationBar::CreateSgSelectionButtons(UINT &nYPos) { CRect rcClient; GetClientRect(&rcClient); CRect rcElement; CPoint ptElementPosition; CSize szElement; m_rcSelectionButtons.SetRectEmpty(); m_rcSelectionButtons.left = X_OFFSET_SMALL; m_rcSelectionButtons.top = nYPos + Y_OFFSET_SMALL; ptElementPosition.SetPoint(X_OFFSET + X_OFFSET_SMALL, nYPos + Y_OFFSET * 2); // "FullScreen" button //szElement.SetSize(RADIOBUTTON_WIDTH, BUTTON_HEIGHT); CString csTitle; csTitle = LoadMyString(IDS_PREP_FULLSCREEN); szElement.SetSize(SEL_MODE_WIDTH, SEL_MODE_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_btnRecordFullScreen.Create(/*_T("Fullscreen")*/csTitle, WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, rcElement, this, IDC_RECORDFULLSCREEN); SetButtonImage(&m_btnRecordFullScreen, IDR_FULL_SCREEN, CSize(32, 32)); m_btnRecordFullScreen.SetFlatStyle(TRUE); m_btnRecordFullScreen.SetTheme(xtpButtonThemeOffice2007/*xtpButtonThemeStandard*/); m_btnRecordFullScreen.SetTextImageRelation(xtpButtonImageAboveText); m_btnRecordFullScreen.SetShowFocus(FALSE); m_btnRecordFullScreen.SetTransparent(TRUE); m_btnRecordFullScreen.SetFont(&m_Font1); m_btnRecordFullScreen.SetChecked(m_bRecordFullScreen); //ptElementPosition.Offset(0, BUTTON_HEIGHT + Y_OFFSET); ptElementPosition.Offset(SEL_MODE_WIDTH + X_OFFSET_SMALL, 0); // "Custom" button //szElement.SetSize(RADIOBUTTON_WIDTH, BUTTON_HEIGHT); szElement.SetSize(SEL_MODE_WIDTH, SEL_MODE_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_CUSTOM); m_btnRecordCustom.Create(/*_T("Custom Area")*/csTitle, WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, rcElement, this, IDC_RECORDCUSTOM); SetButtonImage(&m_btnRecordCustom, IDR_CUSTOM_AREA, CSize(32, 32)); m_btnRecordCustom.SetFlatStyle(TRUE); m_btnRecordCustom.SetTheme(xtpButtonThemeOffice2007/*xtpButtonThemeStandard*/); m_btnRecordCustom.SetTextImageRelation(xtpButtonImageAboveText); m_btnRecordCustom.SetShowFocus(FALSE); m_btnRecordCustom.SetTransparent(TRUE); m_btnRecordCustom.SetFont(&m_Font1); m_btnRecordCustom.SetChecked(!m_bRecordFullScreen); //ptElementPosition.Offset(0, BUTTON_HEIGHT + Y_OFFSET); ptElementPosition.Offset(-(SEL_MODE_WIDTH + X_OFFSET_SMALL), SEL_MODE_HEIGHT + Y_OFFSET); CRect rcDesktop; MfcUtils::GetDesktopRectangle(rcDesktop); UINT nEditStyle = WS_VISIBLE | WS_CHILD | ES_NUMBER | ES_CENTER; UINT nSpinStyle = WS_CHILD | WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS| UDS_NOTHOUSANDS; CRect rcSelection; if (m_pSelectionListener != NULL) m_pSelectionListener->GetLastCustomRect(rcSelection); else rcSelection.SetRectEmpty(); //Create Edit boxes ptElementPosition.Offset(X_OFFSET, Y_OFFSET_SMALL); szElement.SetSize(TEXT_WIDTH_SMALL , TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_txtX.Create(_T("X:"), WS_VISIBLE | WS_CHILD, rcElement, this,IDC_STATIC); m_txtX.SetFont(&m_Font2); ptElementPosition.Offset(TEXT_WIDTH_SMALL, -Y_OFFSET_SMALL); szElement.SetSize(EDIT_WIDTH, EDIT_HEIGHT); rcElement.SetRect(ptElementPosition.x , ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_edtLeft.Create(nEditStyle, rcElement, this, IDC_EDIT_X); m_edtLeft.SetFont(&m_Font3/*m_Font2*/); m_spnLeft.Create(nSpinStyle, rcElement, this, IDC_SPIN_X); m_spnLeft.SetRange32(0, rcDesktop.Width()); m_spnLeft.SetBuddy(&m_edtLeft); m_spnLeft.SetPos32(rcSelection.left); ptElementPosition.Offset(EDIT_WIDTH + X_OFFSET, 0); ptElementPosition.Offset(-2 + X_NEW_OFFSET / 2, Y_OFFSET_SMALL); szElement.SetSize(TEXT_WIDTH + X_OFFSET_SMALL , TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_WIDTH); m_txtWidth.Create(/*_T("Width:")*/csTitle, WS_VISIBLE | WS_CHILD | SS_RIGHT, rcElement, this,IDC_STATIC); m_txtWidth.SetFont(&m_Font2); ptElementPosition.Offset(TEXT_WIDTH + X_OFFSET_SMALL + 2, -Y_OFFSET_SMALL); szElement.SetSize(EDIT_WIDTH, EDIT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_edtWidth.Create(nEditStyle, rcElement, this, IDC_EDIT_WIDTH); m_edtWidth.SetFont(&m_Font3/*m_Font2*/); m_spnWidth.Create(nSpinStyle, rcElement, this, IDC_SPIN_WIDTH); m_spnWidth.SetRange32(0, rcDesktop.Width()); m_spnWidth.SetBuddy(&m_edtWidth); m_spnWidth.SetPos32(rcSelection.Width()); ptElementPosition.Offset(-(X_OFFSET + TEXT_WIDTH_SMALL + X_OFFSET_SMALL+ EDIT_WIDTH + TEXT_WIDTH), EDIT_HEIGHT + Y_OFFSET_SMALL); ptElementPosition.Offset(/*0 */- X_NEW_OFFSET / 2 , Y_OFFSET_SMALL); szElement.SetSize(TEXT_WIDTH_SMALL , TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_txtY.Create(_T("Y:"), WS_VISIBLE | WS_CHILD, rcElement, this,IDC_STATIC); m_txtY.SetFont(&m_Font2); ptElementPosition.Offset(TEXT_WIDTH_SMALL, -Y_OFFSET_SMALL); szElement.SetSize(EDIT_WIDTH, EDIT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_edtTop.Create(nEditStyle, rcElement, this, IDC_EDIT_Y); m_edtTop.SetFont(&m_Font3/*m_Font2*/); m_spnTop.Create(nSpinStyle, rcElement, this, IDC_SPIN_Y); m_spnTop.SetRange32(0, rcDesktop.Height()); m_spnTop.SetBuddy(&m_edtTop); m_spnTop.SetPos32(rcSelection.top); ptElementPosition.Offset(EDIT_WIDTH + X_OFFSET ,0); ptElementPosition.Offset(-2 + X_NEW_OFFSET / 2, Y_OFFSET_SMALL); szElement.SetSize(TEXT_WIDTH + X_OFFSET_SMALL, TEXT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_HEIGHT); m_txtHeight.Create(/*_T("Height:")*/csTitle, WS_VISIBLE | WS_CHILD | SS_RIGHT, rcElement, this,IDC_STATIC); m_txtHeight.SetFont(&m_Font2); ptElementPosition.Offset(TEXT_WIDTH + X_OFFSET_SMALL + 2, -Y_OFFSET_SMALL); szElement.SetSize(EDIT_WIDTH, EDIT_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); m_edtHeight.Create(nEditStyle, rcElement, this, IDC_EDIT_HEIGHT); m_edtHeight.SetFont(&m_Font3/*m_Font2*/); m_spnHeight.Create(nSpinStyle, rcElement, this, IDC_SPIN_HEIGHT); m_spnHeight.SetRange32(0, rcDesktop.Height()); m_spnHeight.SetBuddy(&m_edtHeight); m_spnHeight.SetPos32(rcSelection.Height()); ptElementPosition.Offset(-(EDIT_WIDTH + X_OFFSET + TEXT_WIDTH + TEXT_WIDTH_SMALL), EDIT_HEIGHT + Y_OFFSET); ptElementPosition.Offset(-X_OFFSET - X_OFFSET_SMALL - X_NEW_OFFSET / 2, 0); // "StartSelection" button szElement.SetSize(BUTTON_WIDTH, BUTTON_HEIGHT); rcElement.SetRect(ptElementPosition.x, ptElementPosition.y, ptElementPosition.x + szElement.cx, ptElementPosition.y + szElement.cy); csTitle.Empty(); csTitle = LoadMyString(IDS_PREP_START_SEL); m_btnStartSelection.Create(/*_T("Start Selection")*/csTitle, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rcElement, this, IDC_STARTSELECTION); m_btnStartSelection.SetTheme(xtpButtonThemeOffice2007/*xtpButtonThemeStandard*/); m_btnStartSelection.SetShowFocus(FALSE); m_btnStartSelection.SetFont(&m_Font2); ptElementPosition.Offset(0, BUTTON_HEIGHT); m_rcSelectionButtons.right = rcClient.Width() - X_OFFSET_SMALL; m_rcSelectionButtons.bottom = ptElementPosition.y + Y_OFFSET_SMALL; nYPos = ptElementPosition.y + Y_OFFSET; }
//鼠标消息 VOID CSkinSplitter::OnLButtonUp(UINT nFlags, CPoint Point) { __super::OnLButtonUp(nFlags, Point); if (m_bMouseDown==true) { //恢复状态 ReleaseCapture(); //获取 DC CDC * pDC=CDC::FromHandle(::GetDC(NULL)); pDC->SelectObject(CDC::GetHalftoneBrush()); //绘画线条 pDC->PatBlt(m_rcDrawLine.left,m_rcDrawLine.top,m_rcDrawLine.Width(),m_rcDrawLine.Height(),PATINVERT); //释放资源 ::ReleaseDC(NULL,pDC->m_hDC); //变量定义 bool bRectify=false; //获取位置 CRect rcControl; GetClientRect(&rcControl); MapWindowPoints(GetParent(),rcControl); //转换坐标 CPoint PointParent=Point; MapWindowPoints(GetParent(),&PointParent,1); //控件位置 CSize SizeControl; SizeControl.SetSize(rcControl.Width(),rcControl.Height()); //调整位置 if (m_SplitterType==SplitterType_Hor) { //移动位置 PointParent.y=__min(m_nMaxDragPos-SizeControl.cy/2,PointParent.y); PointParent.y=__max(m_nMinDragPos+SizeControl.cy/2,PointParent.y); //移动窗口 if (rcControl.top!=(PointParent.y-SizeControl.cy/2)) { bRectify=true; SetWindowPos(NULL,rcControl.left,PointParent.y-SizeControl.cy/2,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); } } else { //移动位置 PointParent.x=__min(m_nMaxDragPos-SizeControl.cx/2,PointParent.x); PointParent.x=__max(m_nMinDragPos+SizeControl.cx/2,PointParent.x); //移动窗口 if (rcControl.left!=(PointParent.x-SizeControl.cx/2)) { bRectify=true; SetWindowPos(NULL,PointParent.x-SizeControl.cx/2,rcControl.top,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); } } //发送通知 if (bRectify==true) { //发送通知 if (m_pISplitterEvent!=NULL) { UINT uControlID=GetWindowLong(GetSafeHwnd(),GWL_ID); m_pISplitterEvent->OnSplitterEvent(uControlID,PointParent.x,PointParent.y); } } //设置变量 m_bMouseDown=false; m_rcDrawLine.SetRectEmpty(); } return; }
//绘画界面 void CGameClientView::DrawGameView(CDC * pDC, int nWidth, int nHeight) { //地震效果 if(m_bFalsh) { CImageHandle ImageHandleBack(&m_ImageViewBack); int xValue=rand()%ROCK; int yValue=rand()%ROCK; if(xValue%2==0)xValue*=(-1); if(yValue%2==0)yValue*=(-1); m_ImageViewBack.AlphaDrawImage(pDC,(nWidth/2-512)+xValue,(nHeight/2-397)+yValue, m_ImageViewBack.GetWidth(),m_ImageViewBack.GetHeight(),0,0,RGB(255,0,255)); } else { CImageHandle ImageHandleBack(&m_ImageViewBack); m_ImageViewBack.AlphaDrawImage(pDC,(nWidth/2-512+6),(nHeight/2-383), m_ImageViewBack.GetWidth(),m_ImageViewBack.GetHeight(),0,0,RGB(255,0,255)); //绘画背景 //DrawViewImage(pDC,m_ImageViewCenter,enMode_Spread);//用于最大化窗口 //DrawViewImage(pDC,m_ImageViewBack,enMode_Centent); } if(!m_bStopDraw) { //绘画用户 for (WORD i=0;i<GAME_PLAYER;i++) { //变量定义 WORD wUserTimer=GetUserTimer(i); const tagUserData * pUserData=GetUserInfo(i); #ifdef _DEBUG ////测试代码 //tagUserData Obj; //Obj.cbGender = 1; //_sntprintf(Obj.szName,sizeof(Obj.szName),TEXT("用户的名字")); //Obj.cbUserStatus=US_READY; ////Obj.wFaceID = 2; //pUserData = &Obj; ////庄家标志 //CImageHandle ImageHandleBanker(&m_ImageBanker); //m_ImageBanker.AlphaDrawImage(pDC,m_PointBanker[i].x,m_PointBanker[i].y,m_ImageBanker.GetWidth(),m_ImageBanker.GetHeight(),0,0,RGB(255,0,255)); #endif //绘画用户 if (pUserData!=NULL) { //用户名字 pDC->SetTextAlign(TA_CENTER); pDC->SetTextColor((wUserTimer>0)?RGB(250,250,250):RGB(220,220,220)); DrawTextString(pDC,pUserData->szName,RGB(255,255,255),RGB(0,0,0),m_ptFace[i].x+15,m_ptFace[i].y+35); //用户金币 TCHAR szBuffer[64]=TEXT(""); LONG lLeaveScore=pUserData->lScore-((m_ScoreView.IsWindowVisible()==TRUE)?(0):(m_lTableScore[i]));//; if(m_lStopUpdataScore[i]>0)lLeaveScore=m_lStopUpdataScore[i]-m_lTableScore[i]; _snprintf(szBuffer,sizeof(szBuffer),TEXT("¥%ld"),lLeaveScore); DrawTextString(pDC,szBuffer,RGB(255,255,255),RGB(0,0,0),m_ptFace[i].x+10,m_ptFace[i].y+48); //其他信息 //wUserTimer =1; if (wUserTimer!=0) { if(m_CardControl[MY_SELF_CHAIRID].GetCardCount()==0) DrawUserTimer(pDC,m_ptFace[i].x+m_nXFace/2,m_ptTimer[i].y+90,wUserTimer); else DrawUserTimer(pDC,m_ptTimer[i].x,m_ptTimer[i].y,wUserTimer); } //准备标志 if (pUserData->cbUserStatus==US_READY) { DrawUserReady(pDC,m_ptReady[i].x,m_ptReady[i].y); } DrawUserFace(pDC,pUserData,m_ptFace[i].x,m_ptFace[i].y,pUserData->cbUserStatus==US_OFFLINE); } } //计算总注 LONG lTableScore=0L; for (WORD i=0;i<GAME_PLAYER;i++) lTableScore+=m_lTableScore[i]; //总注信息 if (lTableScore>0L) { CImageHandle ImageHandle3(&m_ImageNumber); int iCount=0; LONG lCell[11]; ZeroMemory(lCell,sizeof(lCell)); while(lTableScore>0L) { LONG lScore=lTableScore%10; lCell[iCount++] = lScore; lTableScore=lTableScore/10; } int iTemp=0; int iX=m_ImageNumber.GetWidth(); for (int i=iCount-1;i>=0;i--) { m_ImageNumber.AlphaDrawImage(pDC,nWidth/2+39+(iX/10)*(iTemp++),nHeight/2-296, iX/10,m_ImageNumber.GetHeight(),iX/10*lCell[i],0,RGB(255,0,255)); } } //庄家信息 if (m_wBankerUser!=INVALID_CHAIR) { //庄家标志 CImageHandle ImageHandleBanker(&m_ImageBanker); m_ImageBanker.AlphaDrawImage(pDC,m_PointBanker[m_wBankerUser].x,m_PointBanker[m_wBankerUser].y,m_ImageBanker.GetWidth(),m_ImageBanker.GetHeight(),0,0,RGB(255,0,255)); } //不存在个数 for (BYTE i=0;i<GAME_PLAYER;i++) { //绘画判断 //m_lCurrentScore[i] = 100000; if (m_lCurrentScore[i]==0L) continue; LONG lTemp=m_lCurrentScore[i]; LONG lTimes[]={10,20,50,100,200,500,1000,2000,5000,10000,20000,50000,100000,200000,500000}; for (BYTE k=CountArray(lTimes)-1;;k--) { if(lTemp>=lTimes[k]) { //绘画信息 tagGoldMes tagTemp; tagTemp.lDrawCount = (lTemp/lTimes[k]); tagTemp.lGoldType = k; m_lDrawGold[i].Add(tagTemp); while((tagTemp.lDrawCount--)>0) { //随机位置 int xTemp=rand(); int yTemp=rand(); int bRandX=nWidth/2-25+xTemp%60*((xTemp%2==0)?1:(-1)); int bRandY=nHeight/2-70+yTemp%60*((yTemp%2==0)?1:(-1)); //保存随机位置 CPoint ptTemp; ptTemp.SetPoint(bRandX,bRandY); m_ptKeepJeton[i].Add(ptTemp); } lTemp%=lTimes[k]; if(lTemp==0)break; } } m_lCurrentScore[i]=0L; } //绘画筹码 for (BYTE i=0;i<GAME_PLAYER;i++) { //m_lTableScore[i] = 100000; if (m_lTableScore[i]==0L ) continue; CImageHandle HandleJeton(&m_ImageJeton); //固定位置输出 int Count=0; for(int j=0;j<(m_lDrawGold[i].GetCount());j++) { LONG lDrawCount = m_lDrawGold[i].GetAt(j).lDrawCount; while((lDrawCount--)>0) { CPoint cpTemp=m_ptKeepJeton[i].GetAt(Count++); m_ImageJeton.AlphaDrawImage(pDC,cpTemp.x,cpTemp.y,m_ImageJeton.GetWidth()/15, m_ImageJeton.GetHeight(),m_ImageJeton.GetWidth()/15*(m_lDrawGold[i].GetAt(j).lGoldType),0,RGB(255,0,255)); if(Count==100)break; } if(Count==100)break; } //绘画数目 TCHAR szBuffer[64]; _snprintf(szBuffer,CountArray(szBuffer),TEXT("$:%ld"),m_lTableScore[i]); //计算位置 CRect rcDrawRect; rcDrawRect.top=m_CardControl[i].GetCardPos().y; rcDrawRect.left=m_CardControl[i].GetCardPos().x+((i>2)?(135):(-50)); rcDrawRect.right=rcDrawRect.left+30; rcDrawRect.bottom=rcDrawRect.top+12; //创建字体 CFont ViewFont; ViewFont.CreateFont(-14,0,0,0,700,0,0,0,134,3,2,1,2,TEXT("宋体")); //设置字体 CFont * pOldFont=pDC->SelectObject(&ViewFont); //绘画数目 pDC->SetTextAlign(TA_LEFT); pDC->SetTextColor(RGB(250,200,40)); pDC->DrawText(szBuffer,lstrlen(szBuffer),&rcDrawRect,DT_CENTER|DT_VCENTER|DT_NOCLIP|DT_SINGLELINE); //清理字体 pDC->SelectObject(pOldFont); } //绘画信息 if(m_lCellScore>0) { //创建字体 CFont ViewFont; ViewFont.CreateFont(-12,0,0,0,700,0,0,0,134,3,2,1,2,TEXT("宋体")); //设置字体 CFont * pOldFont=pDC->SelectObject(&ViewFont); pDC->SetTextAlign(TA_LEFT); pDC->SetTextColor(RGB(0,0,0)); //计算位置 CRect rcDrawRect; //绘画数目 TCHAR szBuffer[64]; _snprintf(szBuffer,CountArray(szBuffer),TEXT("封顶:%ld"),m_lMaxCellScore); rcDrawRect.top=nHeight/2-338; rcDrawRect.left=nWidth/2-233; rcDrawRect.right=rcDrawRect.left+50; rcDrawRect.bottom=rcDrawRect.top+12; pDC->DrawText(szBuffer,lstrlen(szBuffer),&rcDrawRect,DT_CENTER|DT_VCENTER|DT_NOCLIP|DT_SINGLELINE); _snprintf(szBuffer,CountArray(szBuffer),TEXT("单注:%ld"),m_lCellScore); rcDrawRect.top=nHeight/2-318; rcDrawRect.left=nWidth/2-230; rcDrawRect.right=rcDrawRect.left+50; rcDrawRect.bottom=rcDrawRect.top+12; pDC->DrawText(szBuffer,lstrlen(szBuffer),&rcDrawRect,DT_CENTER|DT_VCENTER|DT_NOCLIP|DT_SINGLELINE); //清理字体 pDC->SelectObject(pOldFont); } //选比标志 if(m_bCompareCard) { for (int i=0;i<GAME_PLAYER;i++) { if(m_bCompareUser[i]==TRUE) { CPoint cPost=m_CardControl[i].GetCardPos(); CImageHandle ImageArrowhead(&m_ImageArrowhead); m_ImageArrowhead.AlphaDrawImage(pDC,cPost.x,cPost.y-m_ImageArrowhead.GetHeight(), m_ImageArrowhead.GetWidth(),m_ImageArrowhead.GetHeight(),0,0,RGB(255,0,255)); } } } } //发牌绘画 if (m_SendCardItemArray.GetCount()>0) { //变量定义 CImageHandle HandleCard(&m_ImageCard); tagSendCardItem * pSendCardItem=&m_SendCardItemArray[0]; //获取大小 int nItemWidth=m_ImageCard.GetWidth()/13; int nItemHeight=m_ImageCard.GetHeight()/5; //绘画扑克 int nXPos=m_SendCardPos.x-nItemWidth/2; int nYPos=m_SendCardPos.y-nItemHeight/2+10; m_ImageCard.AlphaDrawImage(pDC,nXPos,nYPos,nItemWidth,nItemHeight,nItemWidth*2,nItemHeight*4,RGB(255,0,255)); } //比牌扑克 if (m_wLoserUser!=INVALID_CHAIR) { //送牌状态 if (m_wConmareIndex<m_wConmareCount) { //绘画扑克 for (BYTE i=0;i<2;i++) { //变量定义 CPoint PointCard; CPoint PointStart=m_ptUserCard[m_wCompareChairID[i]]; //计算位置 INT nQuotiety=(i==0)?-1:1; PointCard.y=PointStart.y+(m_ptUserCompare.y-PointStart.y)*m_wConmareIndex/m_wConmareCount; PointCard.x=PointStart.x+(m_ptUserCompare.x-PointStart.x+COMPARE_RADII*nQuotiety)*m_wConmareIndex/m_wConmareCount; //绘画扑克 DrawCompareCard(pDC,PointCard.x,PointCard.y,false); } } //比牌状态 if ((m_wConmareIndex>=m_wConmareCount)&&((m_wConmareIndex<m_wConmareCount+VSCARD_COUNT*VSCARD_TIME))) { //绘画扑克 for (BYTE i=0;i<2;i++) { //变量定义 CPoint PointCard; CPoint PointStart=m_ptUserCard[m_wCompareChairID[i]]; //计算位置 INT nQuotiety=(i==0)?-1:1; PointCard.y=m_ptUserCompare.y; PointCard.x=m_ptUserCompare.x+COMPARE_RADII*nQuotiety; //绘画扑克 DrawCompareCard(pDC,PointCard.x,PointCard.y,false); } //比牌标志 CSize SizeVSCard; CPngImage ImageVSCard; ImageVSCard.LoadImage(AfxGetInstanceHandle(),TEXT("VS_CARD")); SizeVSCard.SetSize(ImageVSCard.GetWidth()/VSCARD_COUNT,ImageVSCard.GetHeight()); //绘画标志 INT nImageIndex=(m_wConmareIndex-m_wConmareCount)%VSCARD_COUNT; ImageVSCard.DrawImage(pDC,m_ptUserCompare.x-SizeVSCard.cx/2,m_ptUserCompare.y-SizeVSCard.cy/2, SizeVSCard.cx,SizeVSCard.cy,nImageIndex*SizeVSCard.cx,0); //声音效果 CGameClientDlg * pGameClientDlg=CONTAINING_RECORD(this,CGameClientDlg,m_GameClientView); pGameClientDlg->PlayGameSound(AfxGetInstanceHandle(),TEXT("COMPARE_CARD")); } //回牌状态 if (m_wConmareIndex>=m_wConmareCount+VSCARD_COUNT*VSCARD_TIME) { //变量定义 WORD wConmareIndex=m_wConmareIndex-m_wConmareCount-VSCARD_COUNT*VSCARD_TIME; //绘画扑克 for (BYTE i=0;i<2;i++) { //变量定义 CPoint PointCard; CPoint PointStart=m_ptUserCard[m_wCompareChairID[i]]; //计算位置 INT nQuotiety=(i==0)?-1:1; PointCard.y=m_ptUserCompare.y+(PointStart.y-m_ptUserCompare.y)*wConmareIndex/m_wConmareCount; PointCard.x=m_ptUserCompare.x+COMPARE_RADII*nQuotiety+(PointStart.x-m_ptUserCompare.x-COMPARE_RADII*nQuotiety)*wConmareIndex/m_wConmareCount; //绘画扑克 DrawCompareCard(pDC,PointCard.x,PointCard.y,(m_wLoserUser==m_wCompareChairID[i])?true:false); } //声音效果 if(m_wConmareIndex==m_wConmareCount+VSCARD_COUNT*VSCARD_TIME) { CGameClientDlg * pGameClientDlg=CONTAINING_RECORD(this,CGameClientDlg,m_GameClientView); pGameClientDlg->PlayGameSound(AfxGetInstanceHandle(),TEXT("CENTER_SEND_CARD")); } } } //等待选择 if(m_wWaitUserChoice!=INVALID_CHAIR) { TCHAR szBuffer[64]=TEXT(""); //创建字体 CFont ViewFont; ViewFont.CreateFont(-15,0,0,0,700,0,0,0,134,3,2,1,2,TEXT("宋体")); //设置字体 CFont * pOldFont=pDC->SelectObject(&ViewFont); pDC->SetTextAlign(TA_CENTER); //输出信息 if(m_wWaitUserChoice==TRUE)_sntprintf(szBuffer,sizeof(szBuffer),TEXT("等待玩家选择比牌")); else _sntprintf(szBuffer,sizeof(szBuffer),TEXT("请选择玩家进行比牌")); DrawTextString(pDC,szBuffer,RGB(50,50,50),RGB(0,170,0),nWidth/2+10,nHeight/2+45); //清理字体 pDC->SelectObject(pOldFont); } return; }
//设置区域 VOID CLayeredWindow::InitLayeredArea(CDC * pDCImage, BYTE cbAlpha, CRect & rcUnLayered, CPoint & PointRound, bool bUnLayeredChild) { //效验参数 ASSERT((pDCImage!=NULL)&&(pDCImage->m_hDC!=NULL)); if ((pDCImage==NULL)||(pDCImage->m_hDC==NULL)) return; //变量定义 BITMAP Bitmap; ZeroMemory(&Bitmap,sizeof(Bitmap)); //获取图像 CBitmap * pBitmap=pDCImage->GetCurrentBitmap(); if (pBitmap!=NULL) pBitmap->GetBitmap(&Bitmap); //获取大小 CSize SizeImage; SizeImage.SetSize(Bitmap.bmWidth,Bitmap.bmHeight); //效验大小 ASSERT((SizeImage.cx>0)&&(SizeImage.cy>0)); if ((SizeImage.cx==0)||(SizeImage.cy==0)) return; //变量定义 BLENDFUNCTION BlendFunction; ZeroMemory(&BlendFunction,sizeof(BlendFunction)); //设置参数 BlendFunction.BlendOp=0; BlendFunction.BlendFlags=0; BlendFunction.AlphaFormat=AC_SRC_ALPHA; BlendFunction.SourceConstantAlpha=cbAlpha; //设置分层 CPoint ImagePoint(0,0); CClientDC ClientDC(this); UpdateLayeredWindow(&ClientDC,NULL,&SizeImage,pDCImage,&ImagePoint,0L,&BlendFunction,ULW_ALPHA); //创建区域 CRgn RegionResult; RegionResult.CreateRectRgn(0,0,SizeImage.cx,SizeImage.cy); //窗口排除 if (bUnLayeredChild==true) { //变量定义 tagEnumChildInfo EnumChildInfo; ZeroMemory(&EnumChildInfo,sizeof(EnumChildInfo)); //设置变量 EnumChildInfo.pWndLayered=this; EnumChildInfo.pWndControl=m_pWndControl; EnumChildInfo.pRegionResult=&RegionResult; //枚举窗口 ASSERT(m_pWndControl->GetSafeHwnd()!=NULL); EnumChildWindows(m_pWndControl->m_hWnd,EnumChildProc,(LPARAM)&EnumChildInfo); } //区域排除 if (rcUnLayered.IsRectEmpty()==FALSE) { //创建区域 CRgn RegionUnLayered; RegionUnLayered.CreateRoundRectRgn(rcUnLayered.left,rcUnLayered.top,rcUnLayered.right+1,rcUnLayered.bottom+1,PointRound.x,PointRound.y); //合并区域 RegionResult.CombineRgn(&RegionResult,&RegionUnLayered,RGN_DIFF); } //设置区域 SetWindowRgn(RegionResult,TRUE); return; }
HRESULT CmadVRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev) { if (!pD3DDev) { // release all resources m_pSubPicQueue = NULL; m_pAllocator = NULL; return S_OK; } CSize size; switch (GetRenderersSettings().nSPMaxTexRes) { case 0: size = m_ScreenSize; break; case 384: size.SetSize(384, 288); break; case 512: size.SetSize(512, 384); break; case 640: size.SetSize(640, 480); break; case 800: size.SetSize(800, 600); break; case 1024: size.SetSize(1024, 768); break; case 1280: default: size.SetSize(1280, 720); break; case 1320: size.SetSize(1320, 900); break; case 1920: size.SetSize(1920, 1080); break; case 2560: size.SetSize(2560, 1600); break; } if (m_pAllocator) { m_pAllocator->ChangeDevice(pD3DDev); } else { m_pAllocator = DNew CDX9SubPicAllocator(pD3DDev, size, true); if (!m_pAllocator) { return E_FAIL; } } HRESULT hr = S_OK; m_pSubPicQueue = GetRenderersSettings().nSPCSize > 0 ? (ISubPicQueue*)DNew CSubPicQueue(GetRenderersSettings().nSPCSize, !GetRenderersSettings().bSPCAllowAnimationWhenBuffering, false, m_pAllocator, &hr) : (ISubPicQueue*)DNew CSubPicQueueNoThread(!GetRenderersSettings().bSPCAllowAnimationWhenBuffering, m_pAllocator, &hr); if (!m_pSubPicQueue || FAILED(hr)) { return E_FAIL; } if (m_SubPicProvider) { m_pSubPicQueue->SetSubPicProvider(m_SubPicProvider); } return hr; }
HRESULT CDXRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev) { CheckPointer(pD3DDev, E_POINTER); CSize size; switch(GetRenderersSettings().nSPCMaxRes) { case 0: default: size = m_ScreenSize; break; case 1: size.SetSize(1024, 768); break; case 2: size.SetSize(800, 600); break; case 3: size.SetSize(640, 480); break; case 4: size.SetSize(512, 384); break; case 5: size.SetSize(384, 288); break; case 6: size.SetSize(2560, 1600); break; case 7: size.SetSize(1920, 1080); break; case 8: size.SetSize(1320, 900); break; case 9: size.SetSize(1280, 720); break; } if(m_pAllocator) { m_pAllocator->ChangeDevice(pD3DDev); } else { m_pAllocator = DNew CDX9SubPicAllocator(pD3DDev, size, GetRenderersSettings().fSPCPow2Tex, true); if(!m_pAllocator) { return E_FAIL; } } HRESULT hr = S_OK; m_pSubPicQueue = GetRenderersSettings().nSPCSize > 0 ? (ISubPicQueue*)DNew CSubPicQueue(GetRenderersSettings().nSPCSize, !GetRenderersSettings().fSPCAllowAnimationWhenBuffering, m_pAllocator, &hr) : (ISubPicQueue*)DNew CSubPicQueueNoThread(m_pAllocator, &hr); if(!m_pSubPicQueue || FAILED(hr)) { return E_FAIL; } if(m_SubPicProvider) { m_pSubPicQueue->SetSubPicProvider(m_SubPicProvider); } return S_OK; }
HRESULT CmadVRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev) { if (!pD3DDev) { // release all resources m_pSubPicQueue = nullptr; m_pAllocator = nullptr; return S_OK; } CSize size; switch (GetRenderersSettings().nSPCMaxRes) { case 0: default: size = m_ScreenSize; break; case 1: size.SetSize(1024, 768); break; case 2: size.SetSize(800, 600); break; case 3: size.SetSize(640, 480); break; case 4: size.SetSize(512, 384); break; case 5: size.SetSize(384, 288); break; case 6: size.SetSize(2560, 1600); break; case 7: size.SetSize(1920, 1080); break; case 8: size.SetSize(1320, 900); break; case 9: size.SetSize(1280, 720); break; } if (m_pAllocator) { m_pAllocator->ChangeDevice(pD3DDev); } else { m_pAllocator = DEBUG_NEW CDX9SubPicAllocator(pD3DDev, size, GetRenderersSettings().fSPCPow2Tex, true); if (!m_pAllocator) { return E_FAIL; } } HRESULT hr = S_OK; if (!m_pSubPicQueue) { CAutoLock(this); m_pSubPicQueue = GetRenderersSettings().nSPCSize > 0 ? (ISubPicQueue*)DEBUG_NEW CSubPicQueue(GetRenderersSettings().nSPCSize, !GetRenderersSettings().fSPCAllowAnimationWhenBuffering, m_pAllocator, &hr) : (ISubPicQueue*)DEBUG_NEW CSubPicQueueNoThread(m_pAllocator, &hr); } else { m_pSubPicQueue->Invalidate(); } if (!m_pSubPicQueue || FAILED(hr)) { return E_FAIL; } if (m_SubPicProvider) { m_pSubPicQueue->SetSubPicProvider(m_SubPicProvider); } return S_OK; }