RichEdit,API编程的问题!!急!!
BOOL NCRichEdit::Create( HWND hWndParent, UINT uiWidth, UINT uiHeight )
{
//每一个RichEdit对象只能创建一次
if( NULL != m_hWndRichEdit )
return TRUE;
if ( NULL == ( m_hWndParent = hWndParent ) )
return NULL;
RECT rcClient;
GetClientRect( hWndParent, &rcClient );
m_dwLeft = rcClient.left;
m_dwTop = rcClient.top;
m_dwRight = rcClient.left + uiWidth;
m_dwBottom = rcClient.top + uiHeight;
return Create();
}
BOOL NCRichEdit::Create( void )
{
if ( NULL == ( m_RichEditLib = LoadLibrary( "Riched20.dll" ) ) ) return FALSE;
m_hWndRichEdit = CreateWindowEx(
0L,
RICHEDIT_CLASS,
NULL,
WS_CHILD | WS_VISIBLE
| ES_MULTILINE | WS_BORDER
| WS_VSCROLL,
m_dwLeft,
m_dwTop,
m_dwRight,
m_dwBottom,
m_hWndParent,
(HMENU)NULL,
g_hInst,
NULL );
if ( NULL == m_hWndRichEdit ) return FALSE;
return SendMessage( m_hWndRichEdit, EM_SETCHARFORMAT, ( WPARAM )SCF_DEFAULT, ( LPARAM )&m_cfRichEdit );
}
BOOL NCRichEdit::AddLine( char* pzBuf )
{
lstrcpy( lpsLines, pzBuf );//lpsLines为类成员,已申请内存空间
memset( &m_esRichEdit, 0x00, sizeof( m_esRichEdit ) );//m_esRichEdit类成员
m_esRichEdit.dwCookie = ( DWORD )lpsLines;
// m_esRichEdit.dwError = 0;
m_esRichEdit.pfnCallback = ( EDITSTREAMCALLBACK )EditStreamInCallBack;
SendMessage( m_hWndRichEdit, EM_STREAMIN, ( WPARAM )( SF_RTF | SFF_SELECTION ), ( LPARAM )&m_esRichEdit );
return TRUE;
}
DWORD EditStreamInCallBack( DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb )
{
LPTSTR psz = (LPTSTR)dwCookie;
LONG cchAvail = lstrlen(psz);
if ((*pcb = min(cchAvail, cb)) != 0) {
memcpy (pbBuff, psz, *pcb);
memmove (psz, &psz[*pcb], cchAvail - *pcb + 1);
pbBuff[ *pcb ] = '\0';
}
return 0;
}
调用:
NCRichEdit Inst_RichEdit;
Inst_RichEdit.Create( m_hWnd, 500,650 );//m_hWnd 主窗口句柄
Inst_RichEdit.AddLine( "123" );
//这一句调用经调试发现在RichEd20.dll内部发生错误,请高手指点一下
,告诉我怎么调用才是正确的?