CEditView 中如何像记事本一样自动换行

时间:2021-01-17 00:21:24

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 的默认设置: