none
CEdit类的ShowBalloonTip方法,没有任何显示,返回结果是false RRS feed

  • 问题

  • 我使用的代码是更改自msdn example

    bool result= m_edit.ShowBalloonTip(
    		_T("CEdit"),    // title
    		_T("tip!"),        // text
    		TTI_INFO);
    
    

    然而没有任何显示。不管是程序窗口还是在系统托盘,任何地方都没有提示。

    另外我尝试使用了

            EDITBALLOONTIP bt;
    	::ZeroMemory(&bt, sizeof(EDITBALLOONTIP));
    	bt.cbStruct = sizeof(EDITBALLOONTIP);
    	bt.pszTitle = _T("CEdit");
    	bt.pszText = _T("tip!");
    	bt.ttiIcon = 1;
    
    	Edit_ShowBalloonTip(m_edit.GetSafeHwnd(), &bt); // EM_SHOWBALLOONTIP

    结果也是一样的。

    我尝试过搜索解决方法,然而和 ShowBalloonTip

    有关的绝大部分都是 c#进行编程,对我的帮助非常小 

    2020年1月1日 10:10

答案

  • 我已经找到了解决方法。

    如果你和我有一样的问题,请尝试在 pch.h 加入如下代码

    #ifdef UNICODE
    #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
    #endif

    相关解释参考Build Requirements for Windows Common Controls

    前提是你和我一样,使用C++编程,且应用程序类型是基于“对话框”

    2020年1月1日 10:29

全部回复

  • 我已经找到了解决方法。

    如果你和我有一样的问题,请尝试在 pch.h 加入如下代码

    #ifdef UNICODE
    #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
    #endif

    相关解释参考Build Requirements for Windows Common Controls

    前提是你和我一样,使用C++编程,且应用程序类型是基于“对话框”

    2020年1月1日 10:29
  • 我已经找到了解决方法。

    如果你和我有一样的问题,请尝试在 pch.h 加入如下代码

    #ifdef UNICODE
    #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
    #endif

    相关解释参考Build Requirements for Windows Common Controls

    前提是你和我一样,使用C++编程,且应用程序类型是基于“对话框”

    补充一些有关的链接

    https://devblogs.microsoft.com/oldnewthing/?p=1043

    该链接中的文章提到了上述代码的作用——即,指定程序使用的 V6 版本的公共控件,并且提到了如何让v5版本的控件和v6版本共存,

    另外,文章中提到了,视觉样式管理清单,因此,我尝试在MFC程序创建向导中,勾选不同选项来验证。

    最终得出如下结果。

    勾选“高级功能”——“公共控件清单”,即可以达到到同样的效果。

    PS.

    1.清单对控件是否有反作用,我不知道。如果你在维护一个老的MFC项目,建议你阅读链接中的文章

    2.然而,前述两种方法,均可以让CEdit类成功调用ShowBlloonTip

    2020年1月2日 5:34