【VC开源代码栏目提醒】:网学会员VC开源代码为您提供UITDialog.cpp参考,解决您在UITDialog.cpp学习中工作中的难题,参考学习。
// UITDialog.cpp : 实现文件
//
#include "stdafx.h"
#include "UIT.h"
#include "UITDialog.h"
// CUITDialog 对话框
#define ABS(x) ((x) < 0? -(x) : (x) > 0? (x) : 0)
IMPLEMENT_DYNAMIC(CUITDialog, CDialog)
CUITDialog::CUITDialog(CWnd* pParent /*=NULL*/)
: CDialog(CUITDialog::IDD, pParent)
{
}
CUITDialog::~CUITDialog()
{
}
void CUITDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CUITDialog, CDialog)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_WM_LBUTTONDOWN()
ON_WM_CTLCOLOR()
ON_WM_SIZE()
ON_WM_TIMER()
END_MESSAGE_MAP()
// CUITDialog 消息处理程序
void CUITDialog::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
KillTimer(ID_TIMER1);
AfxEndThread(0);
// Or PostQuitMessage(0);
}
void CUITDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理
程序代码和/或调用默认值
if(m_ballcolor==0)
m_clrBall=RGB(255,0,0);
if(m_ballcolor==1)
m_clrBall=RGB(0,255,0);
if(m_ballcolor==2)
m_clrBall=RGB(0,0,255);
MakeNewBall();
Invalidate();
m_ballcolor+=1;
if(m_ballcolor==3)m_ballcolor=0;
//CDialog::OnLButtonDown(nFlags, point);
}
HBRUSH CUITDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_DLG)
{
pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
return CreateSolidBrush(::GetSysColor(COLOR_WINDOW));
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
void CUITDialog::OnSize(UINT nType, int cx, int cy)
{
//CDialog::OnSize(nType, cx, cy);
// TODO: 在此添加消息处理程序代码
m_clrBall = RGB(255,0,0);
m_ballcolor=1;
CDC* pDC = GetDC();
m_ptPixel.x = pDC->GetDeviceCaps(ASPECTX);
m_ptPixel.y = pDC->GetDeviceCaps(ASPECTY);
ReleaseDC(pDC);
LONG lScale;
m_ptCenter.x = cx >> 1;
m_ptCenter.y = cy >> 1;
m_ptCenter.x += cx >> 3; // make the ball a little off-center
lScale = min((LONG)cx * m_ptPixel.x,
(LONG)cy * m_ptPixel.y) >> 4;
m_sizeRadius.cx = (int)(lScale / m_ptPixel.x);
m_sizeRadius.cy = (int)(lScale / m_ptPixel.y);
m_sizeMove.cx = max(1, m_sizeRadius.cy >> 2);
m_sizeMove.cy = max(1, m_sizeRadius.cy >> 2);
MakeNewBall();
}
void CUITDialog::OnTimer(UINT nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_bmBall.m_hObject == NULL)
return; // no bitmap for the ball
CRect rcClient;
GetClientRect(rcClient);
CClientDC dc(this);
CBitmap* pbmOld = NULL;
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
pbmOld = dcMem.SelectObject(&m_bmBall);
dc.BitBlt(m_ptCenter.x - m_sizeTotal.cx / 2,
m_ptCenter.y - m_sizeTotal.cy / 2,
m_sizeTotal.cx, m_sizeTotal.cy,
&dcMem, 0, 0, SRCCOPY);
m_ptCenter += m_sizeMove;
if ((m_ptCenter.x + m_sizeRadius.cx >= rcClient.right) ||
(m_ptCenter.x - m_sizeRadius.cx <= 0))
{
m_sizeMove.cx = -m_sizeMove.cx;
}
if ((m_ptCenter.y + m_sizeRadius.cy >= rcClient.bottom) ||
(m_ptCenter.y - m_sizeRadius.cy <= 0))
{
m_sizeMove.cy = -m_sizeMove.cy;
}
dcMem.SelectObject(pbmOld);
dcMem.DeleteDC();
CDialog::OnTimer(nIDEvent);
}
BOOL CUITDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
SetTimer(ID_TIMER1,50,NULL);
return TRUE; // return TRUE unless you set the focus to a control
// 异常:OCX 属性页应返回 FALSE
}
void CUITDialog::MakeNewBall(void)
{
m_sizeTotal.cx = (m_sizeRadius.cx + ABS(m_sizeMove.cx)) << 1;
m_sizeTotal.cy = (m_sizeRadius.cy + ABS(m_sizeMove.cy)) << 1;
if (m_bmBall.m_hObject != NULL)
m_bmBall.DeleteObject(); // get rid of old bitmap
CClientDC dc(this);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
m_bmBall.CreateCompatibleBitmap(&dc, m_sizeTotal.cx, m_sizeTotal.cy);
ASSERT(m_bmBall.m_hObject != NULL);
CBitmap* pOldBitmap = dcMem.SelectObject(&m_bmBall);
// draw a rectangle in the background (window) color
CRect rect(0, 0, m_sizeTotal.cx, m_sizeTotal.cy);
CBrush brBackground(::GetSysColor(COLOR_WINDOW));
dcMem.FillRect(rect, &brBackground);
CBrush brCross(HS_DIAGCROSS, 0L);
CBrush* pOldBrush = dcMem.SelectObject(&brCross);
dcMem.SetBkColor(m_clrBall);
dcMem.Ellipse(ABS(m_sizeMove.cx), ABS(m_sizeMove.cy),
m_sizeTotal.cx - AB