Announcement

Collapse
No announcement yet.

USB-Drucker in C oder C++ ansprechen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • USB-Drucker in C oder C++ ansprechen

    Hallo,

    Ich möchte gerne meinen USB-Drucker in C oder C++ ansprechen.
    Habt ihr eine Idee wie ich das realisiren könnte ?
    Mir fehlt da irgendwie der Ansatz.
    Ich brauiche jetzt nicht direckt den kompletten Quellcode sondern überhaupt mal eine Idee, wie ich das Anfangen soll.

    Ich benutze Borland Turbo C++ 3.0 und möchte ihn unter Windows XP ansteuern.

    Vielen Dabnk für eure Hilfe.

  • #2
    Hatte mal so eine Druckerklasse geschrieben -> deine Version ist ja schon "uralt" vielleicht passt die noch

    #if !defined(_GDRUCKER_H)
    #define _GDRUCKER_H
    #endif
    class GDrucker
    {
    public:
    GDrucker();
    ~GDrucker();
    void Open();
    void Close();
    void StartDocument(char *name);
    void EndeDocument();
    void StartSeite();
    void EndeSeite();
    bool SetFont();
    void SetFontItalicStyle(bool wert);
    void SetFontUnderlineStyle(bool wert);
    void SetFontStrikeoutStyle(bool wert);
    void SetFontBoldStyle(int wert);
    void SetFontHeightPix(long wert);
    void SetFontHeightLog(long wert);
    void SetFontName(char *name);
    void SetFontFixed(bool wert);
    int GetSeiteBreite();
    int GetSeiteHoehe();
    bool error;
    HDC hdc;

    private:
    HKEY key;
    long test;
    DWORD typ,anzahl;
    DOCINFO dinfo;
    char drucker[50];
    HFONT hfont;
    char fontname[33];
    long italic,under,strike,height,bold;
    DWORD fix;
    };

    GDrucker::GDrucker()
    {
    key=0;
    hdc=0;
    test=RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Mic rosoft\\Windows NT\\CurrentVersion\\Windows",0,KEY_ALL_ACCESS,&key );
    if(test!=ERROR_SUCCESS)
    {
    MessageBox(NULL,"Kann REG nicht öffnen!","Drucker",MB_APPLMODAL|MB_ICONASTERISK|MB _OK);
    RegCloseKey(key);
    error=true;
    return;
    }
    typ=REG_SZ;
    anzahl=50;
    test=RegQueryValueEx(key,"Device",0,&typ,drucker,& anzahl);
    RegCloseKey(key);
    replace(drucker,44,0);
    if((test!=ERROR_SUCCESS)||(strlen(drucker)==0))
    {
    MessageBox(NULL,"Kann Drucker nicht finden!","Drucker",MB_APPLMODAL|MB_ICONASTERISK|MB _OK);
    error=true;
    return;
    }
    italic=false;
    under=false;
    strike=false;
    height=-MulDiv(12,GetDeviceCaps(hdc,LOGPIXELSY),172);
    strcpy(fontname,"Arial");
    fix=VARIABLE_PITCH;
    bold=FW_NORMAL;
    error=false;
    }

    GDrucker::~GDrucker()
    {
    if(hdc!=0)
    Close();
    }

    void GDrucker::Open()
    {
    hdc=CreateDC("WINSPOOL",drucker,NULL,NULL);
    if(hdc==NULL)
    error=true;
    else
    error=false;
    }

    void GDrucker::Close()
    {
    DeleteObject(hfont);
    DeleteDC(hdc);
    hdc=0;
    error=false;
    }

    void GDrucker::StartDocument(char *name)
    {
    memset(&dinfo,0,sizeof(DOCINFO));
    dinfo.cbSize=sizeof(DOCINFO);
    dinfo.lpszDocName=name;
    if(StartDoc(hdc,&dinfo)!=SP_ERROR)
    error=false;
    else
    error=true;
    TextOut(hdc,0,0," ",1);
    }

    void GDrucker::EndeDocument()
    {
    EndDoc(hdc);
    error=false;
    }

    void GDrucker::StartSeite()
    {
    StartPage(hdc);
    SetMapMode(hdc,MM_LOMETRIC);
    error=SetFont();

    }

    void GDrucker::EndeSeite()
    {
    EndPage(hdc);
    error=false;
    }

    bool GDrucker::SetFont()
    {
    hfont=CreateFont(height,0,0,0,bold,italic,under,st rike,ANSI_CHARSET,OUT_DEVICE_PRECIS,CLIP_DEFAULT_P RECIS,PROOF_QUALITY ,fix|FF_DONTCARE,fontname);
    SetMapperFlags(hdc,1);
    if(SelectObject(hdc,hfont)==0)
    return true;
    else
    return false;
    }

    void GDrucker::SetFontItalicStyle(bool wert)
    {
    italic=wert;
    error=SetFont();
    }

    void GDrucker::SetFontUnderlineStyle(bool wert)
    {
    under=wert;
    SetFont();
    error=false;
    }

    void GDrucker::SetFontStrikeoutStyle(bool wert)
    {
    strike=wert;
    error=SetFont();
    }

    void GDrucker::SetFontBoldStyle(int wert)
    {
    bold=wert;
    error=SetFont();
    }

    void GDrucker::SetFontHeightPix(long wert)
    {
    height=-MulDiv(wert,GetDeviceCaps(hdc,LOGPIXELSY),172);
    error=SetFont();
    }

    void GDrucker::SetFontHeightLog(long wert)
    {
    height=wert;
    error=SetFont();
    }

    void GDrucker::SetFontName(char *name)
    {
    strcpy(fontname,name);
    error=SetFont();
    }

    void GDrucker::SetFontFixed(bool wert)
    {
    if(wert==true)
    fix=FIXED_PITCH;
    else
    fix=VARIABLE_PITCH;
    error=SetFont();
    }

    int GDrucker::GetSeiteBreite()
    {
    error=false;
    return GetDeviceCaps(hdc,HORZSIZE)*10;
    }

    int GDrucker::GetSeiteHoehe()
    {
    error=false;
    return GetDeviceCaps(hdc,VERTSIZE)*10;
    Christian

    Comment


    • #3
      Mit welchem Compiler hast du die Klasse geschrieben ?
      Vielen Dank für deine Hilf

      Comment


      • #4
        Das dürfte eigentlich wurscht sein. Mit dem C-Compiler 4 von Borland (nicht die Builder-Serie; der vorletzte der reinen C-Compiler
        Christian

        Comment

        Working...
        X