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

📄 unidialog.cpp

📁 阅读HTML格式小说的工具。 伪装成Outlook Express的邮件。 可以定制收件人等Mail信息。
💻 CPP
字号:
// UniDialog.cpp : implementation file
//

#include "stdafx.h"
#include "HtmlBrowser.h"
#include "UniDialog.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUniDialog
HWND CUniDialog::m_hWndAccExtForm = NULL;
CUniDialog::CUniDialog(CWnd* pParent)
{
	m_pRgn = NULL;
	m_WinWidth = 0;
	m_WinHeight = 0;
	m_isMouseMoving = FALSE;
	m_isLButtonDown = FALSE;
	m_ShowStatus = SW_HIDE;
	m_Sticked = TRUE;
	m_bEnableStick = FALSE;
	m_NullRect = CRect(0,0,0,0);
	m_OldMovingBorder = CRect(0,0,0,0);
//add by guanxin
//	m_CallKB = NULL;
//add end
}

CUniDialog::CUniDialog(UINT nIDTemplate, CWnd* pParentWnd)
	:CDialog( nIDTemplate, pParentWnd)
{
	m_pRgn = NULL;
	m_WinWidth = 0;
	m_WinHeight = 0;
	m_isMouseMoving = FALSE;
	m_isLButtonDown = FALSE;
	m_ShowStatus = SW_HIDE;
	m_Sticked = TRUE;
	m_bEnableStick = FALSE;
	m_NullRect = CRect(0,0,0,0);
	m_OldMovingBorder = CRect(0,0,0,0);
}

CUniDialog::~CUniDialog()
{
	if ( m_pRgn != NULL ) {
		m_pRgn->DeleteObject();
	}
}


BEGIN_MESSAGE_MAP(CUniDialog, CDialog)
	//{{AFX_MSG_MAP(CUniDialog)
	ON_WM_CTLCOLOR()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CUniDialog message handlers

BOOL CUniDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	if ( m_pRgn != NULL ) {
		SetWindowRgn( HRGN(*m_pRgn), TRUE );
	}
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

HBRUSH CUniDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
 	switch ( nCtlColor ) {
 	case CTLCOLOR_DLG:
 		return static_cast<HBRUSH>(m_BkBrush.GetSafeHandle());
 	default:
 		break;
 	}
 	return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

void CUniDialog::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if ( m_isLButtonDown ) {
		CRect rc;

		// Calculate New Rect
		rc.left = m_OldRect.left + point.x - m_OldPosition.x;
		rc.top = m_OldRect.top + point.y - m_OldPosition.y;
		if ( m_WinWidth != 0 && m_WinHeight != 0 ) {
			rc.right = m_OldRect.left + point.x - m_OldPosition.x + m_WinWidth;
			rc.bottom = m_OldRect.top + point.y - m_OldPosition.y + m_WinHeight;
		}
		else {
			rc.right = m_OldRect.right + point.x - m_OldPosition.x;
			rc.bottom = m_OldRect.bottom + point.y - m_OldPosition.y;
		}

		// Draw New Rect
		if ( m_bEnableStick && IsNearStickArea( rc) ) {
			if ( m_Sticked == FALSE ) {
				DrawMovingRect(::GetDC(NULL), &m_StickRect );
			}
			m_Sticked = TRUE;
		}
		else {
			m_Sticked = FALSE;
			DrawMovingRect(::GetDC(NULL), &rc );
		}

		m_isMouseMoving = TRUE;
		m_OldTmpPosition = point;
	}
	
	CDialog::OnMouseMove(nFlags, point);
}

void CUniDialog::DrawMovingRect(HDC hDC, LPRECT lprc)
{
	int nOldMode=::SetROP2(hDC,R2_XORPEN);
	HPEN penWhite=::CreatePen(PS_SOLID,1,RGB(255,255,255));
	HGDIOBJ OldPen=::SelectObject(hDC,penWhite);

	// Clear Old Border
	if ( m_OldMovingBorder != m_NullRect ) {
		::MoveToEx(hDC,m_OldMovingBorder.left,m_OldMovingBorder.top,NULL);
		::LineTo(hDC,m_OldMovingBorder.right,m_OldMovingBorder.top);
		::LineTo(hDC,m_OldMovingBorder.right,m_OldMovingBorder.bottom);
		::LineTo(hDC,m_OldMovingBorder.left,m_OldMovingBorder.bottom);
		::LineTo(hDC,m_OldMovingBorder.left,m_OldMovingBorder.top);
	}

	// Draw New Border
	if ( lprc != NULL ) {
		::MoveToEx(hDC,lprc->left,lprc->top,NULL);
		::LineTo(hDC,lprc->right,lprc->top);
		::LineTo(hDC,lprc->right,lprc->bottom);
		::LineTo(hDC,lprc->left,lprc->bottom);
		::LineTo(hDC,lprc->left,lprc->top);

		m_OldMovingBorder = *lprc;
	}
	else {
		m_OldMovingBorder = CRect(0,0,0,0);
	}

	::SelectObject(hDC,OldPen);
	::SetROP2(hDC,nOldMode);

	// Release resource
	::DeleteObject( penWhite);
}

void CUniDialog::SetWinSize(int cx, int cy)
{
	m_WinHeight = cy;
	m_WinWidth = cx;
}

void CUniDialog::SetDlgRgn(CRgn *pRgn)
{
	m_pRgn = pRgn;
}

void CUniDialog::SetBkBitmapID(UINT nIDBkBitmap)
{
	m_BkBitmap.LoadBitmap( nIDBkBitmap);
	m_BkBrush.CreatePatternBrush( &m_BkBitmap);
}


UINT CUniDialog::GetShowStatus()
{
	return m_ShowStatus;
}

void CUniDialog::SetShowStatus(UINT nShowStatus)
{
	if ( nShowStatus == SW_SHOW ) {
		m_ShowStatus = SW_SHOW;
	}
	else if ( nShowStatus == SW_HIDE ) {
		m_ShowStatus = SW_HIDE;
	}
	else {
		ASSERT(0);
	}
}

void CUniDialog::Exit()
{
	m_ShowStatus = SW_HIDE;

	OnOK();
}

void CUniDialog::GetRealWinRect(CRect *pRect)
{
	CRect cRect;

	GetWindowRect( &cRect);

	*pRect = cRect;

	if ( m_WinWidth != 0 && m_WinHeight != 0 ) {
		pRect->right = pRect->left + m_WinWidth;
		pRect->bottom = pRect->top + m_WinHeight;
	}
}

BOOL CUniDialog::EnableStick(BOOL bEnable )
{
	BOOL bOldStatus;

	bOldStatus = m_bEnableStick;

	m_bEnableStick = bEnable;

	return bOldStatus;
}

void CUniDialog::SetStickRect(CRect stStickRect)
{
	m_StickRect = stStickRect;
}

BOOL CUniDialog::IsNearStickArea( CRect stNewPos)
{
	if ( stNewPos.left - m_StickRect.left <= 15 && 
		 stNewPos.left - m_StickRect.left >= -15 &&
		 stNewPos.top - m_StickRect.top <= 15 &&
		 stNewPos.top - m_StickRect.top >= -15 ) {
		return TRUE;
	}

	return FALSE;
}

BOOL CUniDialog::GetStickStatus()
{
	return m_Sticked;
}

void CUniDialog::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_isLButtonDown = TRUE;

	m_OldPosition = point;
	m_OldTmpPosition = point;

	SetCapture();

	GetWindowRect( &m_OldRect );
	m_isMouseMoving = FALSE;
	
	CDialog::OnLButtonDown(nFlags, point);
}

void CUniDialog::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_isLButtonDown = FALSE;

	ReleaseCapture();

	if ( m_isMouseMoving ) {
		int x,y;

		x = point.x - m_OldPosition.x;
		y = point.y - m_OldPosition.y;

		CRect rc;

		if ( m_bEnableStick && m_Sticked ) {
			// Clear Old Rect
			DrawMovingRect(::GetDC(NULL), NULL );

			// Move window
			MoveWindow( &m_StickRect);
		}
		else {
			// Clear Old Rect
			DrawMovingRect(::GetDC(NULL), NULL );

			// Move window
			GetWindowRect( &rc);

			if ( m_WinWidth != 0 && m_WinHeight != 0 ) {
				MoveWindow( rc.left + x, rc.top + y, m_WinWidth, m_WinHeight );
			}
			else {
				MoveWindow( rc.left + x, rc.top + y, rc.Width(), rc.Height() );
			}
		}
		if (m_hWndAccExtForm)
		{
//			rc.right = rc.left + x + rc.Width();
//			rc.bottom = rc.top + y + rc.Height();
//			rc.left += x;
//			rc.top += y;

//			ScreenToClient(&rc);

//			BOOL bRet = ::MoveWindow(
//				m_hWndAccExtForm,     // handle to window
//				rc.left + x +38,          // horizontal position
//				rc.top + y + 44,          // vertical position
//				480,     // width
//				234,    // height
//				true   // repaint flag
//				);

			BOOL bRet = ::MoveWindow(
				m_hWndAccExtForm,     // handle to window
				38,          // horizontal position
				44,          // vertical position
				480,     // width
				234,    // height
				true   // repaint flag
				);
			::SetActiveWindow(m_hWndAccExtForm);
			if (!bRet)
			{
				DWORD dwError = ::GetLastError();
			}
			
			Sleep(0);
			RedrawWindow();
		}
	}

	m_isMouseMoving = FALSE;
	
	CDialog::OnLButtonUp(nFlags, point);
}

void CUniDialog::MoveWindowToStick()
{
	MoveWindow( &m_StickRect);
	m_Sticked = TRUE;
}

void CUniDialog::GetWinSize(int *picx, int *picy)
{
	if ( m_WinWidth != 0 && m_WinHeight != 0 ) {
		*picx = m_WinWidth;
		*picy = m_WinHeight;
	}
	else {
		CRect rc;

		GetWindowRect( &rc);

		*picx = rc.Width();
		*picy = rc.Height();
	}
}

int CUniDialog::GetWidth()
{
	if ( m_WinWidth != 0 ) {
		return m_WinWidth;
	}
	else {
		CRect rc;

		GetWindowRect( &rc);

		return rc.Width();
	}
}

int CUniDialog::GetHeight()
{
	if ( m_WinHeight != 0 ) {
		return m_WinHeight;
	}
	else {
		CRect rc;

		GetWindowRect( &rc);

		return rc.Height();
	}
}

BOOL CUniDialog::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	// TODO: Add your specialized code here and/or call the base class
	switch ( pMsg->message ) {
	case WM_KEYDOWN:
		if ( pMsg->wParam == VK_ESCAPE) {
			return TRUE;
		}
		if ( pMsg->wParam == VK_RETURN ) {
			return TRUE;
		}
/*		if ( pMsg->wParam == VK_UP ) {
			m_CallKB->OnSpeedUp();
			return TRUE;
		}
		if ( pMsg->wParam == VK_DOWN ) {
			m_CallKB->OnSpeedDown();
			return TRUE;
		}
		if ( pMsg->wParam == VK_LEFT ) {
			m_CallKB->OnTurnLeft();
			return TRUE;
		}
		if ( pMsg->wParam == VK_RIGHT ) {
			m_CallKB->OnTurnRight();
			return TRUE;
		}
*/
		break;
	default:
		break;
	}
	return CDialog::PreTranslateMessage(pMsg);
}

/*
//add by guanxin
void CUniDialog::SetCallKB(CVPFUIDlg *pKB)
{
	m_CallKB = pKB;
}
//add end
*/

void CUniDialog::GetStickRect(CRect *pRect)
{
	*pRect = m_StickRect;
}

⌨️ 快捷键说明

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