void CHelperDlg::OnBnClickedBtnMaintain()
{
CListCtrl *m_ListPrinter=(CListCtrl *)GetDlgItem(IDC_LIST_PRINTER);
//int count=m_ListPrinter->GetItemCount(); //列表中的个数
//m_ListPrinter->InsertItem(count,str1); //插入 ,在第n个位置插入
DWORD Flags = PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL;
DWORD cbBuf;
DWORD pcReturned ;
CString str;
DWORD Level = 2;
TCHAR Name[500]={
0} ;
::EnumPrinters(Flags,
Name,
Level,
NULL,
0,
&cbBuf, //需要多少内存
&pcReturned) ;
const LPPRINTER_INFO_2 pPrinterEnum = (LPPRINTER_INFO_2)LocalAlloc(LPTR, cbBuf + 4) ;
if (!pPrinterEnum)
{
str.Format(L"error is %d",GetLastError());
MessageBox(str,0,0);
}
if (!EnumPrinters(
Flags,
Name,
Level,
(LPBYTE)pPrinterEnum,
cbBuf,
&cbBuf,
&pcReturned)
)
{
str.Format(L"error is %d",::GetLastError());
MessageBox(str,0,0);
return ;
}
CString temp;
temp.Format(_T("有几个数组元素%d"),pcReturned);
printf("\nprinter count:%d",pcReturned);
//AfxMessageBox(temp);
CListBox *printer_list;
printer_list=(CListBox*)GetDlgItem(IDC_LISTBOX_PRINTER);
//CListBox printer_list = GetDlgItem(IDC_LISTBOX_PRINTER);
printer_list->ResetContent();
m_ListPrinter->DeleteAllItems(); //清空所有表项
for(unsigned int i=0;i<pcReturned;i++)
{
//fill with printer
m_ListPrinter->InsertItem(i,NULL); //插入一行
LPPRINTER_INFO_2 pInfo=&pPrinterEnum[i];
m_ListPrinter->SetItemText(i,0,pInfo->pPrinterName);
/*
m_ListPrinter->SetItemText(i,1,pInfo->pServerName);
m_ListPrinter->SetItemText(i,2,pInfo->pDriverName);
m_ListPrinter->SetItemText(i,3,pInfo->pPrintProcessor);
*/
//add to listbox
printer_list->AddString(pInfo->pPrinterName);
}
printer_list->SelectString(0,L"100");
LocalFree(pPrinterEnum);
}
略傻,一开始抄了个用Controllist的,