?? apexcommctl.h
字號:
///////////////////////////////////////////////////////////////
// 文件: ApexCommCtrl.h
// 功能: 控件類頭文件,聲明類的屬性和方法,事件
// 作者: 王念峰
// 日期: 1999.04.19 - 創建
// 1999.05.15 - 修改,整理
// E_mai:wnf@wisepeak.com
// Http://www.wisepeak.com
///////////////////////////////////////////////////////////////
// 版本: 1.0
// 本程序建立一個用于串口通訊的控件ApexComm;
// 它使用線程類來實現實際的讀串口和寫串口;
// 用戶可以通過調用方法WritePort 向串口寫數據;
// 通過觸發的OnReceiveData 事件來讀取串口中的數據;
// 通過各屬性來設置串口參數;(例如波特率,端口等)
// 通過OpenPort來啟動串口通訊;
// 通過ClosePort來關閉串口通訊;
// 下面是程序中用到的用于線程讀寫的消息常量
///////////////////////////////////////////////////////////////
// 注:由于涉及串口通訊,要求系統必須同時響應串口事件和用戶輸入,
// 所以該處使用多線程來實現
///////////////////////////////////////////////////////////////
#if !defined(AFX_APEXCOMMCTL_H__F0A2BED5_F8B2_11D2_8A54_0080C8EB2FFE__INCLUDED_)
#define AFX_APEXCOMMCTL_H__F0A2BED5_F8B2_11D2_8A54_0080C8EB2FFE__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "define.h"
class TReadThread;
class TWriteThread;
/////////////////////////////////////////////////////////////////////////////
class CApexCommCtrl : public COleControl
{
DECLARE_DYNCREATE(CApexCommCtrl)
//構造函數
public:
CApexCommCtrl();
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CApexCommCtrl)
public:
virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
virtual void DoPropExchange(CPropExchange* pPX);
virtual void OnResetState();
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
protected:
~CApexCommCtrl();
DECLARE_OLECREATE_EX(CApexCommCtrl) // Class factory and guid
DECLARE_OLETYPELIB(CApexCommCtrl) // GetTypeInfo
DECLARE_OLECTLTYPE(CApexCommCtrl) // Type name and misc status
//{{AFX_MSG(CApexCommCtrl)
//}}AFX_MSG
//自定義事件
afx_msg LRESULT ReceiveData(WPARAM wParam, LPARAM lParam );
afx_msg LRESULT CommHangup(WPARAM wParam, LPARAM lParam );
afx_msg LRESULT ReceiveDataError(WPARAM wParam, LPARAM lParam );
afx_msg LRESULT DataSendFinished(WPARAM wParam, LPARAM lParam );
DECLARE_MESSAGE_MAP()
// 發布的屬性和方法的映射
//{{AFX_DISPATCH(CApexCommCtrl)
CString m_portID;
afx_msg void OnPortIDChanged();
long m_baudRate;
afx_msg void OnBaudRateChanged();
BOOL m_enableParity;
afx_msg void OnEnableParityChanged();
BOOL m_outxCtsFlow;
afx_msg void OnOutxCtsFlowChanged();
BOOL m_outxDsrFlow;
afx_msg void OnOutxDsrFlowChanged();
short m_dtrControl;
afx_msg void OnDtrControlChanged();
BOOL m_dsrSensitivity;
afx_msg void OnDsrSensitivityChanged();
BOOL m_txContinueOnXoff;
afx_msg void OnTxContinueOnXoffChanged();
BOOL m_outxXonXoffFlow;
afx_msg void OnOutxXonXoffFlowChanged();
BOOL m_inxXonXoffFlow;
afx_msg void OnInxXonXoffFlowChanged();
BOOL m_replaceWhenParityError;
afx_msg void OnReplaceWhenParityErrorChanged();
BOOL m_ignoreNullChar;
afx_msg void OnIgnoreNullCharChanged();
short m_rtsControl;
afx_msg void OnRtsControlChanged();
short m_xonLimit;
afx_msg void OnXonLimitChanged();
short m_xoffLimit;
afx_msg void OnXoffLimitChanged();
short m_byteSize;
afx_msg void OnByteSizeChanged();
short m_parity;
afx_msg void OnParityChanged();
short m_stopBits;
afx_msg void OnStopBitsChanged();
short m_xonChar;
afx_msg void OnXonCharChanged();
short m_xoffChar;
afx_msg void OnXoffCharChanged();
short m_replaceChar;
afx_msg void OnReplacedCharChanged();
long m_inputBufferSize;
afx_msg void OnInputBufferSizeChanged();
long m_outputBufferSize;
afx_msg void OnOutputBufferSizeChanged();
long m_readIntervalTimeout;
afx_msg void OnReadIntervalTimeoutChanged();
long m_readTotalTimeoutMultiplier;
afx_msg void OnReadTotalTimeoutMultiplierChanged();
long m_readTotalTimeoutConstant;
afx_msg void OnReadTotalTimeoutConstantChanged();
long m_writeTotalTimeoutMultiplier;
afx_msg void OnWriteTotalTimeoutMultiplierChanged();
long m_writeTotalTimeoutConstant;
afx_msg void OnWriteTotalTimeoutConstantChanged();
afx_msg void OpenPort();
afx_msg void ClosePort();
afx_msg BOOL WritePort(LPCTSTR pDataToWrite, long dwSizeofDataToWrite);
//}}AFX_DISPATCH
DECLARE_DISPATCH_MAP()
//發布的事件的映射
//{{AFX_EVENT(CApexCommCtrl)
void FireOnReceiveData(LPCTSTR pDataReceived, long dwSizeOfDataReceived)
{FireEvent(eventidOnReceiveData,EVENT_PARAM(VTS_BSTR VTS_I4), pDataReceived, dwSizeOfDataReceived);}
void FireOnCommHangup(BOOL bReadOrWrite)
{FireEvent(eventidOnCommHangup,EVENT_PARAM(VTS_BOOL), bReadOrWrite);}
void FireReceiveDataError(long dwEventMask)
{FireEvent(eventidReceiveDataError,EVENT_PARAM(VTS_I4), dwEventMask);}
void FireDataSendFinished()
{FireEvent(eventidDataSendFinished,EVENT_PARAM(VTS_NONE));}
//}}AFX_EVENT
DECLARE_EVENT_MAP()
protected:
TReadThread* ReadThread;
TWriteThread* WriteThread;
public:
HANDLE m_hCloseEvent;
bool m_bSendDataEmpty;
HANDLE m_hCommFile;
enum {
//{{AFX_DISP_ID(CApexCommCtrl)
dispidPortID = 1L,
dispidBaudRate = 2L,
dispidEnableParity = 3L,
dispidOutxCtsFlow = 4L,
dispidOutxDsrFlow = 5L,
dispidDtrControl = 6L,
dispidDsrSensitivity = 7L,
dispidTxContinueOnXoff = 8L,
dispidOutxXonXoffFlow = 9L,
dispidInxXonXoffFlow = 10L,
dispidReplaceWhenParityError = 11L,
dispidIgnoreNullChar = 12L,
dispidRtsControl = 13L,
dispidXonLimit = 14L,
dispidXoffLimit = 15L,
dispidByteSize = 16L,
dispidParity = 17L,
dispidStopBits = 18L,
dispidXonChar = 19L,
dispidXoffChar = 20L,
dispidReplacedChar = 21L,
dispidInputBufferSize = 22L,
dispidOutputBufferSize = 23L,
dispidReadIntervalTimeout = 24L,
dispidReadTotalTimeoutMultiplier = 25L,
dispidReadTotalTimeoutConstant = 26L,
dispidWriteTotalTimeoutMultiplier = 27L,
dispidWriteTotalTimeoutConstant = 28L,
dispidOpenPort = 29L,
dispidClosePort = 30L,
dispidWritePort = 31L,
eventidOnReceiveData = 1L,
eventidOnCommHangup = 2L,
eventidReceiveDataError = 3L,
eventidDataSendFinished = 4L,
//}}AFX_DISP_ID
};
private:
void CloseWriteThread();
void CloseReadThread();
void SetCommTimeState();
void SetPortState();
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_APEXCOMMCTL_H__F0A2BED5_F8B2_11D2_8A54_0080C8EB2FFE__INCLUDED)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -