Zum Inhalt springen

Narf!

Mitglieder
  • Gesamte Inhalte

    480
  • Benutzer seit

  • Letzter Besuch

Beiträge von Narf!

  1. Dann mal hier etwas vom Rest, Text zeichnen:

    
    CDC *pDC=0;
    
    
    int main()
    
     {
    
      CImage img;
    
    
      img.Load("Bild.jpg")
    
    
      pDC=CDC::FromHandle(img.GetDC());
    
    
      CRect rect; //hier wird der Output-Bereich festgelegt
    
    
      rect.top=150;
    
    
      rect.left=550;
    
    
      rect.bottom=rect.top+60;
    
    
      rect.right=rect.left+800;
    
    
      DrawText("Text", 48, rect); //hier muss ich die Schriftgröße ziemlich groß wählen, da sie sonst auf dem neuen Bild kaum zu erkennen ist.
    
    
      img.Save("NeuBild.jpg");
    
    
      img.ReleaseDC();
    
     }//end int main();
    
    
    void DrawText(CString Text, CRect rect, int hoehe);
    
     {
    
      CFont font;
    
      LOGFONT lFont;
    
    
      ZeroMemory(&lFont, sizeof(LOGFONT));
    
    
      lFont.lfHeight=hoehe;
    
    
      lFont.lfWeight=FW_EXTRABOLD;
    
    
      strcpy(lFont.lfFaceName, "Verdana");
    
    
      VERIFY(font.CreateFontIndirect(&lFont));
    
    
      CFont* def_font=pDC->SelectObject(&font);
    
    
      pDC->DrawText(Text, Text.GetLength(), rect, DT_VCENTER|DT_END_ELLIPSIS|DT_LEFT|DT_NOFULLWIDTHCHARBREAK|DT_WORDBREAK);
    
    
      font.DeleteObject();
    
     }//end void DrawText()
    
    

  2. Hallo an alle Zeichner!

    
    CImage img;
    
    
    CImage img.Load("Bild.jpg");
    
    
    CDC *pDC=CDC::FromHandle(img.GetDC());
    
    
    //keine weitere Bearbeitung oder pDC->DrawText()
    
    
    img.Save("NeuBild.jpg");
    
    
    img.ReleaseDC();
    
    

    Beim Laden hat das Bild eine Auflösung von 420x420. Beim Speichern aber 1748x1748.

    Die Bilder haben beide 96 DPI.

    Warum wird die Auflösung geändert ohne dass ich was dazu tun muss bzw. was kann ich dagegen tun?

    VC++ 2003, Konsole-Programm

  3. Hallo an Alle!

    Ich bin dabei eine XML-Datei mit einer XSL-Datei in mehrere XML-Dateien aufzuteilen.

    Das Laden der Dateien (XML, XSL) haut hin, aber der Befehl <xsl:result-document... kommt aus XSLT 2.0. Alle anderen Testskripte waren Version 1.0 und haben funktioniert.

    Und hier das Problem:

    Ich habe #include "msxml2.h" eingebunden. Ich nehme mal an, das hier die 2 nichts mit der Version von XSLT zu tun hat.

    Woher kann ich die Version 2.0 bekommen? Oder kann man das auch mit Version 1.0 hinbekommen?

    VC++ 2003, MFC.

  4. Hallo an alle!

    Ich bin dabei ein Programm zur Wandlung von XML mit XSL zu schreiben. Dabei habe ich mir das Beispiel aus der MSDN zum Testen kopiert.

    
    #include "msxml2.h"
    
    #import "msxml4.dll"
    
    using namespace MSXML2;
    
    
    IXMLDOMDocument2 *pStyleSheet=NULL;
    
    IXMLDOMDocument2 *pDOMObject=NULL;
    
    IXMLDOMDocument2 *pIXMLDOMDocument=NULL;
    
    IXSLTemplate *pIXSLTemplate=NULL;
    
    IXSLProcessor *pIXSLProcessor=NULL;
    
    
    ...
    
    

    Beim Erstellen erhalte ich für alle o.g. Elemente folgenden Fehler:

    XML_DOMDlg.cpp(209): error C2872: 'IXMLDOMDocument2': Mehrdeutiges Symbol

    Woran kann es liegen bzw. was kann ich tun?

    (Visual C++ 2003, MFC, dialogfeldbasierend)

  5. Oh-oh, war wohl wieder das Fettnäpfchen. :old

    Ich meine das [X] oben rechts, neben [Min] und [Max]. Rot ist der XP-Style.

    Ich mache sowas, jedenfalls habe ich das vor. Bei MessageBoxen geht das ja auch. Da muss man [OK] o.ä. drücken und nicht [X].

    Das Programm-Icon ist z.Bsp. siehe oben links das IExplorer-Icon. Wenn man die Dialogeigenschaft Systemmenü=FALSE wählt, dann wird zwar der Dialogtitel angezeigt aber das Icon nicht mehr.

    So, ich hoffe ich bin aus dem Napf raus. ;)

  6. Hallo an alle,

    wie kann ich in meinem Dialog das Schließ-Kreuz (oben rechts, das rote :rolleyes:) deaktivieren?

    Das Programm soll nur über einen Button beendet werden können.

    Ich habe zwar die Möglichkeit den Dialog ohne das SK anzeigen zu lassen, aber das sieht nicht gut aus, da auch kein Programm-Icon angezeigt wird und wer macht denn sowas.

  7. Selbst gelöst:

    Das oben beschriebene tritt bei CD-ROM-Laufwerken auf, da diese nur beschriebene CDs erwarten.

    In CD-RW-Laufwerken wird auch ein Medium zurückgegeben, wenn es ein Rohling ist.

    Um zu unterscheiden, ob es ein blanker Rohling ist, einfach versuchen Datenträgerinformationen auszulesen:

    
    ...
    
    if(!mciSendCommand(op.wDeviceID, MCI_SET, MCI_WAIT|MCI_SET_DOOR_CLOSED, (DWORD) NULL))
    
     {
    
      st.dwItem=MCI_STATUS_MEDIA_PRESENT;
    
    
      if(!mciSendCommand(op.wDeviceID, MCI_STATUS, MCI_WAIT|MCI_STATUS_ITEM, (DWORD_PTR) &st))
    
       {
    
         if(st.dwReturn)
    
          {
    
           char VolName[MAX_PATH]={0};
    
           DWORD SerNum=0;
    
           DWORD MaxCompLen=0;
    
           DWORD FSFlags=0;
    
           char FSName[MAX_PATH]={0};
    
           BOOL ret=0;
    
    
           ret=GetVolumeInformation(&LW, VolName, MAX_PATH, &SerNum, &MaxCompLen, &FSFlags, FSName, MAX_PATH);
    
    
           if(ret)
    
            {
    
             Result=BRENNER_CLOSE_CD;
    
            }//endif(ret) 
    
    
           else
    
            {
    
             Result=BRENNER_CLOSE_CD_BLANK;
    
            }//end else by return BRENNER_CLOSE_CD;                             
    
          }//end if(st.dwReturn)
    
    
         else
    
          {
    
           Result=BRENNER_CLOSE;
    
          }//end else by if(st.dwReturn)
    
        }//end if(!mciSendCommand(op.wDeviceID, MCI_STATUS, MCI_WAIT|MCI_STATUS_ITEM, (DWORD_PTR) &st))
    
    ...
    
    

  8. Genau das habe ich auch gedacht und leite die Ausgabe in eine Pipe um.

    Aber dort gibt es das Problem, dass der Prozess nach dem Fehler bei ReadFile() stoppt und auf die Rückkehr der Funktion wartet.

    Wie hoch ist der Timeout von ReadFile?

    So könnte man nachsehen, was als letztes in der Ausgabe steht und den Prozess mit einem entsprechenden Exitcode terminieren. ("I'll be back!" :cool: )

  9. Hallo an alle!

    Ist es ein Problem einen Prozess aus einem Thread heraus zu starten?

    Bevor und nachdem der Prozess gestartet wurde, sind noch andere Aufgaben notwendig, die einen Thread erfordern, um die Dialoganzeige aktuell zu halten.

    Insgesammt werden in dem Thread bis zu fünf Prozesse gestartet, die einen Konsolen-Prozess anschieben.

    Es ist nur notwendig, das Ende der Prozesse abzuwarten.

    Ab und zu tritt der Fehler auf, dass das Konsolen-Programm beendet ist, aber das DOS-Fenster nicht geschlossen wird.

  10. Also:

    ftp=sess.GetFtpConnection(_T("ftp.microsoft.com"));

    Hier muss es in unserem Fall mit einem Linux-Proxy-Server heißen:

    
    ftp=sess.GetFtpConnection("[Linux-Server]", "[FTP-Nutzername]@[FTP-Server]", "[PWD]", 21, TRUE);
    
    

    Und mit ftp->GetFile(RemoteFile, DestinationFile) wird auch eine Datei kopiert.

  11. Hallo an alle,

    folgendes Beispiel kommt aus der MSDN:

    
      CInternetSession sess(_T("Test/1.0"));
    
      CFtpConnection *ftp=NULL;
    
    
      ftp=sess.GetFtpConnection(_T("ftp.microsoft.com"));  
    
    
      if(ftp)
    
       ftp->Close();
    
    

    Folgende Fehlermeldung kommt vom Programm:

    Der Servername oder die Serveradresse konnte nicht verarbeitet werden.

    Wenn ich die Adresse in den IE eingebe, klappt es. Warum nicht im Programm?

    Am Ende soll eine FTP-Verbindung in ein Verzeichnis, mit Benutzername und Kennwort hergestellt werden, um dort liegende Dateien herunterzuladen.

    Die Internetverbindung wird über einen Proxy-Server mit Port hergestellt.

  12. Hallo an Alle.

    Um an mehrere meiner Dialgfeld-Kontroll-Variablen (CListCtrl) in einem Thread heranzukommen, habe ich den this-Zeiger meines Dialoges übergeben (s.o.) und in der Thread-Funktion denn Zeiger interpretiert:

    
    static UINT Func(LPVOID lParam)
    
     {
    
       C[Programm]Dlg* hb=reinterpret_cast<C[Programm]Dlg*> (lParam);
    
     }
    
    

    Über hb-> komme ich an alle Variablen ran, der Thread läuft (füllt ein ListBox-Element) aber wenn ich das Programm beende kommt die Fehlermeldung:

    Run-Time Check Failure #2 - Stack around the variable 'dlg' was corrupted.

    dlg ist die Variable aus der [App].cpp, wo das Programm initialisiert wird und das OnClose() oder OnOK() verarbeitet werden.

    Wenn das so nicht geht, wie kann ich einem Thread mehrere Variablen übergeben?

  13. Kleine Korrektur zu:

    Wenn ich eine leere CD zum Brennen einlege, dann hängt sich das Programm nach dem Schließen des LWs (mciSendCommand(op.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0) auf.

    Es muss heissen:

    mciSendCommand(op.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);

    So.

    Ich habe nichts gefunden, womit ich das Problem beheben kann.

    Habt Ihr irgend eine Idee?

  14. Hallo an alle,

    ich wage mich an Semaphoren ran. Ich möchte den Zugriff auf einen externen Prozess auf drei begrenzen. Ist nachfolgendes soweit richtig?

    1. Initialisierung:

    HANDLE semProzess=CreateSemaphore(NULL, 0, 3, "ProzessName");

    2. Zum besitzen oder bei erreichen von 3 warten:

    WaitForSingleObject(semProzess, INFINITE);

    3. Freigeben, hier weiss ich nicht so recht:

    ReleaseSemaphore(semProzess, ?, ?);

    4. Schliessen:

    CloseHandle(semProzess);

    IDE:WinXP Pro SP2, VS 2003.NET, C++, MFC, Dialog.

  15. Und jetzt ist es soweit.

    Ich soll mein Programm griechisch "sprechen" lassen.

    Zur Zeit habe ich deutsch und englisch, was ja kein Problem ist.

    Dazu habe ich eine String-Table, in der ich alle Texte drin habe und für die englische Anzeige einfach zu der ID 200 dazuzähle.

    
    CString Text;
    
    
    Text.LoadString(ID_Text_Deutsch+200); //Text ist englisch
    
    

    Alle Texte wurden ins Griechische übersetzt. Jetzt wollte ich mir die Sache einfach machen und aus der Excel-Tabelle die griechischen Texte rauskopieren und in die String-Table einfügen.

    Tja.

    Nur kommen da statt der Schriftzeichen nur "?????". Wenn ich den selben String in den Editor kopiere, klappt es wunderbar und in Excel offensichtlich auch.

    Ich habe in der Systemsteuerung bei Sprachen/Eingabeschema griechisch hinzugefügt. Ein extra Sprachpaket für das Visual Studio war nicht dabei.

    Wo kann ich denn meinem Projekt beibringen, dass er mir diese Zeichen korrekt darstellt?

  16. Hallo an alle,

    mit dem oben genannten Code zum Öffnen und Schließen von CD-Laufwerken habe ich ein großes Problem:

    Ich habe über ein Firewire-Kabel fünf CD/DVD-LWs angeschlossen, die untereinander wieder mit Firewire zusammengeschlossen sind.

    Wenn ich eine leere CD zum Brennen einlege, dann hängt sich das Programm nach dem Schließen des LWs (mciSendCommand(op.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0) auf.

    Bei einer beschriebenen oder keiner CD läuft alles.

    Im Ereignisprotokoll steht dann:

    Quelle: sbp2port; Ereignis: 9; Das Gerät hat innerhalb der Fehlerwartezeit nicht geantwortet.

    Ich habe mich auch schon umgehört und ein Windows XP Hotfix installiert (KB885222). Die Firmware der LWs ist die aktuellste.

    Hat auch nichts geholfen.

    Hat jemand einen Tipp?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...