NeedText


  • Mod

    @kahnsoft Ohne Behandlung von TTN_NEEDTEXTW kann das nicht gehen seit den Common Controls 6.0.



  • Hi,

    wie meinste das ?

    sicherlich gib es auch einen Code fürs Event, dort kommt kein Call rein, sonnst hätte ich ja den Fehler nicht
    messen können 🙂

    Beispiel :

    //tooltip Text engine
    BOOL CCamOpt::OnNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
    { //CToolBar ToolTip
    NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNMHDR;
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    pTTT->hinst = AfxGetResourceHandle();
    static CHAR szBuff[256]; LoadString(pTTT->hinst, pNMHDR->idFrom, &szBuff[0], sizeof(szBuff));
    pTTT->lpszText = szBuff;
    return TRUE;
    }



  • @martin-richter sagte in NeedText:

    TTN_NEEDTEXTW
    Ach Du meinst es ist ein Width Char Event ab einer bestimmten Version ?

    Och !

    Nee das ist es nicht, die Menus übrigens haben die ToolTips via ToolBar , das geht.

    if (!m_ToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE | TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | CBRS_TOOLTIPS, IDR_TOOLBAR) || !m_ToolBar.LoadToolBar(IDR_TOOLBAR))
    CVersions::DbgMsg(false, "CPatControlDlg::OnCreate ToolBarRec uncreateable");

    if (m_xmltree.Create(WS_CHILD | WS_VISIBLE | PTS_NOTIFY, CRect(0, 0, lpCreateStruct->cx, lpCreateStruct->cy), this, IDC_PROPERTYTREE) != TRUE)
    	return -1;
    
    BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP);
    m_bcMenu.SetIconSize(45, 30);
    m_bcMenu.LoadMenu(IDR_MENU1);
    m_bcMenu.LoadToolbar(IDR_TOOLBAR);


  • Nachtrag:

    Hallo Martin,

    da hat man frühzeitig folgendes Pragma für die Common Controls gesetzt:

    /*
    #pragma comment(linker,
    ""/manifestdependency:type='Win32' "
    "name='Microsoft.Windows.Common-Controls' "
    "version='6.0.0.0' "
    "processorArchitecture='' "
    "publicKeyToken='6595b64144ccf1df' "
    "language='
    '"")
    #pragma comment(lib, "ComCtl32.lib")
    */

    Ist das deaktiviert kommt auch wieder das Event, aber dann haben die Menu's keine Tooltips mehr.

    Gibt es hinweise was schief läuft ?

    Danke
    Karsten



  • Nachtrag 2:

    Es handelt sich dabei um ein Objekt das von Twain geladen wird, und je nach dem welches Programm
    den Twain-Treiber lädt, sind Tooltips vorhanden oder auch nicht.

    Dito ist auch das Erscheinungsbild unterschiedlich zb. Flat-Buttons oder Edge-buttons.

    Die Dll erzeugt aber eine eigene App , und initialisiert auch die Common-Controls.

    Was noch auffällt, je nach Main-Anwendung die diese Dll lädt, wird DPI Skaliert oder auch nicht.
    (Das kann man handhaben indem man die Kompatiblität einstellt der Main Anwendung)

    Auf die ToolTips bleiben diese Optionen wirkungsfrei,

    herjeee da kann man schon verstehen warum alle QT anwenden, oder sogar meinen wer dies nicht nutzt
    wäre ein Scharlatan.



  • #pragma comment(linker, 
    ""/manifestdependency:type='Win32' "
    "name='Microsoft.Windows.Common-Controls' "
    "version='6.0.0.0' "
    "processorArchitecture='' "
    "publicKeyToken='6595b64144ccf1df' "
    "language=''"")
    #pragma comment(lib, "ComCtl32.lib")
    

    Das kompiliert bei dir? Godbolt meldet da auch Probleme (fehlende Escapesequenz vor "). Eine leere Prozessorarchitektur führt bei mir auch immer direkt zu einem Fehler (Win 10 x64)

    Unable to start program 
    This application has failed to start because the application configuration is incorrect. Review the manifest file for possible errors. Reinstalling the application may fix this problem. For more details, please see the application event log.
    
    

    Warum nicht:

    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    

    Oder eben die passende Architektur:

    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_IA64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #else
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #endif
    


  • @yahendrik sagte in NeedText:

    Hallo yahendrik ,

    ja das geht, sicher ist durch die forum formatierung der Umbruch bei\ misslungen.

    Es lässt sich alles (auch deine Teile) kompilieren, dann haben meine Menus Tooltips, aber die Toolbar nicht.
    Kommentiere ich das aus, fehlen die Menutooltips, und die toolbar hat wieder welche (Event wird angesprungen ::NeedText)

    Mein Toolchain ist vs2017 (XP) Multibyte.



  • Nachtrag.

    Es werden im Common6 genau so wie Martin sagt, nur NeedText Events ausgelöst wenn in der notify_ex
    TTN_NEEDTEXTW angegeben wird.

    Für mich war das erstmal neu und lies anmuten das dies für das unicode -kompilat ausgelegt sei.

    ok resolved fürs erste,


  • Mod

    Das ist nicht neu, dass ist schon immer so, also genau genommen seit XP Zeiten (=Steinzeit)

    Dir muss klar sein, dass wenn Common Control 6 benutzt wird, alle Deine entsprechenden Windows zu Unicode Fenstern werden.

    Microsoft sagt klar: MBCS Projekte mit Common Control 6 Manifesten werden nicht unterstützt. Common Control 6 funktioniert nur in Unicode absolut korrekt.



  • @martin-richter sagte in NeedText:

    MBCS Projek

    Hallo Martin,

    also sämtliche meiner Items Windowstexte und auch MenuTexte die ich auch dynamisch verwalte sind Multibyte.
    (Das sind um die 1 Million Quellenzeilen).

    Das jetzt dies mit dem NeedText aufkam war hier neu, denn es funktioniert seit ionen so, und scheinbar hat sich
    etwas verändert in einem der letzen Updates.
    (Kann sein, das man demnächst mit weiteren Einschränkungen zu rechnen habe).

    Danke für deine Fachliche Kunde, wenn ich Dich nicht immer hätte wäre ich schon umgekippt 🙂

    Grüße aus Berlin
    Karsten


  • Mod

    @kahnsoft sagte in NeedText:

    also sämtliche meiner Items Windowstexte und auch MenuTexte die ich auch dynamisch verwalte sind Multibyte.
    (Das sind um die 1 Million Quellenzeilen).

    Das spielt keine Rolle. Die werden beim Compile Vorgang sowieso Unicode.
    Das Problem ist Dein Programm. Solange to LPTSTR und CString versus CStringA und CStringW wo es nötig ist verwendet hast. Keine direkten casts benutzt hast und brav CA2T etc benutzt hast solltest Du keine Probleme haben!



  • Ach schau an, der Compiler würde eh, Unicode verwenden!
    Ja richtig CString ist der Fall für die GUI. Dann weiß ich bescheid.

    Grüße und Erfolg
    vom Fort Hahneberg
    K.


Anmelden zum Antworten