callback 函数中访问类成员变量

如何在callback 函数中访问类的成员变量,今天遇到了这个问题,半天才解决,

由于callback函数必须为static函数,而static函数 不能访问非static变量

其实很简单,只需要声明一个类的指针,将指针指向该类,并将该指针传入callback函数即可以对该类中的任何成员进行操作了

 

例如 

class CGPS_zzDlg : public CDialog
{
// Construction
public:
 CGPS_zzDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
 //{{AFX_DATA(CGPS_zzDlg)
 enum { IDD = IDD_GPS_ZZ_DIALOG };
 CButton m_ButOpen;
 CButton m_ButClose;
 CString m_time;
 CString m_lati;
 CString m_longi;
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CGPS_zzDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 HICON m_hIcon;

 // Generated message map functions
 //{{AFX_MSG(CGPS_zzDlg)
 virtual BOOL OnInitDialog();
 afx_msg void OnBtnOpencom();
 afx_msg void OnBtnClosecom();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
 DCB dcb;      /* 串口参数结构体 */
 HANDLE m_hComm;     /* 串口操作句柄 */
 HANDLE m_ExitThreadEvent;  /* 串口接收线程退出事件 */
 CString m_strRecDisp;   /* 接收区显示字符 */
 
 BOOL ClosePort(void);   /* 关闭串口 */

 // 打开串口
 BOOL OpenPort(LPCTSTR Port, int BaudRate, int DataBits, int StopBits, int Parity);

 // 串口接收线程
 static DWORD CommRecvTread(LPVOID lparam);

 // 串口接收数据成功回调函数
 typedef void (CALLBACK *ONCOMMRECV)(CWnd* pWnd, char *buf, int buflen);
 static void CALLBACK OnCommRecv(CWnd* pWnd, char *buf, int buflen );
 
};

只需在callback函数中声明指向类的指针pDlg即可

 

void CALLBACK CGPSDlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen )
{

    CGPSDlg * pDlg = (CGPS_zzDlg*)pWnd;

 

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值