void CPadView::OnWordWrap() { CWaitCursor wait; SetWordWrap(!IsWordWrap()); m_bDefWordWrap = IsWordWrap(); }
void CxEditView::OnUpdateWordWrap(CCmdUI* pCmdUI) { pCmdUI->SetCheck(IsWordWrap()); }
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, GWLP_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; }