Alle Beiträge von Klotzkopp
-
Mailbombardement mit Worm.BugBear.A
Wie sehen denn die Header aus?
-
MDI - Steuerelement auf Dokument
Mit dem Ressourceneditor kannst Du nur arbeiten, wenn Deine View-Klasse von CFormView abgeleitet ist, denn nur diese Klasse kann man mit Dialogressourcen verknüpfen. Allerdings ist der Hintergrund dann grau, nicht mehr weiß. Ansonsten musst Du die Steuerelemente von Hand erzeugen, mittels CreateWindow.
-
Laufwerke und ihre Buchstaben
Bitte, sag uns doch, wie die Fehlermeldungen lauten. Dann können wir Dir weiterhelfen.
-
Laufwerke und ihre Buchstaben
Bei codeguru gibt es ein Beispielprojekt, in dem das gemacht wird. Da wird auch gezeigt, wie man mitbekommt, dass eine CD eingelegt oder entfernt wurde. Dürfte also genau das Richtige sein . http://codeguru.earthweb.com/misc/CdChange.shtml Warum nicht? Was funktioniert nicht? Eine Fehlerbeschreibung wäre recht hilfreich...
-
CFindReplaceDialog
Den Text, in dem gesucht und ersetzt werden soll, musst Du woanders vorhalten, darum kümmert sich der Dialog nicht. Die übliche Anwendung sieht so aus, dass Du eine Document/View-Struktur hast, wobei die Dokumentklasse den Inhalt (=Text) in irgendeiner Form vorhält. Das kann eine CString-Membervariable sein, aber auch ein RTF-Steuerelement oder was ganz anderes. Es muss ja nicht mal Text sein. Daher kann sich CFindReplaceDialog auch nicht darum kümmern, dass der Inhalt übermittelt wird. Nur Du kannst wissen, wie auf Find/Replace-Nachrichten reagiert werden soll. Wenn Du also innerhalb von Projekt::OnErsetzen den Text verändern willst, dann muss der CString ein Member von Projekt sein. Ich würde in OnErsetzen so vorgehen: [*]Falls der Benutzer ersetzen will, und die aktuelle Markierung dem Suchstring entspricht, diese Stelle ersetzen. [*]Von der Markierung ausgehend das nächste Auftreten des Suchstrings finden (abhängig von der vorgegebenen Suchrichtung). [*]Falls das Ende (bzw. der Anfang) des Textes errreicht wurde, ohne dass der Suchstring gefunden wurde, Meldung ausgeben. [*]Ansonsten die Fundstelle markieren. [/list=1] Das deckt jetzt noch nicht FR_REPLACEALL, FR_MATCHCASE und FR_WHOLEWORD ab.
-
Verzeichnis erstellen und freigeben
Was meinst Du mit "kann ich nicht sehen"? Hast Du eine Liste der Benutzer, oder musst Du die erst noch holen? MSDN Library, unter Security->Authorization. Da hab ich auch alles her, was ich Dir bisher erzählt habe .
-
CFindReplaceDialog
CFindReplaceDialog wird verwendet, damit der Benutzer festlegt, was durch was ersetzt werden soll. Du kannst zwar Vorgaben machen, an die muss sich der Benutzer aber nicht halten. CFindReplaceDialog selbst sucht und ersetzt gar nichts, sondern lässt Dich über die Nachrichten wissen, was der Benutzer gerne hätte. Auf diese Nachrichten musst Du dann reagieren, d.h. den Code für das Suchen und Ersetzen musst Du selbst schreiben. Wenn es Dir nur darum geht: Hier reicht auch Text.Replace( "C++", "Java" );
-
Frage zu CListCtrl: Sortierung?
Um überhaupt etwas davon mitzubekommen, wenn der Benutzer auf die Spaltenüberschriften klickt, brauchst Du eine Nachrichtenbehandlungsfunktion für LVN_COLUMNCLICK für Dein List Control. In pNMListView->iSubItem steht der Index der Spalte, die angeklickt wurde. Mit CListCtrl::SortItems kannst Du sortieren. Der erste Parameter gibt dabei eine Callback-Funktion an, die dann mehrfach aufgerufen wird, um jeweils zwei Einträge miteinander zu vergleichen. Über den Rückgabewert dieser Funktion (-1, 0 oder 1) legst Du die Reihenfolge fest. In diesem Thread findest Du ein Beispiel für eine solche Sortierfunktion. Beachte aber, dass die Parameter, mit denen die Funktion aufgerufen wird, nicht die Indices der zu vergleichenden Einträge sind, sondern die Werte, die den Einträgen über SetItemData zugewiesen wurden.
-
CTreeCtrl Higlight ohne Focus
TVS_SHOWSELALWAYS
-
CFindReplaceDialog
Der vierte Parameter sind Flags. FR_DOWN bedeutet, dass "Abwärts" als Suchrichtung vorgegeben ist. Die möglichen Flags sind hier erklärt: http://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/CommonDialogBoxReference/CommonDialogBoxStructures/FINDREPLACE.asp Der fünfte Parameter bezeichnet das Fenster, dass die FINDMSGSTRING-Nachrichten erhalten soll, die der Suchdialog generiert. Wenn man hier NULL angibt, bekommt das Hauptfenster der Applikation die Nachrichten.
-
Aufteilen von Dateien
Doppelposting --> Thema geschlossen.
-
Zeichen im Textfeld Kontrollieren MS VC++
Die "schöne" Methode wäre, eine Klasse von CEdit abzuleiten, darin WM_CHAR zu behandeln, und nur dann CEdit::OnChar aufzurufen, wenn es sich um ein gültiges Zeichen handelt. Es geht aber auch einfacher. Überschreibe die Methode PreTranslateMessage Deines Dialogs mit Hilfe des Klassenassistenten. Darin kannst Du Tasten-Nachrichten an das Eingabefeld abfangen: #define ALLOWED_CHARS "01\x8" BOOL CDeinDlg::PreTranslateMessage(MSG* pMsg) { if( pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP ) { if( pMsg->hwnd == GetDlgItem( IDC_DEIN_EDIT )->m_hWnd ) { if( NULL == strchr( ALLOWED_CHARS, pMsg->wParam ) ) { return TRUE; } } } return CDialog::PreTranslateMessage(pMsg); }[/CODE] Im Klartext: Wenn es sich um eine Tasten-Nachricht handelt, die an Dein Eingabefeld geht, und bei der das Zeichen nicht in ALLOWED_CHARS enthalten ist, dann wird die Nachricht einfach verworfen. Das \x8 in ALLOWED_CHARS ist übrigens die Rückschritt-Taste.
-
Verzeichnis erstellen und freigeben
#include <windows.h> Wenn das nicht hilft, nenn uns doch bitte die Fehlermeldungen.
-
CColorDialog
SetCurrentColor kannst Du nur dann sinnvoll einsetzen, wenn Du eine Klasse von CColorDialog ableitest. Wenn Du in dieser Klasse dann Nachrichtenbehandlungsfunktionen einbaust oder OnColorOK überschreibst, um vor dem Beenden des Dialogs zusätzliche Prüfungen durchzuführen (z.B. um die Auswahl einer zu dunklen Farbe zu unterbinden), kannst Du damit die Auswahl auf eine andere Farbe setzen. Innerhalb der Klasse/Funktion, die DoModal aufruft, kannst Du SetCurrentColor definitiv nicht verwenden.
-
CColorDialog
Der relevante Code ist der hier: COLORREF startfarbe= RGB( 255, 0, 0 ); CColorDialog dlg( startfarbe); if( IDOK == dlg.DoModal() ) { COLORREF auswahlfarbe = dlg.GetColor(); // jetzt ist die gewählte Farbe in auswahlfarbe }[/CODE]
-
CColorDialog
Wo ist denn das Problem? Das Beispiel war doch in Ordnung. Dialogobjekt mit Startfarbe erzeugen, DoModal aufrufen, mit GetColor die Farbe rausholen. Viel mehr gibt die Klasse wirklich nicht her. Lass Dich von dem SDI-Zeug nicht abschrecken, das ist nur drumherum.
-
Zugriff auf DFÜNetzwerk aus C++
Hier ist ein Beispielprojekt für ein Tool, mit dem solche Verbindungen eingerichtet werden können. Vielleicht hilft's Dir weiter. Nachtrag: Eine der Schlüsselfunktionen scheint RasSetEntryProperties zu sein
-
CString Array
Genau so. Alles, was mit LPCSTR bzw. const char* funktioniert, geht auch mit CString. Diese Klasse hat einen überladenen Cast-Operator für eben diesen Typ, der sich darum kümmert. Da strstr zwei Argumente dieses Typs verlangt, kannst Du für eines oder beide Argumente einen CString angeben. Aber wie 007ski bereits sagte, die Klasse bringt auch eigene Suchfunktionen mit. Gegenbeispiel: Das erste Argument von strcat ist nicht const (weil dieser String durch die Funktion verändert wird). Da kannst Du nicht einfach einen CString einsetzen.
-
CD-ROM-Kontrolle
Einige dieser Fragen hattest Du hier schon mal gestellt, und auch schon ein paar Tipps erhalten. Ich hatte Dich gebeten, dort nochmal klarzustellen, wo noch Probleme sind, damit die Lösungen konzentriert werden. Es bringt gar nichts, wenn Du auf Tipps kein Feedback bringst, sondern nur die Fragen wiederholst. --> Thema geschlossen, hier geht's weiter.
-
Tree-Level öffnen/schließen
Wie ich schon sagte, schreib bitte in dem Thread, in dem Du die Fragen ursprünglich gestellt hattest, was die konkreten Probleme sind. Wenn ein anderer Benutzer mal ein ähnliches Problem hat, soll er sich die Antworten nicht über mehrere Threads verteilt zusammensuchen müssen.
-
WinXP und CoInitialize
War der Aufruf der Funktion möglicherweise im zweiten Thread? Du musst CoInitialize für jeden Thread einzeln aufrufen. Das würde aber auch nicht erklären, warum es unter Windows 98 funktioniert hat...
-
WinXP und CoInitialize
Ist der Rückgabewert von CoInitialize in Ordnung? Verwendest Du Multithreading? Was für eine Funktion ist es, die den Fehler liefert? API oder selbstgeschrieben?
- net use
-
Toolbar
Den ganzen Kram mit CreateEx und LoadToolBar musst Du nur einmal machen. Danach reicht zum Anzeigen und Ausblenden einfach cToolBar.ShowWindow(SW_SHOW); bzw. cToolBar.ShowWindow(SW_HIDE);
-
Tree-Level öffnen/schließen
Du kannst mit CTreeCtrl::GetItemState testen, ob ein bestimmtes Element geöffnet bzw. geschlossen ist: if( m_deinTreeCtrl.GetItemState(hItem, TVIS_EXPANDED ) == TVIS_EXPANDED ) { // aufgeklappt } else { // nicht aufgeklappt } hItem ist hier das HTREEITEM des Elements, dessen Status Du prüfen willst. Ja, auch wenn sich mir der Sinn nicht ganz erschließt. In dem TNV_SELCHANGING-Handler kannst Du über pNMTreeView->itemOld.hItem an das HTREEITEM des Elements kommen, das jetzt nicht mehr selektiert ist: HTREEITEM hOld = pNMTreeView->itemOld.hItem; if( hOld ) { if( !m_deinTreeCtrl.GetNextSiblingItem( hOld ) ) { // es war das letzte HTREEITEM hParent = m_deinTreeCtrl.GetParentItem( hOld ); if( hParent ) { m_deinTreeCtrl.Expand( hParent, TVE_COLLAPSE ); } } }[/CODE] Dafür solltest Du einen Handler für TVN_ITEMEXPANDED einrichten. Das geht analog zu TVN_SELCHANGING. Da drin kannst Du dann prüfen, wie oft Du GetParentItem aufrufen kannst: [CODE]if( (pNMTreeView->action & TVE_EXPAND) == TVE_EXPAND ) { // aufgeklappt } else { // zugeklappt } int level = 0; HTREEITEM hParent = m_deinTreeCtrl.GetParentItem( pNMTreeView->itemNew.hItem ); while( hParent ) { level++; hParent = m_deinTreeCtrl.GetParentItem( hParent ); } Dann solltest Du in dem entsprechenden Thread schreiben, wo genau Probleme auftauchen.