主题:[讨论]listcontrol控件闪烁的问题
想仿照windows任务管理器做一个进程的查看程序,使用listcontrol控件显示,每一秒刷新一次数据,但是控件频闪,不知道windows任务管理器是如何做的,望高手指点一下。
下面是OnTimer()里的实现。
if (nIDEvent = 1)
{
HANDLE hSnapshot;
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
PROCESSENTRY32 processListStr;
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOL return_value;
return_value=Process32First(hSnapshot,&processListStr);//获得系统进程链表中第一个进程的信息
m_ctrAll.DeleteAllItems();
m_ctrAll.LockWindowUpdate();
int i=0; //item index
while(return_value)
{
m_ctrAll.InsertItem(i,processListStr.szExeFile,0);
CString s;
s.Format("%d",processListStr.cntThreads);
m_ctrAll.SetItemText(i,1,s);
s.Format("%d",processListStr.th32ParentProcessID);
m_ctrAll.SetItemText(i,2,s);
s.Format("%d",processListStr.pcPriClassBase);
m_ctrAll.SetItemText(i,3,s);
// int memory=processListStr.cntThreads;
// m_ProcessIndex[i]=processListStr.th32ProcessID;//save ID into array to teminate
return_value=Process32Next(hSnapshot,&processListStr);
//获得系统进程链表中下一个进程的信息
i++;
}
CloseHandle(hSnapshot);
m_ctrAll.UnlockWindowUpdate();
}
下面是OnTimer()里的实现。
if (nIDEvent = 1)
{
HANDLE hSnapshot;
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
PROCESSENTRY32 processListStr;
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOL return_value;
return_value=Process32First(hSnapshot,&processListStr);//获得系统进程链表中第一个进程的信息
m_ctrAll.DeleteAllItems();
m_ctrAll.LockWindowUpdate();
int i=0; //item index
while(return_value)
{
m_ctrAll.InsertItem(i,processListStr.szExeFile,0);
CString s;
s.Format("%d",processListStr.cntThreads);
m_ctrAll.SetItemText(i,1,s);
s.Format("%d",processListStr.th32ParentProcessID);
m_ctrAll.SetItemText(i,2,s);
s.Format("%d",processListStr.pcPriClassBase);
m_ctrAll.SetItemText(i,3,s);
// int memory=processListStr.cntThreads;
// m_ProcessIndex[i]=processListStr.th32ProcessID;//save ID into array to teminate
return_value=Process32Next(hSnapshot,&processListStr);
//获得系统进程链表中下一个进程的信息
i++;
}
CloseHandle(hSnapshot);
m_ctrAll.UnlockWindowUpdate();
}