关于自动CEditView 动态自动换行的问题,我找到了,superpad 于是就套用了他的两个函数:BOOL CPadView::IsWordWrap() const
{
return (GetStyle() & ES_AUTOHSCROLL) == 0;
}
////////////////////////////////////////////////////////////////////////////
BOOL CPadView::SetWordWrap(BOOL bWordWrap)
{
bWordWrap = !!bWordWrap;    // make sure ==TRUE || ==FALSE
if (IsWordWrap() == bWordWrap)
return FALSE;// preserve original control's state.
CFont* pFont = GetFont();
int nLen = GetBufferLength();
TCHAR* pSaveText = new TCHAR[GetBufferLength()+1];
GetWindowText(pSaveText, nLen+1);// create new edit control with appropriate style and size.
DWORD dwStyle = dwStyleDefault & ~(ES_AUTOHSCROLL|WS_HSCROLL|WS_VISIBLE);
if (!bWordWrap)
dwStyle |= ES_AUTOHSCROLL|WS_HSCROLL;CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
CWnd* pFocus = GetFocus();UINT_PTR nID = GetDlgCtrlID();HWND hWnd = ::CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL, dwStyle,
rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
pParent->m_hWnd, (HMENU)nID, AfxGetInstanceHandle(), NULL);if (hWnd == NULL)
{
delete[] pSaveText;
return FALSE;
}// set the window text to nothing to make sure following set doesn't fail
SetWindowText(NULL);// restore visual state
::SetWindowText(hWnd, pSaveText);
delete[] pSaveText;
if (pFont != NULL)
{
ASSERT(pFont->m_hObject != NULL);
::SendMessage(hWnd, WM_SETFONT, (WPARAM)pFont->m_hObject, 0);
}// detach old window, attach new
SetDlgCtrlID((UINT)nID+1);
HWND hWndOld = Detach();
::SetWindowLongPtr(hWndOld, GWL_WNDPROC, (LONG_PTR)*GetSuperWndProcAddr());
ASSERT(m_hWnd == NULL);
SubclassWindow(hWnd);
ASSERT(m_hWnd == hWnd);
GetParentFrame()->SendMessage(WM_RECALCPARENT);UINT nTabStops = m_nTabStops;
GetEditCtrl().SetTabStops(nTabStops);GetClientRect(&rect);
SetWindowPos(NULL, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_SHOWWINDOW);
SetWindowPos(NULL, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_DRAWFRAME);
SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
UpdateWindow();// destroy old
::SetWindowPos(hWndOld, NULL, 0, 0, 0, 0,
SWP_HIDEWINDOW|SWP_NOREDRAW|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|
SWP_NOZORDER);
::DestroyWindow(hWndOld);// restore rest of state...
GetEditCtrl().LimitText(nMaxSize);
if (pFocus == this)
SetFocus();// notify container that doc changed
GetDocument()->UpdateAllItems(NULL);ASSERT_VALID(this);
return TRUE;
}调试成功,可是第一次调用 SetWordWrap 能正常换行,但是第二次调用他,就是换回原来的,可怎么都不行,我通过调试,发现, hWnd = ::CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL, dwStyle,
rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
pParent->m_hWnd, (HMENU)nID, AfxGetInstanceHandle(), NULL);这个 hWnd 出了第一次调用可以成功创建外,以后都创建不才成功,hWnd 都为NULL向大家请教怎么解决,万分感谢!