⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uihandle.cpp

📁 蓝牙设备搜索与连接 RDSTerminal
💻 CPP
字号:
#include "StdAfx.h"

#include "UIHandle.h"

//
// 将缓冲 data 中的数据在客户区 rcClient 中绘出曲线来
//
void DrawCurveByDataBuffer ( CDC *pDC, CRect &rcClient, COLORREF clr, BYTE *data, int size, int nCellSize/*=1*/, int nStepX/*=0*/ )
{
	if ( !pDC || !pDC->GetSafeHdc() || !data || size <= nCellSize ) return;

	ASSERT ( nCellSize <= sizeof(DWORD) );

	// 创建兼容的内存DC
	CDC memDC;
	if ( !memDC.CreateCompatibleDC(pDC) )
		return;
	// 创建兼容的给内存DC做图的位图
	CBitmap memBmp;
	if ( !memBmp.CreateCompatibleBitmap(pDC,rcClient.Width(),rcClient.Height()+1) )
	{
		memDC.DeleteDC ();
		return;
	}
	CBitmap *pOldmap = memDC.SelectObject(&memBmp);
	if ( !pOldmap )
	{
		memDC.DeleteDC ();
		memBmp.DeleteObject ();
		return;
	}

	// 在内存DC中作图
	CPen Pen, *pOldPen;
	VERIFY(Pen.CreatePen(PS_SOLID, 1, clr ));
	pOldPen = memDC.SelectObject ( &Pen );

	DWORD dwMaxValue = GetHexDataByBitNum ( nCellSize*8 );
	DWORD dwCountValue = 0;
	memcpy ( &dwCountValue, data, nCellSize );
	int y = (int) ( (double)dwCountValue * (double)rcClient.Height() / (double)dwMaxValue );
	memDC.MoveTo ( 0, y );
	float fStepX = 0.0;
	if ( nStepX != 0 )
		fStepX = (float)nStepX;
	else
		fStepX = (float)rcClient.Width() / (float)(size/nCellSize-1);
	float fLineX = 0;
	for ( int i=nCellSize; i<size; i+=nCellSize )
	{
		fLineX += fStepX;
		if ( (int)fLineX > rcClient.Width() )
		{
			ASSERT ( FALSE );
			break;
		}
		dwCountValue = 0;
		memcpy ( &dwCountValue, &data[i], nCellSize );
	//	TRACE ( L"i = %d, Value = 0x%x, fLineX = %d\n", i, dwCountValue, (int)fLineX );
		y = (int) ( (double)dwCountValue * (double)rcClient.Height() / (double)dwMaxValue );

		memDC.LineTo ( (int)fLineX, y );
	}

	// 将内存中的DC图写到屏幕上
	VERIFY ( pDC->BitBlt ( rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height()+1, &memDC, 0, 0, SRCCOPY ) );
	if ( pOldmap ) memDC.SelectObject(pOldmap);
	Pen.DeleteObject();
	if ( pOldPen ) memDC.SelectObject ( pOldPen );
	memDC.DeleteDC ();
	memBmp.DeleteObject ();
}


// 删除某个窗体对象实例
void DeleteInstance ( CWnd **ppWnd )
{
	if ( !ppWnd || !(*ppWnd) ) return;
	if ( ::IsWindow((*ppWnd)->m_hWnd) )
		(*ppWnd)->DestroyWindow();
	delete (*ppWnd);
	(*ppWnd) = NULL;
}

//
// 获取工作区间大小
//
CSize GetWorkAreaSize ()
{
	CSize sz;
	RECT rect;
	SystemParametersInfo ( SPI_GETWORKAREA,0,&rect,0 );
	sz.cx = rect.right - rect.left;
    sz.cy = rect.bottom - rect.top;
	return sz;
}
//
// 处理微调按钮
//
void HandleSpanClick(
		CWnd *pOwnerWnd,
		UINT nEditCtrlID,
		NMHDR* pNMHDR,
		LRESULT* pResult,
		int nMaxValue,
		int nMinValue,
		int nInterval/*=1*/)
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	int nNumber = pOwnerWnd->GetDlgItemInt ( nEditCtrlID, NULL );
	if ( nInterval < 1 ) nInterval = 1;
	BOOL nMultiple = ( ( nNumber % nInterval ) == 0 );	// 是否为整数倍

	if ( pNMUpDown->iDelta == 1 )	// 减少
	{
		if ( nMultiple )
			nNumber -= nInterval;
		else
			nNumber = ( nNumber / nInterval * nInterval );

	}
	else	// 增加
	{
		if ( nMultiple )
			nNumber += nInterval;
		else
			nNumber = ( ( nNumber / nInterval + 1 ) * nInterval );
	}

	if ( nNumber > nMaxValue )
			nNumber = nMaxValue;
	if ( nNumber < nMinValue )
			nNumber = nMinValue;

	pOwnerWnd->SetDlgItemInt ( nEditCtrlID, nNumber );
	CEdit *pEdit = (CEdit*)pOwnerWnd->GetDlgItem(nEditCtrlID);
	ASSERT ( pEdit );
	pEdit->SetSel ( 0, -1 );
	pEdit->SetFocus();

	*pResult = 0;
}

//
// 从文件中读取一个位图文件
//
BOOL LoadBitmapFromFile(CBitmap &bmp, LPCTSTR lpszBmpPath)
{
	if ( !lpszBmpPath || strlen_s(lpszBmpPath) < 1 ) return FALSE;

	HBITMAP hBitmap = NULL;
#ifdef WINCE
	hBitmap = SHLoadDIBitmap ( lpszBmpPath );
#else
	hBitmap = (HBITMAP)::LoadImage(NULL, lpszBmpPath, IMAGE_BITMAP,
                    0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
#endif
	if( hBitmap == NULL)
	{
		return FALSE;
	}
	if ( bmp.GetSafeHandle() )
	{
		bmp.DeleteObject();
	}
	bmp.Attach(hBitmap);
	return TRUE;
}

void DrawBitmap ( CBitmap &bmp, CDC *pDC, CRect &rc, BOOL bStretch )
{
	if ( bmp.GetSafeHandle() && pDC )
	{		
		CDC memDC;
		memDC.CreateCompatibleDC ( pDC );
		CBitmap *pOB = memDC.SelectObject ( &bmp );

		if ( bStretch )
		{
			BITMAP BitMap;
			bmp.GetBitmap ( &BitMap );
			pDC->StretchBlt ( rc.left,
				rc.top,
				rc.Width(),
				rc.Height(),
				&memDC,
				0,
				0,
				BitMap.bmWidth,
				BitMap.bmHeight,
				SRCCOPY );
		}
		else
		{
			pDC->BitBlt ( rc.left, rc.top, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY );
		}
		memDC.SelectObject ( pOB );
		memDC.DeleteDC();
	}
}

HCURSOR f_hCursor_Last = NULL;
void SetWaitCursor ()
{
	f_hCursor_Last = GetCursor();//save the current cursor
	SetCursor(LoadCursor(NULL, IDC_WAIT));// set the wait cursor while searching
}

void ResotreCursor ()
{
	if ( !f_hCursor_Last )
		f_hCursor_Last = LoadCursor(NULL, IDC_ARROW);

	SetCursor(f_hCursor_Last);		// restore cursor
	f_hCursor_Last = NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -