Board00 Geschrieben 8. Mai 2007 Geschrieben 8. Mai 2007 HAllo, ich habe mal wieder ein problem. Ich habe eine Toolbar (siehe Bild) die einzelnen elemte sind dafür in einem Bitmap gespeichert das Bitmap schaut so aus (sihe Bild) Die einzlnen Elemente werden aus dem bitmap gelesen denn aller 15*16 Pixel entspricht ein symbol. diese werden in einer header datei geladen // Die Elemente für die Toolbar TBBUTTON tbButton[] = { //{0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {16, ID_FILE_NEWtb, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, ID_FILE_MAKRO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, //{4, ID_FILE_SAVE_AS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, //{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {3, ID_EDIT_CLEAR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {12, ID_HARDCOPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {7, ID_STRUKTURIERTER_TEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {9, ID_EINGANG_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {10, ID_EINGANG_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {14, ID_ZOOM_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {15, ID_ZOOM_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {11, ID_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, //{13, ID_INFO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0} }; Die anfangs zahlen entpricht den Symbol auf den Bitmap. Nun meine Frage wie kann ich realiesieren das wenn ich über ein BUtton mit der Maus bin, dann sich dann pro button so ein Tooltip öffnet wo der name des Butten steht. Bsp. Maus ist über der dem Button OPEN das dann steht öffnen. Quasi so eine art mousovereffekt wie bei java. Danke im VOrraus. Zitieren
Klotzkopp Geschrieben 8. Mai 2007 Geschrieben 8. Mai 2007 Sehe ich das richtig, dass du mit reiner WinAPI zu Gange bist? Dann wäre wohl hier der richtige Einstieg für dich: About ToolTip Controls Und weil das kein Standard-C oder -C++ ist: Verschoben nach C++: Compiler, IDEs, APIs Zitieren
Board00 Geschrieben 9. Mai 2007 Autor Geschrieben 9. Mai 2007 Hallo Danke für deinen Tipp aber es funktioniert noch nicht bei mir. so sieht jetzt mein Quellcode aus für die Umgebung.h also wo die Toolbar erzeugt wird bool ErstelleArbeitsFenster(HWND Handle,ProgrammInformation *info) { RECT rect; GetClientRect(Handle,&rect); (*info).handles.Arbeitsfenster = CreateWindow ( TEXT("Arbeitsfenster"), NULL, WS_CHILDWINDOW | WS_VISIBLE, 0,0, rect.right,rect.bottom, Handle,NULL, (*info).hInstance, NULL) ; if ((*info).handles.Arbeitsfenster == NULL) return FALSE; // Toolbar erstellen (*info).handles.Toolbar = CreateToolbarEx((*info).handles.Arbeitsfenster, // parent WS_CHILD | WS_BORDER | WS_VISIBLE | TBSTYLE_TOOLTIPS, // style IDR_TOOLBAR, // toolbar id AnzahlButtons, // number of bitmaps (*info).hInstance, // mod instance IDB_TOOLBAR, // resource id for the bitmap (LPCTBBUTTON)&tbButton, // address of buttons AnzahlButtons, // number of buttons 16,16, // width & height of the buttons 16,16, // width & height of the bitmaps sizeof(TBBUTTON) ); if ((*info).handles.Toolbar == NULL) return FALSE; HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (*info).handles.Arbeitsfenster, NULL,info->hInstance, NULL); if (NULL != hwndTip) { Programminfo.handles.ToolTip = hwndTip; SetWindowPos(hwndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } TOOLINFO ti; ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = info->handles.Arbeitsfenster; ti.hinst = info->hInstance; ti.rect.left=1; ti.rect.top=1; ti.rect.bottom=200; //ti.rect.left = 0; //ti.rect.top = 0; //ti.rect.right = 100; //ti.rect.bottom = 100; for(int i =0; i < AnzahlButtons; i++) { int x; if( ToolButtonHilfsText[i][0]==0) x=6; // Separator else x=22; // normaler Button ti.rect.right = ti.rect.left + x; ti.lpszText = ToolButtonHilfsText[i]; SendMessage(hwndTip, TTM_ADDTOOL, 0,(LPARAM)&ti); ti.rect.left = ti.rect.right + 1; } return TRUE; } und so schaut der Quelltext vom Hauptprogramm.h aus wo die elemente definiert werden für die Toolbar const int AnzahlButtons = 18; #define ID_FILE_NEW 0xE100 #define ID_FILE_OPEN 0xE101 #define ID_FILE_SAVE 0xE103 #define ID_FILE_SAVE_AS 0xE104 #define ID_EDIT_CLEAR 0xE120 #define ID_HELP 0xE146 #define ID_HELP_INDEX 0xE142 // Die Elemente für die Toolbar TBBUTTON tbButton[] = { {0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, //{0, ID_FILE_NEWtb, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {16, ID_FILE_MAKRO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, //{4, ID_FILE_SAVE_AS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, //{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {3, ID_EDIT_CLEAR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {12, ID_HARDCOPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {7, ID_STRUKTURIERTER_TEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {9, ID_EINGANG_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {10, ID_EINGANG_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {14, ID_ZOOM_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {15, ID_ZOOM_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, {11, ID_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, //{13, ID_INFO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0} }; char* ToolButtonHilfsText[AnzahlButtons] = { "Neues FUP-Projekt", "Neues Makro-Projekt", "Projekt Öffnen", "Projekt Speichern", "letztes eingefügtes Element löschen", "HARDCOPY", "", "erzeuge Strukturierten Text", "", "Eingang hinzufügen", "Eingang entfernen", "", "herein zoomen", "heraus zoomen", "", "Hilfe", "", "" }; aber leider wird immernoch kein tooltip erzeugt wenn ich mit der Maus darüber fahre. Weis einer rat?? Oder was mache ich falsch?? Zitieren
Klotzkopp Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 Die Position der Buttons solltest du dir besser mit TB_GETRECT direkt aus der Toolbar holen. Das Gefrickel mit den magischen Zahlen ist nicht so das Wahre. Was liefert dir SendMessage denn zurück? Zitieren
Board00 Geschrieben 11. Mai 2007 Autor Geschrieben 11. Mai 2007 Also Sendmessage war erfolgreich aber die Tooltips kamen immer noch nicht. Nun hab ich beim googeln was gefunden: Tooltip won't display over toolbar button - C Board NUn hab ich das versucht den Code an mein Programm anzupassen, aber erscheint über jedem Toolbutton der gleiche Tooltext (immer der erste String von meinem Textarry, in dem ich die Tooltips hinterlegt habe) for(int i =0; i < AnzahlButtons; i++) { if (*ToolButtonHilfsText[i] != *"") { tbButton[i].iString = SendMessage((*info).handles.Toolbar, TB_ADDSTRING, 0, (LPARAM) (LPSTR) ToolButtonHilfsText[i]); } else tbButton[i].iString = 0; } DWORD ToolButtonID[AnzahlButtons] = { ID_FILE_NEW, ID_FILE_MAKRO, ID_FILE_OPEN, ID_FILE_SAVE, ID_EDIT_CLEAR, 0, ID_HARDCOPY, 0, ID_STRUKTURIERTER_TEXT, 0, ID_EINGANG_PLUS, ID_EINGANG_MINUS, 0, ID_ZOOM_PLUS, ID_ZOOM_MINUS, 0, ID_HELP, 0 }; char* ToolButtonHilfsText[AnzahlButtons] = { "Neues FUP-Projekt", "Neues Makro-Projekt", "Projekt Öffnen", "Projekt Speichern", "letztes eingefügtes Element löschen", "HARDCOPY", "", "erzeuge Strukturierten Text", "", "Eingang hinzufügen", "Eingang entfernen", "", "herein zoomen", "heraus zoomen", "", "Hilfe", "", "" }; Hast du eine Idee, woran es liegt? Zitieren
Klotzkopp Geschrieben 11. Mai 2007 Geschrieben 11. Mai 2007 Das Problem ist vermutlich, dass du die Strings erst hinzufügst, nachdem die Toolbar mit allen Buttons bereits erstellt wurde. Nachträgliche Änderungen an dem TBBUTTON-Array wirken sich natürlich nicht automatisch aus. Möglicherweise reicht es, wenn du danach nochmal für jeden Button TB_SETBUTTONINFO verschickst, damit die aktualisierten Stringindizes auch bei der Toolbar ankommen. Zitieren
Board00 Geschrieben 14. Mai 2007 Autor Geschrieben 14. Mai 2007 Das Problem ist vermutlich, dass du die Strings erst hinzufügst, nachdem die Toolbar mit allen Buttons bereits erstellt wurde. Ja, das mache ich. Wie kann man das schon vorher machen oder geht das nicht? Nachträgliche Änderungen an dem TBBUTTON-Array wirken sich natürlich nicht automatisch aus. Möglicherweise reicht es, wenn du danach nochmal für jeden Button TB_SETBUTTONINFO verschickst, damit die aktualisierten Stringindizes auch bei der Toolbar ankommen. Wenn ich die TB_SETBUTTONINFO Message sende fliegt das Programm weg. Ich hab den Aufruf von Sendmessage mit TB_SETBUTTONINFO in die Schleife gepackt, ist das vllt verkehrt? Hast du eine Idee? Zitieren
Klotzkopp Geschrieben 14. Mai 2007 Geschrieben 14. Mai 2007 Wenn ich die TB_SETBUTTONINFO Message sende fliegt das Programm weg.Was soll das denn für eine Fehlerbeschreibung sein? Ich hab den Aufruf von Sendmessage mit TB_SETBUTTONINFO in die Schleife gepackt, ist das vllt verkehrt?Nö. Vermutlich sind irgendwelche Member der Struktur falsch oder gar nicht gesetzt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.