插入符的创建(MFC)

 1 int CDrawRectangleDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CDialog::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5 
 6     // TODO:  在此添加您专用的创建代码
 7     
 8  CreateSolidCaret(1,30);
 9  ShowCaret();
10     return 0;
11 }

OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。

在view类中,Create 是虚函数框架调用,是用来“生成一个窗口的子窗口”。而OnCreate 函数是用来“表示一个窗口正在生成”。

一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。因为在MFC里面用一种消息映射的机制来响应消息,也就是可以用函数来响应相应的消息。就拿CMainFrame类来说,当窗口创建后会产生WM_CREATE消息,我们可以在OnCreate函数里实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。这些子窗口一般是定义成类中的一个成员变量,因为要保证生命周期。一般以m_开头来表示成员(member)。

OnCreate()不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置等,Create()负责注册并产生窗口

Create()不是对应于消息WM_CREATE的,OnCreate()才是。Create()只用于产生窗口,像动态创建控件中的Create()一样。

WM_CREATE是windows中一个窗口消息。

当一个应用程序创建窗口时,会通过消息处理函数。但是这个消息在CreateWindow函数返回之前被送到消息处理函数。

例如,当要获取系统的字体时,我们可以先向这个窗口发送 WM_CREATE消息,以后字体不会改变了,程序会保存这个系统字体的消息!以后就可以用这个字体了!

WM_CREATE返回值

类型为LRESULT

如果一个程序处理这个消息,它应当返回0以使得窗口的创建过程得以继续。如果对于这个消息程序返回-1,窗口将会被销毁,并且CreateWindowEx或者CreateWindow函数将会返回一个值为NULL的句柄。

CreateSolidCaret()函数

void CreateSolidCaret(int nWidth,int nHeight);

nWidth 指定插入符的宽度(逻辑单位),如果该参数值为0,那么系统将其设置为系统定义的窗口边界的宽度

nHeight 指定插入符的高度(逻辑单位),如果该参数值为0,那么系统将其设置为系统定义的窗口边界的高度

CreateSolidCaret函数创建插入符以后,该插入符初始时是隐藏的,必须调用ShowCaret函数来显示它。

原文地址:https://www.cnblogs.com/qiwu1314/p/8441251.html