ListCtrl是对话框中的一个控件,当然是在OnInitDialog中初始化了,InitInstance是初始化整个应用程序的,以下是某个对话框程序的InitInstance()函数的内容:
BOOL CCListCtrlApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
CCListCtrlDlg dlg; //////////A
m_pMainWnd = &dlg; /////////////B
int nResponse = dlg.DoModal(); /////////C
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
函数中在A行声明CCListCtrlDlg对象dlg,然后在C行调用对话框类的DoModal()函数显示对话框时才开始初始化对话框。在C行的前面时,对话框还没有建立,在C行的后面,对话框已经被销毁了,所以在InitInstance()函数中无法初始化对话框的成员。
以下是一个在OnInitDialog()函数中初始化CListCtrl的例子:
BOOL CCListCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
/*----------初始化CListCtrl控件------------------*/
//第一步:建立图像列表,如果不需要图像列表,则这一步可以省略
m_imageList.Create(16,16,TRUE,2,2);
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICONLIST_MALE));
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICONLIST_FEMALE));
m_listCtrl.SetImageList(&m_imageList,LVSIL_SMALL);
//第二步:设置扩展属性
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
//第三步:设置列
m_listCtrl.InsertColumn(0,"学号",LVCFMT_LEFT,60);
m_listCtrl.InsertColumn(1,"姓名",LVCFMT_LEFT,130);
m_listCtrl.InsertColumn(2,"性别",LVCFMT_CENTER,60);
//第四步:插入行
m_listCtrl.InsertItem(0,"1001",0);
m_listCtrl.SetItemText(0,1,"李强");
m_listCtrl.SetItemText(0,2,"男");//插入第一行
m_listCtrl.InsertItem(1,"1002",1);
m_listCtrl.SetItemText(1,1,"张红");
m_listCtrl.SetItemText(1,2,"女");//插入第二行
m_listCtrl.InsertItem(2,"1003",0);
m_listCtrl.SetItemText(2,1,"王云飞");
m_listCtrl.SetItemText(2,2,"男");//插入第三行
m_listCtrl.InsertItem(3,"1004",0);
m_listCtrl.SetItemText(3,1,"张强国");
m_listCtrl.SetItemText(3,2,"男");//插入第四行
m_listCtrl.InsertItem(4,"1005",1);
m_listCtrl.SetItemText(4,1,"孙柔嘉");
m_listCtrl.SetItemText(4,2,"女");//插入第五行
/*-------------------------------------------------*/
return TRUE; // return TRUE unless you set the focus to a control
}
该例子的工程文件下载地址:
http://www.namipan.com/downfile/CListCtrl%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B.rar/6e9e9bf13cb19ec8c06d47d4c2d9aac0f128f85130c10000
用OnInitDialog初始化滴~ 如果是InitInstance你的CListCtrl控件还没有创建何来初始化?
恩!还不错!偶也学习学习!