在程序中动态控制CEdit是否自动换行,没什么没效果?

liuyan4794 2005-05-13 08:54:25
在程序中动态控制CEdit是否自动换行,没什么没效果?
if(this->m_CKCmd.GetCheck()==BST_CHECKED)
{
DWORD ws=::GetWindowLong(this->m_RecEdit.GetSafeHwnd(),GWL_STYLE);
::SetWindowLong(this->m_RecEdit.GetSafeHwnd(),GWL_STYLE,ws|ES_AUTOHSCROLL);
}
else
{
DWORD ws=::GetWindowLong(this->m_RecEdit.GetSafeHwnd(),GWL_STYLE);
::SetWindowLong(this->m_RecEdit.GetSafeHwnd(),GWL_STYLE,ws&~ES_AUTOHSCROLL);
}
this->Invalidate();
...全文
219 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyan4794 2005-05-13
  • 打赏
  • 举报
回复
谢谢大家帮忙,揭帖了
liuyan4794 2005-05-13
  • 打赏
  • 举报
回复
我还不如在开始就创建两个,然后再这两个之间切换呢
koko1998 2005-05-13
  • 打赏
  • 举报
回复
学习了.
mark
xxrl 2005-05-13
  • 打赏
  • 举报
回复
恩上面说得正确 需要重新create
liuyan4794 2005-05-13
  • 打赏
  • 举报
回复
真是太可恶了吧
jerry 2005-05-13
  • 打赏
  • 举报
回复
在原EDIT 的 位置 创建一个新的 CEdit , 然后将原EDIT的内容送过去. 显示出来, 原EDIT 删除
vcmute 2005-05-13
  • 打赏
  • 举报
回复
需要重新CreateWindow,MSDN的例子

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;
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧