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

📄 uowudlg.cpp

📁 控件串口简单事件触发,通过串口对控件进行通信
💻 CPP
字号:
// uoWUDlg.cpp : implementation file
//

#include "stdafx.h"
#include "HTKJ.h"
#include "uoWUDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CuoWUDlg dialog


CuoWUDlg::CuoWUDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CuoWUDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CuoWUDlg)
		m_ShowTitle = TRUE;
	m_ReSizeFlag = FALSE;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CuoWUDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CuoWUDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CuoWUDlg, CDialog)
	//{{AFX_MSG_MAP(CuoWUDlg)
	ON_WM_PAINT()
		ON_WM_QUERYDRAGICON()
	ON_WM_NCLBUTTONDOWN()
	ON_WM_NCMOUSEMOVE()
	ON_WM_SYSCOMMAND()
	ON_WM_SIZE()
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CuoWUDlg message handlers

BOOL CuoWUDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	m_ToolTip.Create(this,TTS_ALWAYSTIP);//创建工具提示控件,TTS_ALWAYSTIP表示,	
	m_ReSizeFlag  = TRUE;
	CRect rtWnd;
	GetClientRect(rtWnd);
	m_OldWidth = rtWnd.Width();
	m_OldHeight = rtWnd.Height();
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CuoWUDlg::OnPaint() 
{
   CPaintDC dc(this); // device context for painting
	if (IsIconic())
	{
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
	
	// TODO: Add your message handler code here
		extern	CHTKJApp theApp;
	if(theApp.m_BaseFlag==3)
   {	dc.SetTextColor(RGB(139,0,0));
        int oldbkmold;
        oldbkmold=dc.SetBkMode(TRANSPARENT);//OPAQUE
	    CFont *oldfont;
        CFont newfont;
		newfont.CreatePointFont(180,"黑体",&dc);
		oldfont=dc.SelectObject(&newfont);
        dc.TextOut(75,40,"用户名或密码错误!");
        dc.TextOut(75,70,"是否重新登录?");
        dc.SelectObject(oldfont);
        dc.SetBkMode(oldbkmold);
   }
   if(theApp.m_BaseFlag==4)
   {
      	dc.SetTextColor(RGB(139,0,0));
        int oldbkmold;
        oldbkmold=dc.SetBkMode(TRANSPARENT);//OPAQUE
	    CFont *oldfont;
        CFont newfont;
		newfont.CreatePointFont(180,"黑体",&dc);
		oldfont=dc.SelectObject(&newfont);
        dc.TextOut(70,50,"是否真的退出系统?");
        dc.SelectObject(oldfont);
        dc.SetBkMode(oldbkmold);
   }
	// Do not call CDialog::OnPaint() for painting messages
}
HCURSOR CuoWUDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

LRESULT CuoWUDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam);
	
	if (!::IsWindow(m_hWnd))
		return lrst;
	
	if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
	{
		CDC* pWinDC = GetWindowDC();
		if (pWinDC)
			DrawTitleBar(pWinDC);
		ReleaseDC(pWinDC);
	}
	return lrst;
}

void CuoWUDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) 
{
	
	CRect rtWnd;
	GetWindowRect(&rtWnd);

	//mouse坐标转化为本窗口坐标 重要
	point.x = point.x - rtWnd.left;
	point.y = point.y - rtWnd.top;
	//检测各按钮是否按到
	if (m_rtIcon.PtInRect(point))
		AfxMessageBox("没按到按钮");
	else
	{ 
		if (m_rtButtHelp.PtInRect(point))
		{
		SendMessage(WM_HELP);
		}
		else 
		{
			if (m_rtButtExit.PtInRect(point))
			{
				SendMessage(WM_CLOSE);
			}
			else 
			{
				if (m_rtButtMin.PtInRect(point))
				{
					m_ShowTitle = FALSE;
					SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
				}
				else 
				{
					if (m_rtButtMax.PtInRect(point))
					{
						m_ShowTitle = TRUE;
						if (IsZoomed())
							SendMessage(WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
						else
						{
							SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
							Invalidate();
						}
					}
					else
					{
						if (!IsZoomed())
						{
							Default();						
						}
					}
				}
			}
		}
	}
}

void CuoWUDlg::OnNcMouseMove(UINT nHitTest, CPoint point) 
{
	CDC* pDC = GetWindowDC();
	CDC* pDisplayMemDC=new CDC;
	pDisplayMemDC->CreateCompatibleDC(pDC);
	CBitmap* pBitmap = new CBitmap;
	CBitmap* pOldBitmap;
	CRect rtWnd, rtButton;

	if (pDC)
	{
		CString StrTemp = "";
		GetWindowRect(&rtWnd);
		//mouse坐标转化为本窗口坐标 重要
		point.x = point.x - rtWnd.left;
		point.y = point.y - rtWnd.top;
		//判断mouse是否移到系统按钮上
		if (m_rtButtExit.PtInRect(point))
		{
			pBitmap->LoadBitmap(IDB_EXIT_FOCUS);
			StrTemp = _T("关闭");
		}
		else
		{
			if(m_rtButtMin.PtInRect(point))
			{
				pBitmap->LoadBitmap(IDB_MIN_FOCUS);
				StrTemp = _T("最小化窗口");
			}
			else
			{
				if(m_rtButtMax.PtInRect(point))
				{
					pBitmap->LoadBitmap(IDB_MAX_FOCUS);
					if(IsZoomed())
					{
						StrTemp = _T("还原窗口");
					}
					else
					{
						StrTemp = _T("最化大窗口");
					}
				}
				else
				{
					pBitmap->LoadBitmap(IDB_NORMAL);
				}
			}
		}

		rtButton = m_rtButtMin;
		BITMAP BmpInfo;
		pBitmap->GetBitmap(&BmpInfo);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		pDC->BitBlt(rtButton.left-6, rtButton.top-2, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();
		CRect ShowTipRec;
		ShowTipRec = m_rtButtMin;
		if(!StrTemp.IsEmpty())
		{
			ScreenToClient(&ShowTipRec);
			m_ToolTip.AddToolTip(IDD_CuoWUDlg,&ShowTipRec,StrTemp);
			m_ToolTip.SetDelayTime(200);
        }
	}
	
	ReleaseDC(pDisplayMemDC);
	ReleaseDC(pDC);
	delete pDisplayMemDC;
	delete pBitmap;

	CDialog::OnNcMouseMove(nHitTest, point);
}

void CuoWUDlg::DrawTitleBar(CDC *pDC)
{
	if (m_hWnd)
	{
		CBrush Brush(RGB(0,100,255));
		CBrush* pOldBrush = pDC->SelectObject(&Brush);

		CRect rtWnd, rtTitle, rtButtons;
		GetWindowRect(&rtWnd); 
		//取得标题栏的位置
		rtTitle.left = GetSystemMetrics(SM_CXFRAME);
		rtTitle.top = GetSystemMetrics(SM_CYFRAME);
		rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
		rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);

		//计算最小化按钮的位置,位图大小为15X15
		rtButtons.left = rtTitle.right-60;
		rtButtons.top= rtTitle.top+2+4;
		rtButtons.right = rtTitle.right-42;
		rtButtons.bottom = rtTitle.top+20+4;
		m_rtButtMin = rtButtons;
		//计算最大化按钮的位置,位图大小为15X15
		m_rtButtMax.left = m_rtButtMin.left + 18;
		m_rtButtMax.top = m_rtButtMin.top;
		m_rtButtMax.right = m_rtButtMin.right + 16;
		m_rtButtMax.bottom = m_rtButtMin.bottom;

		m_rtButtExit.left = m_rtButtMax.left + 18;
		m_rtButtExit.top =  m_rtButtMax.top;
		m_rtButtExit.right = m_rtButtMax.right + 16;
		m_rtButtExit.bottom = m_rtButtMax.bottom;


		//准备画图
		CBitmap* pBitmap = new CBitmap;
		BITMAP BmpInfo;
		CBitmap* pOldBitmap;
		CDC* pDisplayMemDC=new CDC;
		pDisplayMemDC->CreateCompatibleDC(pDC);

		//重画最Caption
		POINT  DrawPonit;
		DrawPonit.x =	rtTitle.left-4;
		DrawPonit.y =	rtTitle.top-4;
		pBitmap->LoadBitmap(IDB_TITLE_LEFT);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		pBitmap->GetBitmap(&BmpInfo);
		pDC->BitBlt(rtTitle.left-4, rtTitle.top-4, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
		DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth;
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();

		pBitmap->LoadBitmap(IDB_TOP);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		pBitmap->GetBitmap(&BmpInfo);
		while(DrawPonit.x<= m_rtButtMin.left-66) 
		{
			pDC->BitBlt(DrawPonit.x, DrawPonit.y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
			DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth;
		}
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();

		pBitmap->LoadBitmap(IDB_TITLE_RIGHT);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		pBitmap->GetBitmap(&BmpInfo);
		pDC->BitBlt(DrawPonit.x-47, DrawPonit.y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);

		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();



		//重画最小化button
		rtButtons = m_rtButtMin;
		pBitmap->LoadBitmap(IDB_NORMAL);
		pBitmap->GetBitmap(&BmpInfo);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		pDC->BitBlt(rtButtons.left-6, rtButtons.top-2, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();

		int nOldMode = pDC->SetBkMode(TRANSPARENT);
		COLORREF clOldText=pDC->GetTextColor();		
		CFont titleFont;	
		titleFont.CreateFont( 22, // nHeight 
							8, // nWidth 
							0, // nEscapement文本行逆时针旋转角度 
							0, // nOrientation字体角度
							FW_BOLD, // nWeight字体粗细程度 
							FALSE, // bItalic 
							FALSE, // bUnderline 
							0, // cStrikeOut 删除线
							ANSI_CHARSET, // nCharSet 
							OUT_DEFAULT_PRECIS, // nOutPrecision 
							CLIP_DEFAULT_PRECIS, // nClipPrecision 
							DEFAULT_QUALITY, // nQuality 
							DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 
							_T("隶书")); // lpszFac		pDC->SelectStockObject(SYSTEM_FIXED_FONT);		
		CFont *OldFont;
		OldFont = pDC->SelectObject(&titleFont);
		CString m_StrTitle;
		GetWindowText(m_StrTitle);
		pDC->SetTextColor(RGB(85,255,25));
		if(m_ShowTitle)
		{
			pDC->TextOut(75,12,m_StrTitle);	
		}
		else
		{   
			m_StrTitle = m_StrTitle.Left(6);
			m_StrTitle += "...";
			pDC->TextOut(20,10,m_StrTitle);	
		}
		pDC->SetBkMode(nOldMode);
		pDC->SetTextColor(clOldText);
		pDC->SelectObject(OldFont);
	//	pDC->TextOut(60,60,m_StrTitle);	
		//重画左边框
		pBitmap->LoadBitmap(IDB_LEFTDOWN);
		pBitmap->GetBitmap(&BmpInfo);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		int i ;
		for (i= 25;i<=rtWnd.bottom;i=i+BmpInfo.bmHeight-3)
		{
			pDC->BitBlt(-3, rtButtons.top+i, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
		}
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();

		//重画右边框
		pBitmap->LoadBitmap(IDB_RIGHTDOWN);
		pBitmap->GetBitmap(&BmpInfo);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		GetClientRect(&rtWnd);
		for (i= 35;i<=rtWnd.bottom+27;i=i+BmpInfo.bmHeight-3)
		{
			pDC->BitBlt(rtWnd.right, i, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
		}
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();

		//重画底边框
		pBitmap->LoadBitmap(IDB_DOWN);
		pBitmap->GetBitmap(&BmpInfo);
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
		GetClientRect(&rtWnd);
		for (i=2; i<=rtWnd.right+27; i=i+2)
		{
			//GetClientRect(&rtWnd);
		//	pDC->BitBlt(i,rtWnd.bottom+26, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
	        pDC->BitBlt(i,rtWnd.bottom+20, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
		}
		pDisplayMemDC->SelectObject(pOldBitmap);
		pBitmap->DeleteObject();

		//重画图标
	//	m_rtIcon.left = 3;//rtWnd.Width()-5;
	//	m_rtIcon.top =  GetSystemMetrics(SM_CYFRAME);
	//	m_rtIcon.right = m_rtIcon.left + 32;
	//	m_rtIcon.bottom = m_rtIcon.top + 32;
	//	::DrawIconEx(pDC->m_hDC, m_rtIcon.left, m_rtIcon.top, m_hIcon, 
	//	m_rtIcon.Width(), m_rtIcon.Height(), 0, NULL, DI_NORMAL);
	//	m_rtIcon.OffsetRect(rtWnd.TopLeft()); 

		ReleaseDC(pDisplayMemDC);
		delete pDisplayMemDC;
		delete pBitmap;
	}
}

void CuoWUDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
		if (nID == SC_CLOSE)
		{
			AfxGetMainWnd()->DestroyWindow();//关闭应用程序
			return;
		}
		if (nID == SC_RESTORE)
		{
			ShowWindow(SW_NORMAL);//restore应用程序
			m_ShowTitle = TRUE;
			return;
		}

		CDialog::OnSysCommand(nID, lParam);
}
/*float m_WidthScale;
float m_HeightScale;


BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)

{
	CRect rtCtrl,rtWnd;	
	if(hwnd)
	{
		//::SetWindowText(hwnd,"bcdef");
		::GetWindowRect(hwnd,&rtCtrl);
		::GetWindowRect(GetParent(hwnd),&rtWnd);
		rtCtrl.OffsetRect(-rtWnd.left-3,-rtWnd.top-29);
		float temp;
		temp= (float)rtCtrl.left*m_WidthScale;
		rtCtrl.left  = (int)temp;
		temp= (float)rtCtrl.top*m_HeightScale;
		rtCtrl.top =  (int)temp;
		temp = (float)rtCtrl.right*m_WidthScale;
		rtCtrl.right = (int)temp;
		temp =(float)rtCtrl.bottom*m_HeightScale;
		rtCtrl.bottom  = (int)temp;
		::MoveWindow(hwnd,rtCtrl.left,rtCtrl.top,
			         rtCtrl.Width(),
					 rtCtrl.Height(),
					TRUE);
		return TRUE;
	}
	else
	{
		return FALSE;
	}

}*/
void CuoWUDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
/*	if(m_ReSizeFlag)
	{
		if(nType!=1)
		{
		CRect rtWnd;
		GetWindowRect(&rtWnd);
		
		m_WidthScale = (float)rtWnd.Width()/(float)m_OldWidth; // new/Old
		m_HeightScale = (float)rtWnd.Height()/(float)m_OldHeight;		
		m_OldWidth = rtWnd.Width();  //保存新的Size;
		m_OldHeight = rtWnd.Height();
		HWND hWnd;
		hWnd = GetSafeHwnd(); 
		EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProc,0);
		}
	}*/
	// TODO: Add your message handler code here
	
}


void CuoWUDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default	
	CDialog::OnMouseMove(nFlags, point);

}

⌨️ 快捷键说明

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