Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
412
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    michbach michbach ist offline Rookie
    Registriert seit
    Apr 2009
    Beiträge
    8
    Hallo Zusammen,

    ich möchte einen ToolTip-Text während der Laufzeit ändern. Also das Grundgerüst (siehe Code) zur Erstellung eines ToolTip-Fensters habe ich schon aber irgenwie komme ich nicht weiter wie ich während der Laufzeit einen neuen Text (z.B. Uhrzeit etc.) zuweisen kann.

    Es scheint irgendwie im Case-Zweig WM_NOTIFY mit case TTN_NEEDTEXT eine neue Zuweisung möglich aber bisher hab ich es noch nicht hinbekommen bzw. die Lösung in Google gefunden. Vieleicht kann jemand weiterhelfen, wäre Super! Gruss an Alle, michbach

    PS: Mal ne Frage. Schon öfters ist mir beim googeln nach Lösungen aufgefallen dass es weit mehr MFC-Beiträge gibt als zu WinApi. WinApi scheint wohl nicht so gefragt zu sein oder täusche ich mich da? Ich hab halt mal mit Api angefangen weil ich ein Fenster basteln wollte und weil ichs vorher nicht besser wusste.. Ist wohl besser auf MFC zu wechseln, oder?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    
    #pragma comment(lib, "user32.lib")
    #pragma comment(lib, "comctl32.lib")
    #include <windows.h>
    #include <commctrl.h>
    #include <time.h>
    #include <sstream>
    #include <tchar.h>
    using namespace std;
     
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    void CreateToolTipForRect(HWND hwndParent, int tt_nr);
     
    HINSTANCE hInst;
    HWND fe_haupt;
    HWND bu_uhrzeit;
    HWND *HW_TT  = new HWND[50];
     
    //####################################################################################################
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
    {
      MSG  msg ;    
      WNDCLASS wc = {0};
      wc.lpszClassName = "Tooltip" ;
      wc.hInstance     = hInstance ;
      wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
      wc.lpfnWndProc   = WndProc ;
      wc.hCursor       = LoadCursor(0, IDC_ARROW);
     
      hInst = hInstance;
      RegisterClass(&wc);
     
      //XXX Hauptfenster und Button erstellen
      fe_haupt = CreateWindow(wc.lpszClassName,"Haupt",WS_OVERLAPPEDWINDOW|WS_VISIBLE,100,100,200,150,0,0,hInstance,0);  
      bu_uhrzeit = CreateWindow ("button","A",WS_CHILD|WS_VISIBLE,0,0,50,50,fe_haupt,(HMENU)100,hInstance,NULL) ;
     
      //XXX Tooltip-Fenster erstellen
      CreateToolTipForRect(fe_haupt, 0);    // für Hauptfenster
      CreateToolTipForRect(bu_uhrzeit, 1);  // für Button
     
      while( GetMessage(&msg, NULL, 0, 0)) 
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
      return (int) msg.wParam;
    }
     
     
    //####################################################################################################
    LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
      switch(msg)  
      {
        //___________________________________
        case WM_NOTIFY:
            {
                switch (((LPNMHDR)lParam)->code) 
                {
                    //****? case TTN_NEEDTEXT:
                    //****? Zuweisung neuer Text
                }
            }
        break;
        //___________________________________
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
      }return DefWindowProc(hwnd, msg, wParam, lParam);
    }
     
    //####################################################################################################
    void CreateToolTipForRect(HWND hwndParent, int tt_nr)
    {
        INITCOMMONCONTROLSEX ic;
        ic.dwSize   = sizeof(INITCOMMONCONTROLSEX);
        ic.dwICC    = ICC_TAB_CLASSES;
        InitCommonControlsEx(&ic);
     
        //XXX Tooltip-Fenster erstellen
        HW_TT[tt_nr] = CreateWindowEx(WS_EX_TOPMOST,TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX|TTS_ALWAYSTIP,    
        CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwndParent,NULL,hInst,NULL);
        
        SetWindowPos(HW_TT[tt_nr],HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
     
        //XXX Tool-Information
        TOOLINFO ti = { 0 };
        ti.cbSize   = sizeof(TOOLINFO);
        ti.uFlags   = TTF_SUBCLASS;
        ti.hwnd     = hwndParent;
        ti.hinst    = hInst;
        //ti.lpszText = "TestTest";
     
        if(hwndParent == fe_haupt){ti.lpszText = "Hauptfenster";}
        else if(hwndParent == bu_uhrzeit){ti.lpszText = "Button-Uhrzeit";}
        GetClientRect (hwndParent, &ti.rect);
     
        //XXX Associate the ToolTip with the "tool" window.
        SendMessage(HW_TT[tt_nr], TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);   
        SendMessage(HW_TT[tt_nr], TTM_ACTIVATE, true, NULL);
    }
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.144
    Bei TTN_NEEDTEXT musst du nur sowas machen:

    NMTTDISPINFO* pTTHdr = (NMTTDISPINFO*)pHdr;
    pTTHdr->lpszText = szTemp;
    pTTHdr->hinst = NULL;

    Denk aber dran, dass die Variable szTemp stehen bleiben muss, also nicht irgendwas Lokales sein darf.


    Sich mit WinAPI auszukennen ist schon meistens ein grosser Vorteil, auch wenn man mit MFC arbeitet. MFC ist dann gut, wenn man eine grössere Anwendung bastelt. Da kommt schon ein stattliches Grundgerüst mit, auf dem man aufsetzen kann. Wenn man aber mal an MFC vorbei will, dann kommt einem das Wissen der WinAPI doch zugute. Die meisten Fälle kann man dann auch direkt nach MFC übersetzen, aber manche auch nicht.
     

  3. #3
    michbach michbach ist offline Rookie
    Registriert seit
    Apr 2009
    Beiträge
    8
    Danke für die Antwort! Wenn ich mehr Zeit hab werd mir doch mal die Mühe machen und MFC näher anschauen
    liebe grüsse, michbach
     

Ähnliche Themen

  1. Tooltip mit Variablen Text
    Von Ichbinalex im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 20.06.09, 22:11
  2. Tooltip (Mous over Text then Pic)
    Von GodWar im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 11.05.05, 03:35
  3. Listbox text während Laufzeit ändern
    Von Strandwas im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 20.02.05, 12:18
  4. Tooltip-Text in Listbox
    Von osswood im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 05.02.05, 19:00
  5. Tooltip Text
    Von lindin im Forum VisualStudio & MFC
    Antworten: 4
    Letzter Beitrag: 15.07.04, 09:43