Beispiel #1
1
//鼠标消息
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;
}
Beispiel #3
0
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;
}
//绘画数字
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;
}
Beispiel #5
0
//获取尺寸
VOID CFaceItemControl::GetFaceItemSize(CSize & SizeFace)
{
	//设置变量
	SizeFace.SetSize(FACE_CX,FACE_CY);

	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;
    }
Beispiel #7
0
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;
}
Beispiel #8
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);

}
Beispiel #9
0
//绘画消息
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;
}
//建立消息
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;
}
Beispiel #14
0
//绘画背景
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;
}
Beispiel #15
0
//绘画界面
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;
}
Beispiel #16
0
//设置区域
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;
}
Beispiel #18
0
//鼠标消息
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 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;
}
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;
}
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;
}
Beispiel #22
0
//+---------------------------------------------------------------------------
//
//  Member:     CDispRoot::ScrollRect
//
//  Synopsis:   Smoothly scroll the content in the given rect by the indicated
//              delta, and draw the newly-exposed content.
//
//  Arguments:  rcScroll        rect to scroll
//              scrollDelta     direction to scroll (one axis only!)
//              pDispScroller   which scroller node is calling
//              rgnInvalid      additional invalid area (used to invalidate
//                              scroll bars)
//              fMayScrollDC    TRUE if it would be okay to use ScrollDC
//
//  Returns:    TRUE if we used ScrollDC to do it.
//
//  Notes:
//
//----------------------------------------------------------------------------
BOOL CDispRoot::ScrollRect(
        const CRect& rcScroll,
        const CSize& scrollDelta,
        CDispScroller* pScroller,
        const CRegion& rgnInvalid,
        BOOL fMayScrollDC)
{
    Assert(!scrollDelta.IsZero());
    AssertSz(!_fDrawLock, "CView is not preventing recursive draw calls into CDispRoot. :)\nCDispRoot::ScrollRect called inside Draw.");

    if(_fDrawLock && _pDispObserver==NULL)
	{
		return FALSE;
	}

    BOOL fTemporaryRenderSurface = FALSE;
    HDC hdcSave = NULL;
    if(_pRenderSurface == NULL)
    {
        _pRenderSurface = new CDispSurface();
        if(_pRenderSurface == NULL)
		{
			return FALSE;
		}
        fTemporaryRenderSurface = TRUE;
    }
    else
    {
        // swap current DC
        hdcSave = _pRenderSurface->GetRawDC();
		_pRenderSurface->SetRawDC(NULL);
    }

    // for efficiency, we draw top-level scroll bars specially (no banding,
    // no invalidation)
    if(pScroller==_pFirstChildNode &&  _fCanScrollDC)
    {
        _pRenderSurface->SetRawDC(_pDispObserver->GetClientDC(&_rcContainer));

        _drawContext.SetDispSurface(_pRenderSurface);
        _drawContext._prgnRedraw = (CRegion*)&rgnInvalid;
        _drawContext._offset = _rcContainer.TopLeft().AsSize();
        _drawContext._rcClip.SetRect(_rcContainer.Size());
        _drawContext._pClientData = NULL;
        _drawContext._pRedrawRegionStack = NULL;
        _pRenderSurface->SetBandOffset(_rcContainer.TopLeft().AsSize());
        _pRenderSurface->SetClipRgn(_drawContext._prgnRedraw);
        pScroller->DrawScrollbars(&_drawContext, DISPSCROLLBARHINT_NOBUTTONDRAW);
    }
    else
    {
        // add scroll bar invalid region to accumulated invalid region
        InvalidateRoot(rgnInvalid, FALSE, FALSE);
    }

    // invalidate entire scrolled area synchronously if we must
    // BUGBUG: Once ScrollRect is moved into CView, the check for LAYOUT_FORCE should be merged...
    if(!_fCanScrollDC || !fMayScrollDC || (((CView*)_pDispObserver)->GetLayoutFlags()&LAYOUT_FORCE))
    {
SyncInvalidate:
        if(_pRenderSurface->GetRawDC() != NULL)
        {
            _pDispObserver->ReleaseClientDC(_pRenderSurface->GetRawDC());
        }
        if(fTemporaryRenderSurface)
        {
            delete _pRenderSurface;
            _pRenderSurface = NULL;
        }
        else
		{
			_pRenderSurface->SetRawDC(hdcSave);
		}

        InvalidateRoot(rcScroll, TRUE, TRUE);

        return FALSE;
    }

    // notify the client of the scroll event
    _pDispClient->NotifyScrollEvent((RECT*)&rcScroll, (SIZE*)&scrollDelta);

    //
    // scroll synchronously
    //

    // get a DC if we didn't do it above
    if(_pRenderSurface->GetRawDC() == NULL)
    {
        _pRenderSurface->SetRawDC(_pDispObserver->GetClientDC(&_rcContainer));
    }

    // make sure we don't have any clip region, or ScrollDC won't report
    // the correct invalid region
    ::SelectClipRgn(_pRenderSurface->GetRawDC(), NULL);

    HRGN hrgn = ::CreateRectRgnIndirect(&_afxGlobalData._Zero.rc);
    if(!hrgn)
	{
		goto SyncInvalidate;
	}

    Verify(::ScrollDC(_pRenderSurface->GetRawDC(), scrollDelta.cx, scrollDelta.cy, &rcScroll, &rcScroll, hrgn, NULL));

    InvalidateRoot(hrgn, FALSE, TRUE);
    ::DeleteObject(hrgn);

    // release the surface/HDC
	_pDispObserver->ReleaseClientDC(_pRenderSurface->GetRawDC());
    
    if(fTemporaryRenderSurface)
    {
        delete _pRenderSurface;
        _pRenderSurface = NULL;
    }
    else
	{
		_pRenderSurface->SetRawDC(hdcSave);
	}

    // synchronously redraw revealed content
    _pDispObserver->DrawSynchronous(NULL, NULL, NULL);

    return TRUE;
}