【问题标题】:How can I use MBCS to support a language without codepage?如何使用 MBCS 来支持没有代码页的语言?
【发布时间】:2012-09-21 07:06:41
【问题描述】:

MFC 应用程序需要在对话框中使用编辑 ctrl 来编辑泰米尔语。 但是我发现泰米尔语在 Windows 中没有代码页(是的,没有泰米尔语系统语言环境),而且我的情况没有 Unicode 选项。

看到某人的想法,Embedding HWND into external process using SetParent

我想创建另一个使用 UNICODE 选项构建的应用程序,将其窗口嵌入到对话框中,但失败了。 查看MSDN,SetParent需要父子窗口在一个应用中。

那么,我该如何实现呢?

@MSalters

我通过覆盖 virtual BOOL CWinThread::PumpMessage() 解决了这个问题,强制消息循环使用 W 版本 API。

BOOL CtamildlgApp::PumpMessage()
{
    _AFX_THREAD_STATE *pState = AfxGetThreadState();

    if ( !::GetMessageW( &( pState->m_msgCur ), NULL, NULL, NULL ) )
    {
        // Note: prevents calling message loop things in 'ExitInstance'
        // will never be decremented
        return FALSE;
    }

    // process this message

    if ( pState->m_msgCur.message != WM_KICKIDLE )
    {
        ::TranslateMessage( &( pState->m_msgCur ) );
        ::DispatchMessageW( &( pState->m_msgCur ) );
    }

    return TRUE;
}

然后 CreateWindowExW(... MSFTEDIT_CLASS ...)

【问题讨论】:

标签: mfc locale


【解决方案1】:

泰米尔语确实比平时更难。但仍有一件事很明显:使用 Unicode,而不是 MBCS。在内部,所有 Windows 函数都是 Unicode。 MBCS 包装器使用当前代码页将多字节编码转换为 UTF-16。例如。当您调用 MessageBoxA("Some String") 时,当前代码页用于将其转换为对 MessageBoxW(L"Some String") 的调用。

现在,这直接意味着您不能调用MessageBoxA("Narrow Tamil String"),因为没有代码页可以将其转换为适当的宽字符串。您必须直接调用 Unicode 函数 MessageBoxW("Narrow Tamil String")

MFC 不能神奇地解决这个问题。它可以为某些调用提供更好的语法,将 Win32 惯用语包装在类、构造函数和析构函数中。但它不能凭空创建缺失的代码页。

【讨论】:

  • 如果只显示Taminl语言,使用DrawTextW就可以了。但需要编辑,我不知道。
  • 最后只是一个CreateWindowExW(... MSFTEDIT_CLASS ...)的电话。
  • @WenboHuang:这本身可能是一个有效的问题,特别是如果您可以显示代码。但要清楚什么是失败的。添加控件,还是在其中使用泰米尔语?
  • 我在对话框 OnInitDialog 方法中添加以下代码: // TODO: 在此处添加额外的初始化 LoadLibrary( TEXT( "Msftedit.dll" ) ); CreateWindowExW(0, MSFTEDIT_CLASS, NULL, WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_TABSTOP, 0, 0, 300, 100, this->m_hWnd, NULL, NULL, NULL);它显示'?当我输入泰米尔语字符时。
  • @WenboHuang:不要在cmets中提问。您可能希望准确添加输入该字符的方式。
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2011-11-13
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多