Zum Inhalt springen

vinc

Mitglieder
  • Gesamte Inhalte

    33
  • Benutzer seit

  • Letzter Besuch

  1. hi! ich versuche für eine toolbar eine kontext-sensitive hilfe zu realisieren. dazu möchte ich die htmlhelp-api mit dem kommando HH_TP_HELP_WM_HELP verwenden: HtmlHelp(hwndToolbar, szHelpDir, HH_TP_HELP_WM_HELP, (DWORD)(LPVOID)&ids) ; mit "ids": DWORD ids[] = { uiCmdID[0], 501, uiCmdID[1], 502, uiCmdID[2], 503, 0, 0 }; uiCmdID[] sind die toolbar button IDs und 501... sind die topic IDs. ich erhalte diese fehlermeldung: "no help ID matches control ID #3000". dabei ist meine hilfe datei in ordnung, denn ich habe sie mit einem dialog mit normalen buttons getestet, wobei die funktion, wie oben beschrieben funktioniert. weiß jemand was hier falsch läuft? danke!
  2. teste in deiner do-while-schleife auf NULL nicht auf ungleich NULL!!! das sollte zumindest für dein erstes problem helfen
  3. die klasse CRecordset (das ist die, die der anwendungsassistent erzeugt) bietet nur sehr eingeschränkte odbc-funktionen. tabellen und spalten müssen bereits existieren und man kann nur noch die einträge (records) bearbeiten, d.h. erzeugen, ansehen, löschen. um tabellen und spalten anlegen zu können, muss man die klasse CDatabase verwenden. dafür gibt es, glaube ich, keinen assistenten. das geht nur von hand. an dieser stelle mal wieder ein verweis auf die msdn, stichwort "CDatabase".
  4. für cin gibt es die methode ignore (), d.h. nach cin >> p; ein cin.ignore (); dadurch wird das return, das mit cin >> p; nicht aus dem puffer entfernt wurde, eliminiert. ansonsten wird das return sofort in der zweiten funktion verwendet und somit ist eine eingabe nicht mehr möglich. :eek:
  5. hm, der vergleich an sich ist schon ok, führt nur nicht zum gewünschten ziel :OD die zuweisung zu beginn ist allerdings etwas.. naja; also wenn schon dann anzahl 4 wegen der abschließenden 0! mein vorschlag: char Fehler_code[] = "\t1\t"; if(strcmp (Zeichen, Fehler_code) != 0) { Fehler++; } wobei Zeichen ein char-array sein muss. und das sollte dann klappen :cool:
  6. tja, da müßte man jetzt erstmal wissen, welchen datentyp a und b haben. wirklich schlau werde ich aus diesen zeilen eigentlich nicht. sind a und/oder b attribute der klasse? ansonsten folgende möglichkeiten: a + b attribute d. klasse: Set_Data_2(void) a attr. d. kl.: Set_Data_2(datentyp b attr. d. kl.: Set_Data_2(void), in der implementierung: return a; a + b nicht attr. d. kl.: Set_Data_2(datentyp a, datentyp , in der implementierung: return a; :confused:
  7. wahrscheinlich ist das einfachste, eine datei mit dem zurückzugebenden wert zu erzeugen, die dann von einem anderen programm ausgewertet wird. ist zwar nicht doll, aber funktioniert :WD
  8. ich glaube nicht das "system ()" funktioniert. schließlichlich ist rückgabeparameter vom typ "int" und wie quetscht man da "hallo" rein??? wie sieht dein "return ()" denn aus?
  9. vinc

    Ask_Id

    ich denke "main (int argc, char *argv[])" wird dir hier nicht helfen. das problem ist, dass programme mit grafischer oberfläche, wie sie bei borland builder oder bei ms visual studio erzeugt werden nicht mit "main ()" arbeiten, sondern z.b. mit "WinMain (...)". ich weiß das jetzt nicht genau, aber entweder kommt man über die "WinMain (...)" an die kommandozeilenparameter oder es gibt dazu eine funktion wie "GetCommandLine". schau dazu am besten mal in die builder-hilfe, da sollte sowas eigentlich drin stehen. zu main (int argc, char *argv[])": argc enthält die anzahl der übergebenen parameter + 1 für den programmnamen; in dem array argv befinden sich zeiger auf die eigentlilchen parameter. dazu sollte eigentlich in jedem halbwegs ordentlichem lehrbuch oder tutorial zu c/c++ eine erklärung existieren! die ini-datei einfach als ascii-datei einlesen und dann auswerten :bimei
  10. und schon wieder ich :OD die funktion ProcessMessageFilter () aus o.g. kb-howto nachfolgend ändern dann dürtfe es gehen: if (lpMsg->message == WM_KEYDOWN) { TRACE("Got WM_KEYDOWN\n"); switch (lpMsg -> wParam) { case VK_F2: AfxMessageBox("F2 taste gedrueckt"); break; case VK_F3: AfxMessageBox("F3 taste gedrueckt"); break; default: break; } }
  11. schau dir mal in der kb den folgenden Artikel an: HOWTO: How to Trap WM_KEYDOWN Messages in a CDialog (Q117563) da steht im wesentlichen drin, dass die "normale" tastaturabfrage nicht funktioniert und eine methode wie es doch geht. hab das mal so ausprobiert und man bekommt zumindest die rückmeldung, dass eine taste gedrückt wurde (TRACE...) ich habe allerdings noch nicht herausgefunden wie der zugehörige tasen-code ermittelt werden kann. onkeydown funktioniert nach dieser operation nämlich immer noch nicht (wahrscheinlich wird es das nie). Vielleicht weiß ja jemand wie es auf dieser grundlage weiter geht :marine
  12. schade jetzt wollte ich gerade einen link rausschicken :OD du siehst doch am rückgabewert von connect (), ob selbiger mit dem socket funktioniert hat (>=0) und folglich mit welchem socket als erstes ein connect geklappt hat. nun, wie auch immer. ich hab mal ein bisserl was zusammen geschustert, was dir hoffentlich hilft: .... const int nPortCounter = 5; struct fd_set writefds; struct timeval timeout; int selectres; /* Socket */ for (i = 0; i < nPortCounter; i++) { if ((nSocket = socket (AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0) { printf ("Socket error!\n"); return -1; } } /* Connect */ for (i = 0; i < nPortCounter; i++) { if (connect (nSocket, (struct sockaddr*)&sin, sizeof (sin)) < 0) { printf ("Connect error!\n"); printf ("%d\n", WSAGetLastError ()); return -1; } } /* Select */ FD_ZERO (&writefds); for (i = 0; i < nPortCounter; i++) { FD_SET (nSocket, &writefds); } timeout.tv_sec = 2; timeout.tv_usec = 0; if ((selectres = select (0, NULL, &writefds, NULL, &timeout)) < 0) { printf ("Select error!\n"); return -1; } if (selectres == 0) { printf ("Select timeout!\n"); return -1; } else { printf ("anzahl schreibfähiger sockets: %d\n", selectres); for (j = 0; j < nPortCounter; j++) { if (FD_ISSET (nSocket[j], &writefds)) { printf ("%d ok\n", nSocket[j]); } } } .... jetzt hat man 5 sockets, die im struct writefds eingetragen sind und mit denen jeweils ein connect () stattgefunden hat. soweit, sogut. das ist noch nicht richtig spannend . interessant wird es, wenn du die schleife um connect () abänderst z.b. nach: for (i = 2 ; i < nPortCounter; i++) {... jetzt sind nur noch 3 der 5 sockets connected. der select-aufruf prüft nun, ob die im struct angegebenen sockets schreibfähig/verbunden sind. wenn ein socket das nicht ist, wird dieser aus dem struct entfernt. der "verbliebene" struct ist praktisch das ergebnis von select (). hier wären die sockets mit dem index 0 und 1 nicht verbunden, also fliegen sie aus dem struct. das wars. hoffe das war hilfreich gruß vinc :marine
  13. vinc

    Ausgabeformatierung

    tja, hab da auch noch was vergessen double dZahl = 2.236; cout << setiosflags (ios::fixed) << setprecision (2) << dZahl << endl;
  14. vinc

    Ausgabeformatierung

    und #include <iomanip> nicht vergessen! :bimei
  15. vinc

    Ausgabeformatierung

    double dZahl = 2.236; cout << setprecision (2) << dZahl << endl;

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