myatlctrl.cpp
来自「VC.net 的一些有用的技巧」· C++ 代码 · 共 61 行
CPP
61 行
// MyATLCtrl.cpp : CMyATLCtrl 的实现
#include "stdafx.h"
#include "MyATLCtrl.h"
// CMyATLCtrl
STDMETHODIMP CMyATLCtrl::get_Sides(SHORT* pVal)
{
// TODO: 在此添加实现代码
*pVal = m_nSides;
return S_OK;
}
STDMETHODIMP CMyATLCtrl::put_Sides(SHORT newVal)
{
// TODO: 在此添加实现代码
if (newVal > 2 && newVal < 21)
{
m_nSides = newVal;
FireViewChange();
return S_OK;
}
else
return Error(_T("Shape must have between 3 and 20 sides"));
}
void CMyATLCtrl::CalcPoints(const RECT& rc)
{
const double pi = 3.14159265358979;
POINT ptCenter;
double dblRadiusx = (rc.right - rc.left) / 2;
double dblRadiusy = (rc.bottom - rc.top) / 2;
double dblAngle = 3 * pi / 2; // Start at the top
double dblDiff = 2 * pi / m_nSides; // Angle each side will make
ptCenter.x = (rc.left + rc.right) / 2;
ptCenter.y = (rc.top + rc.bottom) / 2;
// Calculate the points for each side
for (int i = 0; i < m_nSides; i++)
{
m_arrPoint[i].x = (long)(dblRadiusx * cos(dblAngle) + ptCenter.x + 0.5);
m_arrPoint[i].y = (long)(dblRadiusy * sin(dblAngle) + ptCenter.y + 0.5);
dblAngle += dblDiff;
}
}
LRESULT CMyATLCtrl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HRGN hRgn;
WORD xPos = LOWORD(lParam);
WORD yPos = HIWORD(lParam);
CalcPoints(m_rcPos);
hRgn = CreatePolygonRgn(&m_arrPoint[0], m_nSides, WINDING);
if (PtInRegion(hRgn, xPos, yPos))
Fire_ClickIn(xPos, yPos);
else
Fire_ClickOut(xPos, yPos);
DeleteObject(hRgn);
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?