亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wymeterctl.cpp

?? 西安電子科技大學王亞民教授所著《組態軟件設計與開發》附帶的源代碼06章
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"
#include "Meter.h"
#include "wyMeterCtl.h"
#include "wyMeterPpg.h"
#include <math.h>

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

IMPLEMENT_DYNCREATE(CwyMeterCtrl, COleControl)

// 消息映射
BEGIN_MESSAGE_MAP(CwyMeterCtrl, COleControl)
	//{{AFX_MSG_MAP(CwyMeterCtrl)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
	ON_MESSAGE(OCM_COMMAND, OnOcmCommand)
	ON_OLEVERB(AFX_IDS_VERB_EDIT, OnEdit)
	ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
END_MESSAGE_MAP()

// 調度映射
BEGIN_DISPATCH_MAP(CwyMeterCtrl, COleControl)
	//{{AFX_DISPATCH_MAP(CwyMeterCtrl)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "dMaxValue", m_dMaxValue, OnDMaxValueChanged, VT_R8)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "dMinValue", m_dMinValue, OnDMinValueChanged, VT_R8)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "dCurrentValue", m_dCurrentValue, OnDCurrentValueChanged, VT_R8)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "nScaleDecimals", m_nScaleDecimals, OnNScaleDecimalsChanged, VT_I2)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "nValueDecimals", m_nValueDecimals, OnNValueDecimalsChanged, VT_I2)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "colorNeedle", m_colorNeedle, OnColorNeedleChanged, VT_COLOR)
	DISP_PROPERTY_NOTIFY(CwyMeterCtrl, "strUnits", m_strUnits, OnStrUnitsChanged, VT_BSTR)
	DISP_FUNCTION(CwyMeterCtrl, "SetCurrentValue", SetCurrentValue, VT_EMPTY, VTS_R8)
	//}}AFX_DISPATCH_MAP
	DISP_FUNCTION_ID(CwyMeterCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()

// 事件映射
BEGIN_EVENT_MAP(CwyMeterCtrl, COleControl)
	//{{AFX_EVENT_MAP(CwyMeterCtrl)
	//}}AFX_EVENT_MAP
END_EVENT_MAP()

 
// 屬性頁
BEGIN_PROPPAGEIDS(CwyMeterCtrl, 1)
	PROPPAGEID(CwyMeterPropPage::guid)
END_PROPPAGEIDS(CwyMeterCtrl)
 
// 初始化類工廠和 GUID
IMPLEMENT_OLECREATE_EX(CwyMeterCtrl, "METER.wyMeterCtrl.1",
	0x15491a65, 0x5b63, 0x11d5, 0xad, 0xd3, 0, 0x10, 0x88, 0xab, 0x5d, 0x33)

// 類型庫 ID 和 版本
IMPLEMENT_OLETYPELIB(CwyMeterCtrl, _tlid, _wVerMajor, _wVerMinor)
 
// 接口 IDs
const IID BASED_CODE IID_DwyMeter =
		{ 0x15491a63, 0x5b63, 0x11d5, { 0xad, 0xd3, 0, 0x10, 0x88, 0xab, 0x5d, 0x33 } };
const IID BASED_CODE IID_DwyMeterEvents =
		{ 0x15491a64, 0x5b63, 0x11d5, { 0xad, 0xd3, 0, 0x10, 0x88, 0xab, 0x5d, 0x33 } };
 
// 控件類型信息
static const DWORD BASED_CODE _dwwyMeterOleMisc =
	OLEMISC_ACTIVATEWHENVISIBLE |
	OLEMISC_SETCLIENTSITEFIRST |
	OLEMISC_INSIDEOUT |
	OLEMISC_CANTLINKINSIDE |
	OLEMISC_RECOMPOSEONRESIZE;

IMPLEMENT_OLECTLTYPE(CwyMeterCtrl, IDS_WYMETER, _dwwyMeterOleMisc)
 
// 增加和刪除系統注冊記錄 
BOOL CwyMeterCtrl::CwyMeterCtrlFactory::UpdateRegistry(BOOL bRegister)
{
 	// 注冊控件

	if (bRegister)
		return AfxOleRegisterControlClass(
			AfxGetInstanceHandle(),
			m_clsid,
			m_lpszProgID,
			IDS_WYMETER,
			IDB_WYMETER,
			afxRegInsertable | afxRegApartmentThreading,
			_dwwyMeterOleMisc,
			_tlid,
			_wVerMajor,
			_wVerMinor);
	else
		return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}

//控件構造函數 
CwyMeterCtrl::CwyMeterCtrl()
{
	InitializeIIDs(&IID_DwyMeter, &IID_DwyMeterEvents);
	//設定控件的初始大小
	SetInitialSize( 90, 90 ); 
}

//控件析構函數 
CwyMeterCtrl::~CwyMeterCtrl()
{
}

//控件繪制函數 
void CwyMeterCtrl::OnDraw(
			CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
//	DoSuperclassPaint(pdc, rcBounds);

	CBrush brush(TranslateColor(GetBackColor()));
	pdc->FillRect(rcBounds,&brush);

	DrawMeterBackground(pdc, rcBounds) ;
	DrawNeedle(pdc) ;
	DrawValue(pdc) ;
}
 
// 持久性支持
void CwyMeterCtrl::DoPropExchange(CPropExchange* pPX)
{
	ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
	COleControl::DoPropExchange(pPX);

	PX_Color(pPX,"colorNeedle",m_colorNeedle,RGB(255,0,0));
    PX_String(pPX,"strUnits" ,m_strUnits,"v");
    PX_Short(pPX,"nScaleDecimals" ,m_nScaleDecimals,0);
    PX_Short(pPX,"nValueDecimals" ,m_nValueDecimals,1);

    PX_Double(pPX,"dMaxValue" ,m_dMaxValue,10.0);
    PX_Double(pPX,"dMinValue" ,m_dMinValue,0.0);
    PX_Double(pPX,"dCurrentValue" ,m_dCurrentValue,0.0);

}
 
// 恢復初始狀態
void CwyMeterCtrl::OnResetState()
{
	COleControl::OnResetState();  // Resets defaults found in DoPropExchange
}
 
//顯示About對話框  
void CwyMeterCtrl::AboutBox()
{
	CDialog dlgAbout(IDD_ABOUTBOX_WYMETER);
	dlgAbout.DoModal();
}
 
// 設置窗口初始參數
BOOL CwyMeterCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.lpszClass = _T("STATIC");
	return COleControl::PreCreateWindow(cs);
}

 
// 說明是否使用基類控件
BOOL CwyMeterCtrl::IsSubclassedControl()
{
	return TRUE;
}


//處理命令消息 
LRESULT CwyMeterCtrl::OnOcmCommand(WPARAM wParam, LPARAM lParam)
{
#ifdef _WIN32
	WORD wNotifyCode = HIWORD(wParam);
#else
	WORD wNotifyCode = HIWORD(lParam);
#endif
	return 0;
}

//繪制指針
void CwyMeterCtrl::DrawNeedle(CDC *pDC)
{
	int nResult ;
	
	double dAngleRad ;
	double dTemp ;
	CBrush brushFill, *pBrushOld ;
	CPen penDraw, *pPenOld ;
	CPoint pointNeedle[3] ;
 
	//這個函數繪制三角指針.基本指針是一個水平線,它通過弧線的中點
	//繪制在儀表上,指尖所在的角度通過當前值和標尺計算得到.
	//指針由三點構成的多邊形組成,三角形繪制在儀表的區域內.

	// 計算指針的第一個和最后一個點
	pointNeedle[0].x = m_nBottomCX + m_nBottomRadius/20 ;
	pointNeedle[0].y = m_nBottomCY ;
	pointNeedle[2].x = m_nBottomCX - m_nBottomRadius/20 ;
	pointNeedle[2].y = m_nBottomCY ;

	// 計算指尖的角度
	dAngleRad = (m_dCurrentValue-m_dMinValue)*(m_dRightAngleRad-m_dLeftAngleRad)/
		          (m_dMaxValue-m_dMinValue) + m_dLeftAngleRad ;

	// 如果角度超出儀表,使用最大或最小角度
	dAngleRad = max(dAngleRad, m_dRightAngleRad) ;
	dAngleRad = min(dAngleRad, m_dLeftAngleRad) ;

	// 計算指尖的 X 坐標
	dTemp = m_nBottomCX + m_nTopRadius*cos(dAngleRad) ;
	pointNeedle[1].x = ROUND(dTemp) ;

	// 計算指尖的 Y 坐標
	dTemp = m_nBottomCY - m_nTopRadius*sin(dAngleRad) ;
	pointNeedle[1].y = ROUND(dTemp) ;

	// 基于儀表選擇剪貼區域
	pDC->SelectClipRgn(&m_rgnBoundary) ;

	// 按照指針顏色創建畫筆和刷子
	brushFill.CreateSolidBrush(m_colorNeedle) ;
	penDraw.CreatePen(PS_SOLID, 1, m_colorNeedle) ;

	// 選擇畫筆和刷子
	pPenOld = pDC->SelectObject(&penDraw) ;
	pBrushOld = pDC->SelectObject(&brushFill) ;

	// 繪制指針
	pDC->Polygon(pointNeedle, 3) ;

	// 恢復剪貼區域
	nResult = pDC->SelectClipRgn(NULL) ;

	// 恢復畫筆和刷子
	pDC->SelectObject(pPenOld) ;
	pDC->SelectObject(pBrushOld) ;
}

//輸出數值
void CwyMeterCtrl::DrawValue(CDC *pDC)
{
	CFont *pFontOld ;
	CString strTemp ;

	// 選取字體,字體根據背景大小設定
	pFontOld = pDC->SelectObject(&m_fontValue) ;

	// 設定字體背景色和文本色
	pDC->SetTextColor(m_colorText) ;
	pDC->SetBkColor(m_colorButton) ;

	// 輸出文本,文本與中點和基線對齊
	pDC->SetTextAlign(TA_CENTER|TA_BASELINE) ;
	strTemp.Format("%.*f", m_nValueDecimals, m_dCurrentValue) ;
	pDC->TextOut(m_nValueCenter, m_nValueBaseline, strTemp) ;

	// 恢復原背景色和字體
	pDC->SetBkColor(m_colorWindow) ;
    pDC->SelectObject(pFontOld) ;

}

//繪制背景
void CwyMeterCtrl::DrawMeterBackground(CDC *pDC, const CRect &rect)
{
	int i, nAngleDeg, nRef ;
	int nHeight ;
	int nHalfPoints ;
	int nStartAngleDeg, nEndAngleDeg ;
	int nTickDeg ;
	int nAngleIncrementDeg ;
	double dTemp, dAngleRad, dX, dY ;
	double dRadPerDeg ;
	CString strTemp ;
	CPoint pointRecess[BOUNDARY_POINTS] ;
	CBrush brushFill, *pBrushOld ;
	CFont *pFontOld ;
	CPen penDraw, *pPenOld ;
	TEXTMETRIC tm ;

	// 計算儀表半徑的中點
	m_nBottomCX = rect.right-5;   
	m_nBottomCY = rect.bottom -5;  

	// 計算儀表半徑
	m_nTopRadius = rect.Height()*6/8 ;
	m_nBottomRadius = m_nTopRadius/2 ;

	// 每度表示的弧度數
	dRadPerDeg = 4.0*atan(1.0)/180.0 ;

	// 設置儀表表面區域范圍
	nStartAngleDeg =90;   //  60 ;
	nEndAngleDeg   =180;  // 120 ;
	nTickDeg       =  15 ;

	// 弧上繪制點個數
	nAngleIncrementDeg = 5 ;

	// 角度轉換為弧度
	m_dLeftAngleRad = nEndAngleDeg*dRadPerDeg ;
	m_dRightAngleRad = nStartAngleDeg*dRadPerDeg ;


	// 構造儀表表面區域,它是一個多邊形區域
 	nRef = 0 ;
	for (nAngleDeg=nStartAngleDeg; nAngleDeg<=nEndAngleDeg; nAngleDeg+=nAngleIncrementDeg)
	{
		// 計算當前角度的弧度數
		dAngleRad = nAngleDeg*dRadPerDeg ;

		// 計算 X 坐標
		dTemp = m_nBottomCX + m_nTopRadius*cos(dAngleRad) ;
		m_pointBoundary[nRef].x = ROUND(dTemp) ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区一线天视频| 中文字幕五月欧美| 91在线高清观看| 精品写真视频在线观看| 亚洲成在线观看| 亚洲欧美aⅴ...| 亚洲日本中文字幕区| 专区另类欧美日韩| 一个色在线综合| 亚洲观看高清完整版在线观看| 亚洲综合久久久久| 亚洲成人免费在线观看| 日韩高清不卡一区| 久99久精品视频免费观看| 激情深爱一区二区| 成人app软件下载大全免费| 成人av电影在线网| 欧美性受xxxx黑人xyx性爽| 欧亚洲嫩模精品一区三区| 欧美精品v国产精品v日韩精品| 欧美日本韩国一区| 26uuu国产日韩综合| 国产午夜精品一区二区三区嫩草 | 综合久久给合久久狠狠狠97色 | 欧美三级视频在线观看| 欧美视频一区二区三区四区 | 国产精品美女视频| 亚洲卡通动漫在线| 久久激情综合网| av一区二区三区黑人| 一道本成人在线| 精品欧美久久久| 亚洲天堂a在线| 久久99久久99| 欧洲av一区二区嗯嗯嗯啊| 欧美精品一区二区三区高清aⅴ| 中文字幕一区二区在线播放| 首页综合国产亚洲丝袜| yourporn久久国产精品| 欧美精品tushy高清| 国产欧美日韩激情| 天天色综合成人网| 成人黄色电影在线| 91麻豆精品国产91久久久 | 欧美精品黑人性xxxx| 国产日产欧美一区| 日韩成人一区二区| 91蜜桃在线免费视频| 欧美xxxxx牲另类人与| 一区二区在线观看不卡| 精品一区二区三区在线观看国产| 91偷拍与自偷拍精品| 欧美哺乳videos| 午夜精品久久久久久| av电影天堂一区二区在线观看| 欧美一级在线免费| 亚洲国产色一区| 色婷婷精品久久二区二区蜜臂av| 久久久精品免费网站| 肉肉av福利一精品导航| 在线观看免费亚洲| 亚洲色图都市小说| 国产成人h网站| 日韩亚洲欧美成人一区| 亚洲黄色小说网站| 一本久久综合亚洲鲁鲁五月天| 欧美极品另类videosde| 国产河南妇女毛片精品久久久| 欧美电视剧免费全集观看| 男女性色大片免费观看一区二区| 日本乱人伦一区| 一区二区三区久久| 欧美亚洲综合色| 亚洲一区二区三区爽爽爽爽爽| 色哟哟亚洲精品| 亚洲免费av在线| 日本久久电影网| 一个色在线综合| 欧美日韩中文另类| 亚洲.国产.中文慕字在线| 欧美综合欧美视频| 视频在线观看一区二区三区| 欧美日韩国产综合一区二区| 亚洲一卡二卡三卡四卡| 欧美特级限制片免费在线观看| 亚洲www啪成人一区二区麻豆| 欧美日韩精品一区二区天天拍小说 | av资源网一区| 亚洲天堂av一区| 欧美怡红院视频| 三级影片在线观看欧美日韩一区二区 | 久久先锋影音av鲁色资源网| 国产精品一区二区在线看| 国产亚洲成aⅴ人片在线观看 | 日韩亚洲欧美综合| 狠狠色综合播放一区二区| 精品精品国产高清a毛片牛牛| 激情av综合网| 亚洲欧美激情视频在线观看一区二区三区 | 国产精品视频一二| 91污在线观看| 亚洲va韩国va欧美va| 欧美精品一区二区三区一线天视频| 大白屁股一区二区视频| 亚洲综合色在线| xvideos.蜜桃一区二区| 91无套直看片红桃| 久久精品国产第一区二区三区| 国产欧美日韩在线看| 在线视频国内自拍亚洲视频| 狠狠色狠狠色综合系列| 亚洲人吸女人奶水| 欧美电视剧在线观看完整版| 99精品欧美一区二区三区综合在线| 亚洲sss视频在线视频| 久久午夜免费电影| 欧美三级韩国三级日本三斤| 国产伦精品一区二区三区免费迷 | 国产精品国产三级国产普通话蜜臀 | 99国产精品久久久久久久久久久| 亚洲成人自拍偷拍| 中文字幕巨乱亚洲| 欧美一区二区三区喷汁尤物| 成人免费看视频| 麻豆国产91在线播放| 亚洲影院免费观看| 国产精品久久久久久久蜜臀| 欧美一卡2卡3卡4卡| 在线观看成人免费视频| 国产在线精品免费av| 五月天一区二区| 亚洲激情综合网| 国产欧美一区二区三区沐欲| 正在播放亚洲一区| 色综合久久九月婷婷色综合| 国产馆精品极品| 奇米一区二区三区av| 亚洲一区二区高清| 亚洲另类春色校园小说| 国产亚洲精品福利| 久久久亚洲欧洲日产国码αv| 日韩午夜激情电影| 欧美三级欧美一级| 欧美在线短视频| 色婷婷亚洲精品| 91蜜桃在线观看| 色悠悠久久综合| 91碰在线视频| 91小视频免费观看| 色婷婷综合久久久中文字幕| 成人av电影观看| 成人av第一页| 色综合久久综合网欧美综合网| 风间由美一区二区av101| 国产黄色91视频| 大白屁股一区二区视频| 粉嫩高潮美女一区二区三区| 国产精品亚洲专一区二区三区| 激情小说亚洲一区| 精品午夜一区二区三区在线观看| 另类小说欧美激情| 国产呦精品一区二区三区网站| 国产乱码精品1区2区3区| 国产乱码精品1区2区3区| 国产传媒欧美日韩成人| 国产福利91精品一区| 从欧美一区二区三区| 99久久久无码国产精品| 在线看不卡av| 制服丝袜亚洲播放| 久久久精品中文字幕麻豆发布| 国产欧美一区二区精品婷婷 | 欧美四级电影网| 欧美一区二区视频在线观看2022| 欧美一区二区三区在线视频 | 成人av网站大全| 欧美性猛交xxxx乱大交退制版 | www国产亚洲精品久久麻豆| 国产区在线观看成人精品| 国产精品女同互慰在线看| 亚洲综合偷拍欧美一区色| 日本中文字幕不卡| 国产成人亚洲精品狼色在线| 91玉足脚交白嫩脚丫在线播放| 欧美日韩在线观看一区二区| 日韩美女天天操| 中文字幕一区二区三区视频| 香蕉久久夜色精品国产使用方法 | 成人综合激情网| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 樱桃国产成人精品视频| 免费观看在线色综合| 99久久免费精品| 日韩片之四级片| 一区二区三区国产| 国产一区二区三区四| 在线免费精品视频| 国产性做久久久久久| 日韩高清欧美激情| 91在线观看视频|