📄 unidialog.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 + -