editbox-Fenster ohne Leiste



  • Hallo,

    ich möchte eine fenster erstellen, das ausschließlich aus einer editbox besteht. Ich kriege das nur so hin, das über der editbox noch diese "blaue" Leiste ist (ich mein die, wo im Browser "C/C++ Forum:Neues Thema schreiben..." steht.

    Wie krieg ich die weg?

    hier mal, wie ich derzeit die editbox erstelle:

    hWnd = CreateWindow(L"Edit", NULL,	NULL,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    


  • hier im forum ist doch alles anders aufgebaut als ueber eine "einfache editbox", glaub kaum das man das so vergleichen kann


  • Mod

    Wo willst Du dieses Edit Control benutzen.
    Setze die enstprechenden Stile: WS_POPUP
    http://msdn2.microsoft.com/en-us/library/ms908192.aspx



  • Martin Richter schrieb:

    Wo willst Du dieses Edit Control benutzen.
    Setze die enstprechenden Stile: WS_POPUP
    http://msdn2.microsoft.com/en-us/library/ms908192.aspx

    ah ok, scheint aber auch nicht ganz das zu sein was ich will.

    ich hab ein listview und wenn ich mit der maus über einen gefüllt eintrag hovere soll ein fenster aufgehen und ein kleines preview des ganzen eintrags zeigen, über dem die maus grade hovert.

    die editbox krieg ich zwar gefüllt, was mich aber noch stört ist das man da jetzt auch was eingeben kann. wie kann ich daraus den ein reines read-only feld machen.

    außerdem erscheint unten in der taskleiste auch mein fenster. wie kann ich unterdrücken, das mein fenster unten in die leiste eingetragen werden kann?


  • Mod

    Und warum verwendest Du ken Tooltip Control. Das ist doch dafür gemacht!

    PS: Manchmal ist es besser auch im Nebensatz zu erklären was man eigentlich vorhat.



  • ok...

    ich muss ja für die für die INITCOMMONCONTROLSEX struktur einen Wert für dwICC setzen. welcher wert müsste das den sein um eine preview-box zu bekommen, oder etwas fenster ähnliches?

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

    von denen die auf msdn stehen, machst bei mir jetzt bei keinem richtig klick.

    noch eine frage, kann ich die selbe INITCOMMONCONTROLSEX stuktur für den tooltip benutzen wie für die listview? eigentlich ja oder? ich setze die werte, registriere die struktur und danach kann ich die variable wieder benutzen?!


  • Mod

    InitCommonControls tut es auch.

    Bei Tooltips macht es hier Klick: ICC_TOOLTIP_CLASSES



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


Log in to reply