Tooltips für verschiedene Fensterbereiche



  • Hallo an alle,

    ich versuche in meinem Fenster je nach Mausposition verschiedene Tooltips anzeigen zu lassen. Jedoch wird immer nur der erste Tooltip angezeigt, ich weiß leider nicht, was ich falsch mache:

    Mein Beispielcode, soll das Fenster in 2 Bereiche (links und rechts) einteilen, wobei, wenn der Cursor im linken Bereich ist, der linke Tooltip angezeigt werden soll (rechts analog).

    #include<Windows.h>
    #include<CommCtrl.h>
    
    int main()
    {
    	WNDCLASSEX classinfo_hauptfenster;
    
    	classinfo_hauptfenster.cbSize = sizeof( WNDCLASSEX );
    	classinfo_hauptfenster.style = 0;
    	classinfo_hauptfenster.lpfnWndProc = &DefWindowProc;
    	classinfo_hauptfenster.cbClsExtra = 0;
    	classinfo_hauptfenster.cbWndExtra = 0;
    	classinfo_hauptfenster.hInstance = GetModuleHandle( nullptr );
    	classinfo_hauptfenster.hIcon = nullptr;
    	classinfo_hauptfenster.hCursor = nullptr;
    	classinfo_hauptfenster.hbrBackground = CreateSolidBrush( RGB( 0xFF , 0xFF , 0xFF ) );
    	classinfo_hauptfenster.lpszMenuName = nullptr;
    	classinfo_hauptfenster.lpszClassName = L"HAUPTFENSTER";
    	classinfo_hauptfenster.hIconSm = nullptr;
    
    	RegisterClassEx( &classinfo_hauptfenster );
    
    	HWND hwnd = CreateWindow( classinfo_hauptfenster.lpszClassName , L"Titel" , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , 800 , 600 , nullptr , nullptr , classinfo_hauptfenster.hInstance , nullptr );
    
    	ShowWindow( hwnd , SW_SHOWNORMAL );
    	UpdateWindow( hwnd );
    
    	// TOOLTIPS:
    	HWND tooltip_handle1{ CreateWindowEx( WS_EX_TOPMOST ,
    										 TOOLTIPS_CLASS ,
    										 nullptr ,
    										 WS_POPUP | TTS_NOPREFIX ,
    										 CW_USEDEFAULT ,
    										 CW_USEDEFAULT ,
    										 CW_USEDEFAULT ,
    										 CW_USEDEFAULT ,
    										 hwnd ,
    										 nullptr ,
    										 GetModuleHandle( nullptr ) ,
    										 nullptr ) };
    
    	SetWindowPos( tooltip_handle1 , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
    
    	TOOLINFO toolinfo1;
    	toolinfo1.cbSize = sizeof( TOOLINFO ) - sizeof( void* );
    	toolinfo1.uFlags = TTF_SUBCLASS;
    	toolinfo1.hwnd = hwnd;
    	toolinfo1.uId = 0;
    	toolinfo1.rect.left = 0;
    	toolinfo1.rect.top = 0;
    	toolinfo1.rect.right = 800 / 2;
    	toolinfo1.rect.bottom = 600;
    	toolinfo1.hinst = GetModuleHandle( nullptr );
    	toolinfo1.lpszText = L"Tooltip 1";
    	toolinfo1.lParam = 0;
    	toolinfo1.lpReserved = nullptr;
    
    	SendMessage( tooltip_handle1 , TTM_ADDTOOL , 0 , reinterpret_cast<LPARAM>( &toolinfo1 ) );
    
    	HWND tooltip_handle2{ CreateWindowEx( WS_EX_TOPMOST ,
    										  TOOLTIPS_CLASS ,
    										  nullptr ,
    										  WS_POPUP | TTS_NOPREFIX ,
    										  CW_USEDEFAULT ,
    										  CW_USEDEFAULT ,
    										  CW_USEDEFAULT ,
    										  CW_USEDEFAULT ,
    										  hwnd ,
    										  nullptr ,
    										  GetModuleHandle( nullptr ) ,
    										  nullptr ) };
    
    	SetWindowPos( tooltip_handle2 , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
    
    	TOOLINFO toolinfo2;
    	toolinfo2.cbSize = sizeof( TOOLINFO ) - sizeof( void* );
    	toolinfo2.uFlags = TTF_SUBCLASS;
    	toolinfo2.hwnd = hwnd;
    	toolinfo2.uId = 0;
    	toolinfo2.rect.left = 800 / 2 + 1;
    	toolinfo2.rect.top = 0;
    	toolinfo2.rect.right = 800 / 2 - 1;
    	toolinfo2.rect.bottom = 600;
    	toolinfo2.hinst = GetModuleHandle( nullptr );
    	toolinfo2.lpszText = L"Tooltip 2";
    	toolinfo2.lParam = 0;
    	toolinfo2.lpReserved = nullptr;
    
    	SendMessage( tooltip_handle2 , TTM_ADDTOOL , 0 , reinterpret_cast<LPARAM>( &toolinfo2 ) );
    
    	MSG msg;
    
    	while( GetMessage( &msg , nullptr , 0 , 0 ) > 0 )
    	{
    		TranslateMessage( &msg );
    		DispatchMessage( &msg );
    	}
    
    	return msg.wParam;
    }
    

    Das Programm zeigt jedoch nur den Tooltip auf der linken Seite an 😞

    Danke und mfG

    shft



  • toolinfo2.rect.right = 800 / 2 - 1;
    

    ist wohl falsch 😉

    Edit: Erzeuge dir besser eine Funktion "CreateToolTip" (anstatt C&P-Code)



  • Ah Perfekt, danke, hatte vergessen das RECT::right ja die X-Koordinate der rechten unteren Ecke beschreibt und nicht die Breite 🙂


Log in to reply