CEditView 中的 EDIT 控件,默认带一个水平滚动条和一个垂直滚动条。要想设置成像记事本一样自动换行(word wrap),必须把水平滚动条去掉。
问题在于,一旦 EDIT 窗体被创建的时候带滚动条,后期无论怎么修改,也不能实现自动换行。像记事本那样的程序,是在创建时就去掉了滚动条,后期再加上的。
为此仔细研究了一下 MFC 中 CEditView 的代码,找到了解决方案。
先来看一下继承顺序:
CObject
└CCmdTarget
└CWnd
└CView
└CCtrlView
└CEditView
创建窗口最终会调用 CWnd::CreateEx()。在这之前,窗体的样式已经被设定好了。
详细的代码在这里:
C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/atlmfc/src/mfc/viewedit.cpp
C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/atlmfc/src/mfc/viewcore.cpp
原因找到,就是这个 CEditView::PreCreateWindow() 惹的祸!
解决方法:重载 PreCreateWindow(),绕过 CEditView 的默认设置: