【问题标题】:Microsoft Outlook Address book's title is not displayed properlyMicrosoft Outlook 通讯簿的标题显示不正确
【发布时间】:2014-07-22 05:14:46
【问题描述】:

我正在开发一个我想从中发送电子邮件的应用程序。当我单击按钮/菜单时,Outlook Sendmail 窗口正确显示。

当我打开通讯簿时,对话框正常显示,但对话框标题仅显示“S”。

实际上该标题必须显示为“ Selected Names: ... ”。

代码:

HWND hWnd = this->GetSafeHwnd();
MAPIINIT_0 tMapInit = { 0, MAPI_MULTITHREAD_NOTIFICATIONS };
HRESULT hResult = MAPIInitialize( &tMapInit );
HMODULE hMapiMod = LoadLibrary(_T("mapi32.dll"));

ProcMapiLogon = (LPMAPILOGON)GetProcAddress( hMapiMod, "MAPILogon" );

(ProcMapiLogon)( (ULONG)hWnd, NULL, NULL, MAPI_LOGON_UI | MAPI_NEW_SESSION, 0, &hCurrentSession );


LPMAPISENDMAIL ProcMapiSendMail = NULL;
ProcMapiSendMail = (LPMAPISENDMAIL)GetProcAddress(hMapiMod, "MAPISendMail");
(ProcMapiSendMail)(hCurrentSession, (ULONG)hWnd, &myMsg, MAPI_DIALOG | MAPI_LOGON_UI, 0);

注意:此应用程序是在命令提示符下构建的,并设置了 unicode 标志 _UNICODE,编译器是 Visual Studio 2008。

请帮我解决问题。

提前致谢。

【问题讨论】:

    标签: visual-c++ outlook window mapi


    【解决方案1】:

    简单的 MAPI 函数仅适用于 ANSI 字符串。还要记住,在与简单或扩展 MAPI 接口时依赖条件编译绝不是一个好主意。始终在代码中明确指定字符串风格(ANSI 与宽字符串)。

    【讨论】:

    • 感谢您的回复。我创建了一个测试应用程序用于测试目的,并在 Visual Studio 2008 中构建它,在项目设置中将字符集设置为“使用 Unicode 字符集”。这将正确显示“地址簿”的标题名称(选定名称:全局地址列表)。此设置和使用 _UNICODE 设置的条件编译有什么区别。有没有其他方法可以正确显示“通讯录”对话框的标题?提前致谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    相关资源
    最近更新 更多