editbox-Fenster ohne Leiste



  • danke,

    der compiler sagt mir er kennt die ICC_TOOLTIP_CLASSES nicht.

    wenn ich das mal in google einwerfe find ich eine andere Beschreibung der INITCOMMONCONTROLSEX

    die hier ist die, die ich zuerst gefunden hab(da steht ICC_TOOLTIP_CLASSES nicht drin)
    http://msdn2.microsoft.com/en-us/library/bb775507.aspx

    und hier, scheinbar die selbe, steht sie drin
    http://msdn2.microsoft.com/en-us/library/aa932705.aspx

    wo ist der unterschied? was muss ich machen damit der compieler den ICC_TOOLTIP_CLASSES kennt?


  • Mod

    Hast Du ein altes SDK?

    Martin Richter schrieb:

    InitCommonControls tut es auch.



  • Ich stochere noch was im dunklen, hab das jetzt mal so versucht, einfach experimentel hinzubekommen. leider tut es das nicht...is das so überhaupt ansatzweise richtig?

    ich find da auch nur schwer ein beispiel was für mich passt.

    InitCommonControls();
    hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,		
            0, 0, 0, 0, hwnd, NULL, NULL, NULL );
    
        SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0,
            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    
        GetClientRect (hwnd, &rect);
    
      TOOLINFO ti; 
    
        ti.cbSize = sizeof(TOOLINFO);
        ti.uFlags = TTF_SUBCLASS;
        ti.hwnd = hwnd;
        ti.hinst = NULL;
        ti.uId = 0;
        ti.lpszText = L"blabla";
        ti.rect.left = 100;    
        ti.rect.top = 200;
        ti.rect.right = 300;
        ti.rect.bottom = 400;
    
        SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
    



  • Mod

    Dito in der MSDN. Einfach Using Tooltips lesen

    http://msdn2.microsoft.com/en-us/library/bb760252(VS.85).aspx



  • uff,

    also meine Listview habe ich in eine Klasse ausgelagert die mir den listview erstellt, die callback funktion davon ist als static-methode in der klasse enthalten.

    ich hab die tooltip erstellung jetzt mal so definiert, bisher passiert nichts, hab jetzt aber auch so oft rumprobiert das ich wohl den wald nicht mehr sehe vor lauter bäumen.:

    sieht jemand warum er mir meinen tooltip nicht erstellt?

    LRESULT CListview::ListViewProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		POINT hitPoint;
    		static HWND hWndTemp;
    
    	case WM_MOUSEMOVE:
    
    		DestroyWindow(hWndTemp);
    
    		TRACKMOUSEEVENT tme;
    		tme.cbSize = sizeof(TRACKMOUSEEVENT);
    		tme.dwFlags = TME_HOVER;
    		tme.dwHoverTime = HOVER_DEFAULT;
    		tme.hwndTrack = hWnd;
    		TrackMouseEvent(&tme);
    		break;
    
    	case WM_MOUSEHOVER:
    		GetCursorPos(&hitPoint);
    		LVHITTESTINFO pHitInfo;
    		ScreenToClient(hWnd,&hitPoint);
    		pHitInfo.pt = hitPoint;
    		ListView_HitTest(hWnd, &pHitInfo.pt);
    		/* ID des Eintrags ermitteln */
    		TCHAR szID[8] = {0,0,0,0,0,0,0,0};
    		ListView_GetItemText(hWnd, pHitInfo.iItem, 0, szID, sizeof(szID));
    		/* Nur ausführen, wenn Listviewzeile gefüllt ist und eine ID hat */
    		if(szID[0] != 0)
    		{
    			//CoOrdinaten zurückwandeln in Bildschirmkoordinaten
    			ClientToScreen(hWnd, &hitPoint);
    
    			CRequestDB myRequest(hWnd, "localhost","root","root","knowledgebase",3306);
    
    			InitCommonControls();
    			hWndTemp = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP |
                           TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT,     
                           CW_USEDEFAULT, CW_USEDEFAULT,
    					   CW_USEDEFAULT, hWnd, NULL, NULL, NULL);
    
    			if (hWndTemp)
    			 {
    				TOOLINFO toolInfo = { 0 };
    				toolInfo.cbSize = sizeof(toolInfo);
    				toolInfo.hwnd = hWndTemp;
    				toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
    				toolInfo.uId = (UINT_PTR)hWnd;
    				toolInfo.lpszText = L"blabla";
    				SendMessage(hWndTemp, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
    			 }
    
    		}
    		break;
    	}
    
    	return CallWindowProc ((WNDPROC) CListview::PrevWndProcListView, hWnd, message, wParam, lParam);
    }
    

  • Mod

    1. InitCommonControls gehört in den Programmsart
    2. Das Tooltip Control würde ich sofort in WM_CREATE erzeugen.
    3. Du verwendest WM_MOUSEHOVER! Wieso?
    http://msdn2.microsoft.com/en-us/library/ms645613.aspx

    The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent.

    4. Warum schaust Du Dir nicht den Link, an den ich Dir gegeben habe, bzw. den von CodeFinder?



  • Martin Richter schrieb:

    1. InitCommonControls gehört in den Programmsart
    2. Das Tooltip Control würde ich sofort in WM_CREATE erzeugen.
    3. Du verwendest WM_MOUSEHOVER! Wieso?
    http://msdn2.microsoft.com/en-us/library/ms645613.aspx

    The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent.

    4. Warum schaust Du Dir nicht den Link, an den ich Dir gegeben habe, bzw. den von CodeFinder?

    ok, werds nochmal probieren.

    zu 1)
    stehen InitCommonControls und InitCommonControlsEx im Konflikt? derzeit rufe ich nämlich die -Ex variante auf um den Listview zu erstellen. kann da was passieren wenn ich beide varianten parrallel benutze?
    Wäre es nicht richtiger in der initMethode der ListView Klasse den InitCommoncontrol auszuführen?

    zu 3)
    wenn meine maus über einen gefüllten listview eintrag hover soll für diesen speziellen eintrag der tooltip angzeigt werden wo dann die preview informationen drin stehen.

    zu 4)
    hab ich, dachte ich hätte alles relevante eingebaut....aber ich schau nochmal.

    (schonmal danke soweit 👍 )


  • Mod

    zu 1. Du brauchst nur das eine oder das andere. Und das gilt Applikationsweit!
    zu 3. Verwende dennoch WM_MOUSEMOVE, das ist der richtige Weg!
    zu 4. Die Samples sind einfach!



  • *grübel*, also warum das net funktioniert versteh ich net.

    das init, mach ich jetzt einmal beim programmstart, den tooltip erzeuge ich jetzt so, ich seh den fehler net:

    (das mit dem mousehover änder ich später, ich will jetzt erstmal den doofen tooltip sehen bevor ich das nächste problem anfange).

    der g_hInst

    wird im hauptprogramm gefüllt und hab ich als

    extern HINSTANCE g_hInst;
    

    in der headerdatei der klasse drin.

    LRESULT CListview::ListViewProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		POINT hitPoint;
    		static HWND hWndTemp;
    
    	case WM_MOUSEMOVE:
    
    		DestroyWindow(hWndTemp);
    
    		TRACKMOUSEEVENT tme;
    		tme.cbSize = sizeof(TRACKMOUSEEVENT);
    		tme.dwFlags = TME_HOVER;
    		tme.dwHoverTime = HOVER_DEFAULT;
    		tme.hwndTrack = hWnd;
    		TrackMouseEvent(&tme);
    		break;
    
    	case WM_MOUSEHOVER:
    		GetCursorPos(&hitPoint);
    		LVHITTESTINFO pHitInfo;
    		ScreenToClient(hWnd,&hitPoint);
    		pHitInfo.pt = hitPoint;
    		ListView_HitTest(hWnd, &pHitInfo.pt);
    		/* ID des Eintrags ermitteln */
    		TCHAR szID[8] = {0,0,0,0,0,0,0,0};
    		ListView_GetItemText(hWnd, pHitInfo.iItem, 0, szID, sizeof(szID));
    		/* Nur ausführen, wenn Listviewzeile gefüllt ist und eine ID hat */
    		if(szID[0] != 0)
    		{
    			//CoOrdinaten zurückwandeln in Bildschirmkoordinaten
    			ClientToScreen(hWnd, &hitPoint);
    
    			CRequestDB myRequest(hWnd, "localhost","root","root","knowledgebase",3306);
    
    			hWndTemp = CreateWindowEx(0L, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX,
    									  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    									  CW_USEDEFAULT, hWnd, NULL, g_hInst, NULL); 
    
    			if (hWndTemp)
    			 {
    				RECT rc;
    				GetClientRect(hWnd,&rc);
    				TOOLINFO toolInfo;
    				ZeroMemory(&toolInfo, sizeof(toolInfo));
    				toolInfo.cbSize			= sizeof(toolInfo);
    				toolInfo.hwnd			= hWndTemp;
    				toolInfo.uFlags			= TTF_SUBCLASS;
    				toolInfo.uId			= 0;
    				toolInfo.hinst			= g_hInst;
    				toolInfo.lpszText		= L"blabla";
    
    				SendMessage(hWndTemp, TTM_ADDTOOL, 0, reinterpret_cast<LPARAM>(&toolInfo)); 
    			 }
    
    		}
    		break;
    	}
    
    	return CallWindowProc ((WNDPROC) CListview::PrevWndProcListView, hWnd, message, wParam, lParam);
    }
    

    was fehlt? ich seh es einfach nicht. 😞



  • also ich kapiers nicht. hab mir jetzt mittlerweile mal ein leeres projekt mit einem nackten fenster erstellt wo ich versucht hab den tooltip zu erstellen. da klappt es auch nicht.

    da fehlt mir irgendwo noch etwas......


  • Mod



  • Vlt. helfen dir diese Befehle :
    WS_POPUP
    WS_OVERLAPPEDWINDOW
    WS_WINDOWEDGE

    Irgendein Befehl davon war aufjeden Fall für den Rand, um ihn wegzulassen.



  • Martin Richter schrieb:

    Du hast doch schon ein vollständiges Sample bekommen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-164449-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html

    es funktioniert aber leider nicht. es passiert rein gar nix. alles wird durchlaufen und scheibar erstellt, aber der tooltip kommt nicht hervor :(.



  • kann es sein, das tooltip prinzipell nur für dialoge definierbar sein? irgendwie bezieht sich jedesbeispiel was man bei msdn findet auf dialoge.....


  • Mod

    Nein das ist wurscht. Ich verwende Tooltips überall..



  • kann es sein das ich jedes element subclassen muss, bevor ich ein tooltip dafür benutzen kann, sprich jeden button, fensterbereich usw.?


  • Mod

    Nein!



  • siehst du an diesem beispiel code einen fehler?

    mein derzeitiges ziel ist es, einem leeren fenster übere die kompletten client-area einen tooltip zuzuweisen, erwartungsgemäß klappt das wieder nicht 😞

    Aufrufen tut ich die Methode während WM_CREATE des Hauptfenster(für das ich den tooltip ja auch erzeugen möchte)

    ich versteh mein problem leider nicht, es läuft alles durch. die handle sind != NULL, die .lib ins drin und das headerfile. ich mach den initcontrol.....was fehlt/ist falsch?

    void CreateMyTooltip (HWND hwnd)
    {
                     // struct specifying control classes to register
        INITCOMMONCONTROLSEX iccex; 
        HWND hwndTT;                 // handle to the ToolTip control
              // struct specifying info about tool in ToolTip control
        TOOLINFO ti;
        unsigned int uid = 0;       // for ti initialization
        LPTSTR lptstr = L"This is your ToolTip string.";
        RECT rect;                  // for client area coordinates
    
        /* INITIALIZE COMMON CONTROLS */
        iccex.dwICC = ICC_WIN95_CLASSES;
        iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
        InitCommonControlsEx(&iccex);
    
        /* CREATE A TOOLTIP WINDOW */
        hwndTT = CreateWindowEx(WS_EX_TOPMOST,
            TOOLTIPS_CLASS,
            NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,		
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            hwnd,
            NULL,
            hInst,
            NULL
            );
    
        SetWindowPos(hwndTT,
            HWND_TOPMOST,
            0,
            0,
            0,
            0,
            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    
        /* GET COORDINATES OF THE MAIN CLIENT AREA */
        GetClientRect (hwnd, &rect);
    
        /* INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE */
        ti.cbSize = sizeof(TOOLINFO);
        ti.uFlags = TTF_SUBCLASS;
        ti.hwnd = hwnd;
    	ti.hinst = hInst;
        ti.uId = uid;
        ti.lpszText = lptstr;
            // ToolTip control will cover the whole window
        ti.rect.left = rect.left;    
        ti.rect.top = rect.top;
        ti.rect.right = rect.right;
        ti.rect.bottom = rect.bottom;
    
        /* SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW */
        SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);	
    
    }
    


  • hat keiner ne idee. ich verzweifel wirklich total daran, dass ich nicht rauskrieg woran das liegt dsa er mir zum verrecken keinen tooltip erstellen will.

    Kein Beispiel funktioniert bei mir 😞


Anmelden zum Antworten