Zum Inhalt springen

Narf!

Mitglieder
  • Gesamte Inhalte

    480
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte 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. Hat sich erledigt. #import "msxml4.dll" using namespace MSXML2; Ist weggefallen.
  5. 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: Woran kann es liegen bzw. was kann ich tun? (Visual C++ 2003, MFC, dialogfeldbasierend)
  6. Vielen Dank. Falls der Link mal nicht zu erreichen ist: OnInitDialog: CMenu* mnu = this->GetSystemMenu(FALSE); mnu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
  7. 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.
  8. Hallo an alle, wie kann ich in meinem Dialog das Schließ-Kreuz (oben rechts, das rote ) 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.
  9. 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)) ...
  10. Ich muss noch mal nachlegen: Wie kriege ich mit, ob eine leere CD eingelegt ist? Mit MCI_STATUS_MEDIA_PRESENT kriege ich ja bloß mit, ob eine beschriebene CD drin ist oder nicht. Bei einer leeren CD liefert es mir die selben Resultate wie bei einem leeren Laufwerk.
  11. 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: )
  12. Mit Thread meinte ich einen weiteren Thread. Das externe Programm bringt den Fehler (R6025: pure virtual function call). Kann ich irgendwie den Zustand des externen Prozesses/Threads abfragen?
  13. 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.
  14. Also: 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.
  15. 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: 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.
  16. DAS GANZE HALT! Ich habe das Projekt neu erstellt und nun geht es.
  17. Ich habe keine Arrays oder Zeiger (außer zum Dialog) in meiner Thread-Funktion. Den Dialog kann ich nicht mit EndModalLoop() schließen, da es sich um den Hauptdialog handelt.
  18. 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: 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?
  19. Kleine Korrektur zu: 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?
  20. Zu 3. habe ich folgendes: ReleaseSemaphore(semProzess, 1, NULL); Die 1 bedeutet, dass der Zähler um 1 runtergezählt wird.
  21. 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.
  22. Vielen Dank. Werde mich da mal reinknien.
  23. Da das ganze neu für mich ist, kannst Du mir sagen, was ich da zu tun habe? Das geht schon los mit der Erstellung einer DLL, dann die Einbindung in mein Programm, was da zu beachten ist uvm.
  24. 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?
  25. 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...