亚洲欧美第一页_禁久久精品乱码_粉嫩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视频你懂的| 欧美日韩色一区| 久久综合狠狠综合久久综合88| 国产成人综合在线观看| 99精品视频一区二区| 日本韩国欧美在线| 欧美群妇大交群中文字幕| 欧美一区二区三区男人的天堂| 国产老肥熟一区二区三区| 成人夜色视频网站在线观看| 国产91丝袜在线观看| 不卡一区二区在线| 欧美日韩国产综合视频在线观看| 韩日精品视频一区| 色呦呦国产精品| 欧美伦理电影网| 久久久九九九九| 亚洲综合图片区| 国产自产2019最新不卡| 色综合一个色综合| 精品久久久久久最新网址| 亚洲视频一二三区| 久久精品av麻豆的观看方式| 99在线热播精品免费| 日韩欧美国产三级电影视频| 中文字幕一区二区三区精华液 | 在线播放国产精品二区一二区四区| 精品亚洲免费视频| 波多野结衣亚洲一区| 91麻豆精品国产91久久久更新时间 | 韩国女主播一区| 色综合激情久久| 久久女同互慰一区二区三区| 午夜精品一区二区三区免费视频 | 精品奇米国产一区二区三区| 一区二区视频免费在线观看| 国产自产视频一区二区三区| 欧美日韩一区久久| 中文字幕日韩一区| 国产精品一区二区久激情瑜伽| 蜜臀久久久久久久| 91亚洲精品乱码久久久久久蜜桃| 99久久婷婷国产综合精品电影 | 国产精品久久三| 日韩精品一二三四| 在线免费观看一区| 国产精品视频yy9299一区| 极品少妇xxxx精品少妇偷拍| 欧美一区二区在线免费观看| 亚洲精品免费在线| 91视频.com| 国产精品久久久久婷婷二区次| 亚洲视频在线一区观看| 高清在线观看日韩| 久久一区二区三区国产精品| 另类人妖一区二区av| 欧美视频一区在线观看| 亚洲激情欧美激情| 欧美视频第二页| 亚洲国产毛片aaaaa无费看 | 久久久亚洲国产美女国产盗摄| 久久久国产精品午夜一区ai换脸| 久久久久久黄色| 国产精品系列在线播放| 中文字幕国产精品一区二区| 国产a级毛片一区| 国产精品狼人久久影院观看方式| 亚洲色欲色欲www在线观看| 成人av电影免费观看| 久久亚洲精华国产精华液 | 国产精品精品国产色婷婷| 国产自产高清不卡| 国产欧美日韩在线看| 国产成人精品亚洲777人妖 | 久久综合视频网| 国产精品一区二区91| 欧美激情综合五月色丁香小说| 亚洲综合一区二区精品导航| 在线亚洲人成电影网站色www| 67194成人在线观看| 久久国产尿小便嘘嘘| 久久久精品免费观看| 97久久精品人人爽人人爽蜜臀| 欧美精品三级在线观看| 久久99久久久久| 中文字幕不卡一区| 欧美日韩久久不卡| 国内精品第一页| 亚洲视频一区二区免费在线观看| 日本不卡一区二区三区 | 天堂精品中文字幕在线| 日韩欧美成人午夜| 99久久精品99国产精品| 一区二区三区日韩在线观看| 91精品欧美一区二区三区综合在 | 精品久久一区二区三区| bt7086福利一区国产| 日韩精品一级中文字幕精品视频免费观看 | 亚洲国产乱码最新视频| 欧美疯狂做受xxxx富婆| 国产高清在线观看免费不卡| 亚洲久草在线视频| 久久众筹精品私拍模特| 在线中文字幕一区二区| 国产高清成人在线| 天天综合色天天综合色h| 亚洲欧洲日产国产综合网| 欧美一区二区高清| 欧美亚男人的天堂| 不卡视频一二三四| 国产一区二区在线电影| 天堂成人免费av电影一区| 自拍偷拍亚洲欧美日韩| 久久久不卡影院| 欧美一区午夜精品| 欧美日韩精品一区视频| 日本精品裸体写真集在线观看| 亚洲女与黑人做爰| 国产欧美精品一区二区色综合朱莉| 国产主播一区二区三区| 亚洲国产色一区| 国产精品美日韩| 久久久久久夜精品精品免费| 欧美另类一区二区三区| 在线视频国产一区| www.在线成人| 成人av网站在线观看免费| 国产美女主播视频一区| 久久激五月天综合精品| 秋霞午夜鲁丝一区二区老狼| 亚洲国产精品久久一线不卡| 亚洲免费成人av| 亚洲视频在线一区二区| 亚洲欧美区自拍先锋| 亚洲天堂免费在线观看视频| 国产精品美女久久久久久| 国产精品丝袜一区| 中文字幕精品一区二区三区精品| 一本大道综合伊人精品热热 | 欧美极品另类videosde| 国产午夜亚洲精品不卡| 久久久久久久综合狠狠综合| 久久久久国产精品厨房| 337p粉嫩大胆色噜噜噜噜亚洲| 成人免费黄色大片| 成人久久18免费网站麻豆| 国产综合色产在线精品| 国产99久久久国产精品免费看| 亚洲综合免费观看高清在线观看| 欧美一区二区三区喷汁尤物| 5566中文字幕一区二区电影| 6080午夜不卡| 久久精品亚洲精品国产欧美| 中文字幕不卡在线| 亚洲资源在线观看| 日本不卡123| 丁香网亚洲国际| 色综合久久中文综合久久97| 欧美伊人久久大香线蕉综合69| 国产一二精品视频| 99久久免费视频.com| 欧美曰成人黄网| 日韩欧美成人午夜| 亚洲欧美在线观看| 丝袜美腿亚洲综合| 国产91富婆露脸刺激对白| 91一区一区三区| 欧美成人猛片aaaaaaa| 亚洲欧洲日产国码二区| 日韩和欧美一区二区三区| 狠狠色狠狠色综合日日91app| 性做久久久久久免费观看欧美| 国产日产欧美精品一区二区三区| 欧美日韩久久久| 久久一日本道色综合| 亚洲免费在线看| 黄色小说综合网站| 欧美综合在线视频| 欧美精品一区二区三区久久久| 欧美在线一二三| 久久久精品黄色| 免费看日韩精品| 99久久亚洲一区二区三区青草 | 亚洲精品高清在线| 日韩精品高清不卡| 一本久久综合亚洲鲁鲁五月天|