我通过继承CEdit类,改写了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.是不是当对话框建立起来时,其他什么控件的窗体也必须全部建立起来。
{ 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.是不是当对话框建立起来时,其他什么控件的窗体也必须全部建立起来。
那到底各控件什么时候建立窗体的?
改用return一个CBrush成员变量,该变量先初始化
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.
hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT))
循环执行::SendMessage(hWndChild, message, wParam, lParam);
这时的message 是 通过CWnd::ExecuteDlgInit(void * 0x00000000)函数里 WM_INITIALUPDATE
在wizard(CTRRL + W)里 所有的控件包括对话框,都没有可以进行WM_INITAIALUPDATE添加的进行的虚拟函数!我估计是对话框这样的程序是MFC不愿意思给我们修改!?!
class CComboBoxNew : public CComboBox那这个组合框里的编缉框,它的背景色又怎么改变