1.MFC中动态创建控件(以CButton为例)
1.在xxdlg.h中添加CButton控件类指针 CButton *mybutton
2.在xxDlg::OnInitDialog()函数中初始化控件指针 mybutton=new CButton();
3.在String talbe中设置控件的唯一ID 例如IDC_MYBUTTON 然后在Caption中添加对应的说明文字。
4.最后在需要的地方或者发生对应的事件后通过函数
mybutton->Create("Button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(570,355,630,400),this,IDC_MYBUTTON);
生成控件
第一个参数为显示在控件上的文字,第二个参数为控件属性,第三个参数为控件产生的位置,第四个参数应该表示产生在哪个窗口吧?(自己查下MSDN)
第五个参数表示这个控件对应的ID(就是在String Table中添加的)。
到这步就可以显示控件了,下面步骤为控件添加消息响应处理函数
5.xxDlg.h的AFX_MSG{................}AFX_MSG之后加入
afx_msg void OnMyButton();
此为定义一个消息响应函数void OnMyButton()
6.在xxDlg.cpp的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间加入
ON_BN_CLICKED(IDC_MYBUTTON, OnMyButton)
IDC_MYBUTTON为控件ID,OnMyButton为控件消息响应函数
表示具体ID号为IDC_MYBUTTON的控件产生单击事件后会调用此事件的处理函数OnMyButton()来执行相应动作;
7.在xxDlg.cpp中添加OnMyButton函数的实现
void xxDlg::OnMyButton(){......................}
8.最后要若需要暂时想销毁窗口时可通过函数
mybutton->DestroyWindow()
实现。
主要参考:http://hi.baidu.com/wangyunfeubaby/blog/item/7ccff9cee52d76430fb3458b.html
2.MFC中动态创建的控件不能显示的问题
Create(_T("Button"),WS_CHILD|WS_VISIBLE|BS_FLAT|BS_PUSHBUTTON,CRect(570,355,630,400),this,IDC_MYBUTTON);
问题是函数CRect函数中的参数设置不合理!
CRect中的参数前两个表示控件左上角的X、Y坐标,后两位表示控件右下角的X、Y轴坐标!这样来可以确定BUTTON控件的大小以及位置!
3.MFC中List 控件不能显示列表头
动态创建的时候在窗口风格处 添加LVS_REPORT属性。
4.MFC中List控件中插入条目不能正常显示。
这个和函数输入错误参数有关!应该使用如下方法!
tmp = m_listctrl->InsertItem(i,rows[i].id,0);
m_list->SetItemText(tmp,1,rows[i].addr);
调用InsertItem函数后会返回一个条目索引,这个索引值就是新插入的条目,
然后再根据这个条目插入第二列 第三列等。此处的tmp就是用来保存索引用的!