+ -
当前位置:首页 → 问答吧 → 我想设置Edit背景色?

我想设置Edit背景色?

时间:2011-12-22

来源:互联网

我通过继承CEdit类,改写了[code=C/C++][/code]HBRUSH CEditPlus::CtlColor(CDC* pDC, UINT nCtlColor) 
{

  pDC->SetBkColor(color);

return CreateSolidBrush(color);
}
注:color 已经通过别一函数来设值。
有如下几个小问题或疑问:1.return CreateSolidBrush();这句会不会泄露内存资源
  2.如果return NULL,那么整个函数操作就像没更改Edit框,不知道这个虚函数处于什么地位。换句话说,Edit框的背景在什么时候,通过发送ON_WM_CTLCOLOR_REFLECT消息来调用。
  3:CEditPlus成员变量作为对话框的成员变量,当对话框构造时,其成员也构造,此时没有创建窗体。而在对话框的OnInitDialog()函数里,通过调用CEditPlus类型变量的成员函数,如SetWindowText等函数没有出错,说明些时窗体(m_hwnd)已经建立了,我想问的是CEditPlus窗体什么时候建立的。是在发送ON_WM_INITDIALOG之前?还是在发ON_WM_INIDIALOG消息之前还有其他什么消息?具体是什么消息使相应控件的变量获得窗体(create)
  4.是不是当对话框建立起来时,其他什么控件的窗体也必须全部建立起来。

作者: alinzai   发布时间: 2011-12-22

补充:在ON_WM_INIDIALOG之前有ON_WM_CREATE消息,但通过调用对话框中控件的成员函数,会出现错误,说明此时还没有建立相应的窗体,那么在ON_WM_CREATE之后在ON_WM_INIDIALOG之前,是通过什么操作建立控件窗体的?是通过发送什么消息吗?如果真通过什么消息是谁发向谁来建立的(对话框发送给控件,还是控件获得什么消息,建好之后,再回传一个消息吗?)其次通过发送消息,是通过什么相应函数来创建的?(是create/createex )

作者: alinzai   发布时间: 2011-12-22

return CreateSolidBrush();
改用return一个CBrush成员变量,该变量先初始化

作者: VisualEleven   发布时间: 2011-12-22

WM_CTLCOLOR
The framework calls this member function when a child control is about to be drawn. 

先创建父窗口,再创建子窗口,没有老子哪里来的儿子呢
The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box. 

作者: VisualEleven   发布时间: 2011-12-22