Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. MoveNext und MoveLast zeigen gar nichts an. Aber sie füllen die an die Datenbankfelder gebundenen Variablen mit Werten, darunter auch dein DATE. Die Frage ist jetzt, ob der Wert überhaupt geändert wird, wenn in diesem Feld ein NULL-Wert steht, oder ob der Wert so gelassen wird, wie er ist. Deshalb solltest Du die DATE-Variable mit einem Wert vorbelegen. Wenn der Wert hinterher immer noch gleich ist, dann bewirkt ein NULL-Wert keine Änderung. Das könnte man als Erkennungsmerkmal heranziehen.
  2. Das ist der Wert, mit dem bei einem Debug-Build uninitialisierter Freispeicher gefüllt wird. Darauf kann man sich also nicht verlassen. Wie sieht es aus, wenn Du vor dem MoveNext dem DATE den Wert -1.0 zuweist? Was für ein Wert steht dann nach dem MoveNext drin, wenn in der Datenbank NULL stand?
  3. Du solltest einen NULL-Wert möglichst vor irgendwelchen Konvertierungen abfangen. Wenn ich mich richtig erinnere, hast Du doch ein DATE, dass Du in den COleDateTime konvertierst. Was steht denn in dem DATE, wenn in der Datenbank NULL steht?
  4. Bitte beschreibe dein Problem genauer. Ratespiele gehören in den Daily Talk.
  5. Hast du denn die Quellcodedatei, in der der Konstruktor von Anchor definiert ist, mit kompiliert und gelinkt?
  6. Klasse* zeigervariable = new Klasse;
  7. Jo, m_pCtrlSite darf NULL sein, das ist kein Problem. Kommt die Exception schon beim Aufruf von SetWindowText, oder irgendwo im MFC-Code?
  8. Das reicht nicht. Du musst schon mit new eine neue Instanz der Klasse erzeugen.
  9. Das sind aber zwei Schritte: 1. Dereferenzierung von t, dabei wird ein temporäres Objekt erzeugt 2. Umwandlung des temporären Objekts in char Der Compiler scheitert am ersten Schritt, weil der Datentyp des temporären Objekts void wäre. Und genau wie Du keine void-Variable anlegen kannst, muss auch der Compiler hier die Flügel strecken. Wenn Du die Reihenfolge änderst: 1. Umwandlung von t in char*, auch dabei entsteht ein temporäres Objekt 2. Dereferenzierung des temporären Objekts dann geht alles klar.
  10. itemanzahl - 1 Die Indices gehen von Null bis Anzahl - 1.
  11. Der erste Parameter von SetItemState ist der Index des Items. Die anderen beiden regeln, was mit dem Item passiert. Der zweite ist der Wert, der dritte eine Bitmaske. Wenn Du also ein Item selektieren willst, schreibst Du: m_ctrl.SetItemState( nItem, LVIS_SELECTED, LVIS_SELECTED ); Wenn Du die Selektion eines Items entfernen willst: m_ctrl.SetItemState( nItem, 0, LVIS_SELECTED );
  12. So könnte man es nennen. Man kann jeden Zeiger implizit in einen void* konvertieren. Aber dereferenzieren kannst Du einen void* nicht. Was soll dabei auch rauskommen? Das hier geht: char z = *((char*)t);
  13. Was für ein Objekt ist m_SNRAlias? Kannst Du in SetWindowText reinsteppen?
  14. <Gebetsmühle> Was Du machst, ist ein Zeigervergleich. char-Strings vergleicht man mit strcmp. Achtung, strcmp gibt bei Übereinstimmung Null zurück. </Gebetsmühle>
  15. FighterFigger hat Recht, es muss lauten: m_Grid.SetItemState( m_Grid.GetNextSelectedItem(pos), 0, LVIS_SELECTED );
  16. __declspec(nothrow) ist ein Hinweis für den Compiler, dass diese Methode keine Exceptions wirft. Dadurch kann er sich einiges an Code sparen, der sonst für die Überwachung der Lebenszeit bestimmter Objekte benötigt würde. Exceptions unterdrücken kannst Du damit nicht. Bezüglich throw() in der Deklaration: Note Microsoft C++ does not support exception-specifications, as described in section 15.4 of the ANSI C++ draft. In addition, it does not support function-try-block described in section 15 of the ANSI C++ draft. Quelle: MSDN Library Oktober 2001. Was spricht dagegen, den ganzen Code der Funktion in einen try-catch-Block einzupacken?
  17. Bevor Du die neue Selektion auf den ersten Eintrag setzt, musst Du zuerst die alte Selektion entfernen: POSITION pos = m_Grid.GetFirstSelectedItemPosition(); if( pos ) { m_Grid.SetItemState( m_Grid.GetNextSelectedItem(pos), LVIS_SELECTED, 0 ); }[/CODE] UpdateData bewirkt nur bei Wert/Value-Variablen den Datenaustasch zwischen Variable und Steuerelement. Bei Steuerelement/Control-Variablen wie CListCtrl macht UpdateData gar nichts. Den gelöschten Datensatz musst Du von Hand mit CListCtrl::DeleteItem aus dem List Control enfernen.
  18. Da Du von Lichtern redest, nehme ich mal an, Du hast einen Hardware-Router. Dann wäre es gut, wenn Du auch sagst, von welchem Hersteller der Router ist und um welches Modell es sich handelt.
  19. Genau so. Du fängst mit GetRootItem an und hangelst Dich mit GetNextSiblingItem und GetChildItem durch den Baum.
  20. An den Benutzernamen kommst Du mit GetUserName, unter Windows 2000 und Windows XP auch mit GetUserNameEx, das unterschiedliche Formatierungen bietet. Für GetUserName brauchst Du Advapi32.lib, für GetUserNameEx Secur32.lib. Was das Auslesen des Passworts angeht, verweise ich auf die Boardregeln.
  21. Der Dateiname muss keinen Punkt enthalten. Es macht auch keinen Sinn, nach einem Punkt zu suchen, außer Du willst die Dateierweiterung abtrennen. Außerdem können die Elemente des Pfades auch durch Slashs voneinander getrennt sein. Also: Einfach nach dem letzten Slash oder Backslash suchen, und dahinter trennen.
  22. Welche Fehlernummer ist das?
  23. Hat das List Control den Fokus oder den Style LVS_SHOWSELALWAYS? Wenn beides nicht der Fall ist, kannst Du die Selektion gar nicht sehen.
  24. Mit LoadBitmap habe ich es irgendwie auch nicht hinbekommen. Aber mit LoadImage geht es: hBitmap = (HBITMAP) ::LoadImage( 0, "c:\\test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
  25. Ein Slider-Steuerelement senden Scroll-Nachrichten an sein Parent. Wenn es ein horizontaler Slider ist, sendet er WM_HSCROLL, ein vertikaler sendet WM_VSCROLL. Du musst also dem Parent-Fenster des Sliders - üblicherweise ein Dialog oder ein FormView - eine Nachrichtenbehandlungsfunktion für WM_HSCROLL bzw. WM_VSCROLL hinzufügen. Der dritte Parameter dieser Funktion erhält einen Zeiger auf das Steuerelement, leider in Form eines CScrollBar*, auch wenn die Nachricht von einem Slider kommt. Daher muss man den Zeiger casten, um zu prüfen, ob die Nachricht vom Slider stammt: [color=blue]void[/color] [color=blue]CDeinDlg[/color]::[color=darkred]OnHScroll[/color]([color=blue]UINT[/color] [color=darkblue]nSBCode[/color], [color=blue]UINT[/color] [color=darkblue]nPos[/color], [color=blue]CScrollBar[/color]* [color=darkblue]pScrollBar[/color]) { [color=blue]CSliderCtrl[/color]* [color=darkblue]pSlider[/color] = [color=blue]static_cast[/color]<[color=blue]CSliderCtrl[/color]*>( [color=darkred]GetDlgItem[/color]( [color=purple]IDC_DEIN_SLIDER[/color] ) ); [color=blue]if[/color]( [color=darkblue]pScrollBar[/color] == [color=blue]reinterpret_cast[/color]<[color=blue]CScrollBar[/color]*>( [color=darkblue]pSlider[/color] ) ) { [color=blue]int[/color] [color=darkblue]nRealPos[/color] = [color=darkblue]pSlider[/color]->[color=darkred]GetPos[/color](); [color=blue]CString[/color] [color=darkblue]strPos[/color]; [color=darkblue]strPos[/color].[color=darkred]Format[/color]( "%d", [color=darkblue]nRealPos[/color] ); [color=darkred]SetDlgItemText[/color]( [color=purple]IDC_COLOR_STATIC[/color], [color=darkblue]strPos[/color] ); } [color=blue]CDialog[/color]::[color=darkred]OnHScroll[/color]([color=darkblue]nSBCode[/color], [color=darkblue]nPos[/color], [color=darkblue]pScrollBar[/color]); }[/CODE]Wenn Du bereits eine Steuerelementvariable für den Slider hast, kannst Du Dir natürlich den Kram mit GetDlgItem sparen.

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...