1.动态创建控件
1.1 创建
CEdit *pEdit = new CMyEdit;
pEdit->Create(ES_MULTILINE | WS_CHILD |WS_VISIBLE | WS_TABSTOP | WS_BORDER,
rcEdit, this, STATIC_START + iIndex);
pEdit->SetWindowText(CMyType::Itochar(iter->second.usChanged).c_str());
pEdit->SetFont(&m_font);
<pre name="code" class="cpp">Create(Style, Location, Dlg, CtrlID),
使用一成员变量记录动态创建的控件的ID以及其他需要的信息
1.2 响应消息
<pre name="code" class="cpp">创建其相应消息,以CEdit 为例
添加消息响应函数
LRESULT CXXXXX::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
该函数为控件响应函数的统一接口
LRESULT CXXXX::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
<span style="white-space:pre"> </span>if (WM_COMMAND == message) //控制命令
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>switch (HIWORD(wParam)) //响应消息
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>case EN_KILLFOCUS: //CEdit的失去焦点消息
<span style="font-family: FangSong_GB2312;"> //将获取到的Lp转换为CEdit,该控件的所有信息都在pEditCtrl里面了</span>
<span style="white-space:pre"> CEdit* pEditCtrl</span> = ((CEdit*)FromHandle(HWND(lParam)));
pEditCtrl->SendMessage(WM_COMMAND, MAKELONG(0, EN_CHANGE),(LPARAM)pEditCtrl->GetSafeHwnd()); //再发条消息
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case EN_CHANGE:
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case CBN_SELCHANGE:
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>default:
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//this->SetFocus();
<span style="white-space:pre"> </span>return CDialog::WindowProc(message, wParam, lParam);
}
<h3>2.设置控件颜色</h3>
添加相应消息
HBRUSH CXXXX::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
if (pWnd->GetDlgCtrlID() == IDC_CTRLID)
{
pDC->SetTextColor(RGB(0, 0, 200)); //设置控件文字颜色
pDC->SetBkColor(RGB(255, 0, 0)); //设置控件背景颜色
}