mfc: 获取打印机列表

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的,

在这里插入图片描述

Guess you like

Origin blog.csdn.net/hunter___/article/details/113182869