📄 ceostream.cpp
字号:
//// (c) 2000 Yuri Kiryanov, openh323@kiryanov.com// and Yuriy Gorvitovskiy//// Windows CE port of OpenH323 Open Source Project, www.openh323.org// PWLib extras//Yuriy Gorvitovskiy 23.06.00#include "ptlib.h"#ifdef _WIN32_WCE#pragma warning(disable : 4073)#pragma init_seg(lib)YWinCEOStream cerr;YWinCEOStream cout;YWinCEOStream clog;#else#include "../../../include/ptlib/wince/ceostream.h"#endif#define BufferSize 1024class YWinCEOStreamBuffer : public streambuf {public: YWinCEOStreamBuffer(); virtual ~YWinCEOStreamBuffer(); virtual int overflow(int=EOF); virtual int sync(); virtual int underflow() {return EOF;} virtual streampos seekoff(streamoff,ios::seek_dir,int =ios::in|ios::out) { return 0;} char Buffer[BufferSize+1]; HWND m_hWnd; UINT m_MessageID; YWinCEOStreamCB m_pCB; // pointer to callback function};YWinCEOStreamBuffer::YWinCEOStreamBuffer(): m_hWnd(NULL){ setp(Buffer,Buffer+BufferSize); setg(0,0,0);}YWinCEOStreamBuffer::~YWinCEOStreamBuffer(){ m_hWnd=NULL;}int YWinCEOStreamBuffer::sync(){ int ipos = pptr() - pbase(); if (ipos>0) { Buffer[ipos]=0; if (NULL != m_hWnd) // Window call { if (::IsWindow(m_hWnd)) ::SendMessage(m_hWnd,m_MessageID,(WPARAM)(void*)Buffer,0); } else if (NULL != m_pCB) // Callback call { (*m_pCB)((WPARAM)(void*)Buffer); } } setp(Buffer,Buffer+BufferSize); return 0;}int YWinCEOStreamBuffer::overflow(int c){ if (pptr() >= epptr()) { sync(); } if (c != EOF) { *pptr() = (char)c; pbump(1); } return 0;}YWinCEOStream::YWinCEOStream() :ostream(new YWinCEOStreamBuffer()){}YWinCEOStream::~YWinCEOStream(){}void YWinCEOStream::Subscribe(HWND Reciever,UINT MessageID){ lockbuf(); if (bp) { ((YWinCEOStreamBuffer*)bp)->m_hWnd = Reciever; ((YWinCEOStreamBuffer*)bp)->m_MessageID = MessageID; ((YWinCEOStreamBuffer*)bp)->m_pCB = NULL; } unlockbuf();}void YWinCEOStream::Subscribe(YWinCEOStreamCB pCB){ lockbuf(); if (bp) { ((YWinCEOStreamBuffer*)bp)->m_hWnd = NULL; ((YWinCEOStreamBuffer*)bp)->m_pCB = pCB; } unlockbuf();}void YWinCEOStream::UnSubscribe(){ lockbuf(); ((YWinCEOStreamBuffer*)bp)->m_hWnd=NULL; ((YWinCEOStreamBuffer*)bp)->m_pCB = NULL; unlockbuf();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -