m_nlistLSDHDJ->GetSafeHwnd() 中的m_nlistLSDHDJ 在初始化的时候是有值的, 但跳到下面的函数就没有了, class CMyTabPage1 : public CDialog { // Construction public: CMyTabPage1(CWnd* pParent = NULL); // standard constructor void CMyTabPage1::update_list_control(int length, UCHAR *get_data_buffer,LPTSTR *get_item ); void Init_list_ctrl(void);private:} /************************************************************************************/ // @FUNCTION NAME: void CLCDDlg::update_list_ctrl(char *insert_content, LPTSTR insert_cmd_ID ) // @ update the content of control list // @RETURN: // // // /************************************************************************************/void CMyTabPage1::load_list_ctrl(char *insert_content, LPTSTR insert_cmd_ID ) {
char line_number[20]; CString str; CTime t=0; /*get local time */ t=t.GetCurrentTime(); str=t.Format("%H:%M:%S");try{ /**********************typing characters into the list control****************************/ if(m_nlistLSDHDJ->GetSafeHwnd()) {
int nCount = m_nlistLSDHDJ->GetItemCount();
int nItem = m_nlistLSDHDJ->InsertItem(nCount, str);//insert time
int total_col = m_nlistLSDHDJ->GetCountPerPage(); itoa(nCount,line_number,10);
m_nlistLSDHDJ->SetItemText(nItem, 1, line_number); m_nlistLSDHDJ->SetItemText(nItem, 2, insert_content ); m_nlistLSDHDJ->SetItemText(nItem, 3, insert_cmd_ID); if(nItem+total_col<=nCount)/*refresh the last page after the screen is full */ { m_nlistLSDHDJ->EnsureVisible((nItem+total_col),TRUE); } else { m_nlistLSDHDJ->EnsureVisible(nItem-1, TRUE); } }
我没有放控件CListCtrl* m_nlistLSDHDJ;
/************************************************************************************/
// @FUNCTION NAME: void CLCDDlg::Init_list_ctrl(void)
// @ initialization the list control
// @RETURN:
//
//
//
/************************************************************************************/void CLCDDlg::Init_list_ctrl(void)
{
try
{
#if 0
CRect rect_nlist(10,150,700,350);
this->GetClientRect(&rect_nlist);
rect_nlist.top=10;
rect_nlist.left+=700;
rect_nlist.right-=10;
rect_nlist.bottom=500;
#else
// full width
CRect rect_nlist(10,150,500,350);
this->GetClientRect(&rect_nlist);
rect_nlist.top=10;
rect_nlist.left+=500;
rect_nlist.right-=10;
rect_nlist.bottom=500;
#endif
this->m_nlistLSDHDJ=new CListCtrl;
m_nlistLSDHDJ->Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|WS_BORDER,rect_nlist, this,ID_listctr);
this->m_nlistLSDHDJ->ModifyStyle(LVS_EDITLABELS, 0L); //禁止标题编辑
m_nlistLSDHDJ->ModifyStyle(0L, LVS_REPORT); //设为Report类型
m_nlistLSDHDJ->ModifyStyle(0L, LVS_SHOWSELALWAYS); //始终高亮度被选中的表项
m_nlistLSDHDJ->ModifyStyle(0L, LVS_NOSORTHEADER);
m_nlistLSDHDJ->ModifyStyle( LVS_OWNERDRAWFIXED,0L);
m_nlistLSDHDJ->SetExtendedStyle( LVS_EX_FULLROWSELECT | //允许整行选中
LVS_EX_GRIDLINES | //画出网格线
LVS_EX_FLATSB //扁平风格的滚动条
);
CString str;
int i=0;
//insert column
m_nlistLSDHDJ->InsertColumn( i, "时间" );
m_nlistLSDHDJ->InsertColumn( 1, "LINE NUMBER");
m_nlistLSDHDJ->InsertColumn( 2, "命令类型" );
m_nlistLSDHDJ->InsertColumn( 3, "对应的CIS" );
m_nlistLSDHDJ->InsertColumn( 4, "hgg hg" );
// 2、插入1行
// m_nlistLSDHDJ->InsertItem(0,"");
// 3、调整列宽
RECT rect2;
m_nlistLSDHDJ->GetWindowRect(&rect2);
int wid = rect2.right - rect2.left;
for( i=0; i<5; i++ )
{
m_nlistLSDHDJ->SetItemText(0,i,"");
m_nlistLSDHDJ->SetColumnWidth( i, wid/5 );
}
m_nlistLSDHDJ->Invalidate(false);
// m_tree.SetItemText(hItem,"root");
}
catch(...)
{
}}
如果m_nlistLSDHDJ已经和你放在Dlg上的控件关联,就不用再new了... - -#
{
// Construction
public:
CMyTabPage1(CWnd* pParent = NULL); // standard constructor
void CMyTabPage1::update_list_control(int length, UCHAR *get_data_buffer,LPTSTR *get_item );
void Init_list_ctrl(void);private:}
/************************************************************************************/
// @FUNCTION NAME: void CLCDDlg::update_list_ctrl(char *insert_content, LPTSTR insert_cmd_ID )
// @ update the content of control list
// @RETURN:
//
//
//
/************************************************************************************/void CMyTabPage1::load_list_ctrl(char *insert_content, LPTSTR insert_cmd_ID )
{
char line_number[20];
CString str;
CTime t=0;
/*get local time */
t=t.GetCurrentTime();
str=t.Format("%H:%M:%S");try{
/**********************typing characters into the list control****************************/
if(m_nlistLSDHDJ->GetSafeHwnd())
{
int nCount = m_nlistLSDHDJ->GetItemCount();
int nItem = m_nlistLSDHDJ->InsertItem(nCount, str);//insert time
int total_col = m_nlistLSDHDJ->GetCountPerPage(); itoa(nCount,line_number,10);
m_nlistLSDHDJ->SetItemText(nItem, 1, line_number);
m_nlistLSDHDJ->SetItemText(nItem, 2, insert_content );
m_nlistLSDHDJ->SetItemText(nItem, 3, insert_cmd_ID); if(nItem+total_col<=nCount)/*refresh the last page after the screen is full */
{
m_nlistLSDHDJ->EnsureVisible((nItem+total_col),TRUE);
}
else
{
m_nlistLSDHDJ->EnsureVisible(nItem-1, TRUE);
}
}
}
catch(...)
{ }}
CLCDDlg 还是 CMyTabPage1 的啊?
我认为你在这两个对话框中都有一个 ListCtrl,变量名都是m_nlistLSDHDJ。
但是在CLCDDlg中的被初始化了,而CMyTabPage1里的没有!
Searching for 'm_nlistLSDHDJ'...
D:\Lcd-2\LCDDlg.cpp(57): /// m_nlistLSDHDJ = NULL;
D:\Lcd-2\MyTabPage1.cpp(137): if(m_nlistLSDHDJ->GetSafeHwnd())
D:\Lcd-2\MyTabPage1.cpp(142): int nCount = m_nlistLSDHDJ->GetItemCount();
D:\Lcd-2\MyTabPage1.cpp(144): int nItem = m_nlistLSDHDJ->InsertItem(nCount, str);//insert time
D:\Lcd-2\MyTabPage1.cpp(146): int total_col = m_nlistLSDHDJ->GetCountPerPage();
D:\Lcd-2\MyTabPage1.cpp(151): m_nlistLSDHDJ->SetItemText(nItem, 1, line_number);
D:\Lcd-2\MyTabPage1.cpp(152): m_nlistLSDHDJ->SetItemText(nItem, 2, insert_content );
D:\Lcd-2\MyTabPage1.cpp(153): m_nlistLSDHDJ->SetItemText(nItem, 3, insert_cmd_ID);
D:\Lcd-2\MyTabPage1.cpp(157): m_nlistLSDHDJ->EnsureVisible((nItem+total_col),TRUE);
D:\Lcd-2\MyTabPage1.cpp(161): m_nlistLSDHDJ->EnsureVisible(nItem-1, TRUE);
D:\Lcd-2\MyTabPage1.cpp(213): this-> m_nlistLSDHDJ=new CListCtrl;
D:\Lcd-2\MyTabPage1.cpp(214): m_nlistLSDHDJ->Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|WS_BORDER,rect_nlist, this,ID_listctr);
D:\Lcd-2\MyTabPage1.cpp(215): this->m_nlistLSDHDJ->ModifyStyle(LVS_EDITLABELS, 0L); //禁止标题编辑
D:\Lcd-2\MyTabPage1.cpp(216): m_nlistLSDHDJ->ModifyStyle(0L, LVS_REPORT); //设为Report类型
D:\Lcd-2\MyTabPage1.cpp(217): m_nlistLSDHDJ->ModifyStyle(0L, LVS_SHOWSELALWAYS); //始终高亮度被选中的表项
D:\Lcd-2\MyTabPage1.cpp(218): m_nlistLSDHDJ->ModifyStyle(0L, LVS_NOSORTHEADER);
D:\Lcd-2\MyTabPage1.cpp(219): m_nlistLSDHDJ->ModifyStyle( LVS_OWNERDRAWFIXED,0L);
D:\Lcd-2\MyTabPage1.cpp(220): m_nlistLSDHDJ->SetExtendedStyle( LVS_EX_FULLROWSELECT | //允许整行选中
D:\Lcd-2\MyTabPage1.cpp(227): m_nlistLSDHDJ->InsertColumn( i, "时间" );
D:\Lcd-2\MyTabPage1.cpp(228): m_nlistLSDHDJ->InsertColumn( 1, "LINE NUMBER");
D:\Lcd-2\MyTabPage1.cpp(229): m_nlistLSDHDJ->InsertColumn( 2, "命令类型" );
D:\Lcd-2\MyTabPage1.cpp(230): m_nlistLSDHDJ->InsertColumn( 3, "对应的CIS" );
D:\Lcd-2\MyTabPage1.cpp(231): m_nlistLSDHDJ->InsertColumn( 4, "hgg hg" );
D:\Lcd-2\MyTabPage1.cpp(234): // m_nlistLSDHDJ->InsertItem(0,"");
D:\Lcd-2\MyTabPage1.cpp(239): m_nlistLSDHDJ->GetWindowRect(&rect2);
D:\Lcd-2\MyTabPage1.cpp(244): m_nlistLSDHDJ->SetItemText(0,i,"");
D:\Lcd-2\MyTabPage1.cpp(245): m_nlistLSDHDJ->SetColumnWidth( i, wid/5 );
D:\Lcd-2\MyTabPage1.cpp(248): m_nlistLSDHDJ->Invalidate(false);
D:\Lcd-2\MyTabPage1.h(57): CListCtrl* m_nlistLSDHDJ;
29 occurrence(s) have been found.
D:\Lcd-2\MyTabPage1.cpp(214): m_nlistLSDHDJ->Create(WS_CHILD ¦WS_VISIBLE ¦LVS_REPORT ¦WS_BORDER,rect_nlist, this,ID_listctr); 你调用m_nlistLSDHDJ->GetSafeHwnd()时这个控件还没有被创建呢...当然为NULL!
void CLCDDlg::Init_list_ctrl(void)
void CMyTabPage1::load_list_ctrl(char *insert_content, LPTSTR insert_cmd_ID )
显然这两个函数是不同类的成员函数,那么,m_nlistLSDHDJ到底是哪个类的成员变量?上面这两个类(CLCDDlg、CMyTabPage1)是什么关系?
D:\Lcd-2\MyTabPage1.h(57): CListCtrl* m_nlistLSDHDJ;
怎么又会在
D:\Lcd-2\LCDDlg.cpp(57): /// m_nlistLSDHDJ = NULL;
m_nlistLSDHDJ是不是外部变量啊。然后每个cpp文件再#include "MyTabPage1.h"
如果这样,那么你应该在声明的时候加上extern,否则,你看看不同文件中的m_nlistLSDHDJ的地址,就知道不是同一个变量了。