使用Sendmessage settext设置文本框文本只发送字符串win32 c ++的第一个字符?

时间:2013-09-09 07:46:42

标签: c++ c winapi fstream

以下函数从文件中加载2个字符串:

int loadsettings()
{
    wstring a,b;
    int retrn = 1;
    wfstream myFile;
    myFile.open ("settings.txt");
    if ((!myFile.is_open())||(myFile.fail()))
    MessageBox(NULL, "Error openning settings file!", "Error", MB_ICONINFORMATION);
    else
    {
        if(myFile.fail())
        {
            myFile.close();
            myFile.clear();
            retrn = 0;
            savedefault();  //creates a settings.txt with default values
            myFile.open ("settings.txt", ios::in);
        }


            myFile >> b; //b becomes "user"
            myFile >> a; // a becomes "password"

        user = (LPARAM)b.c_str();
        password = (LPARAM)a.c_str();

        SendMessage(hEdit,
                WM_SETTEXT,
                NULL,
                user);  // sets the text box to "u"

            SendMessage(hEdit2,
                WM_SETTEXT,
                NULL,
                password); //sets the text box to "p"

        myFile.close();
    }
    return retrn;
}

我想把从文件中取出的两个字符串转到文本框hEdit和hEdit2。尝试使用Sendmessage settext执行此操作。但只有字符串中的第一个字符才能到达。我该怎么办?

1 个答案:

答案 0 :(得分:0)

当你只有一个字母时,它几乎每次都是因为你将一个Unicode字符串发送到ANSI方法。
另一种方式显示了一些乱码结果

  • 如果要使用ANSI支持进行编译

    uses string and not wstring

  • 如果您需要Unicode支持

    添加unicode支持在正确的位置执行2定义的需要(最顶部的标题或项目选项)

    #define UNICODE // for windows api unicode
    #define _UNICODE // for libc unicode tchar and _TEXT macro...
    

    之后,您应该在代码中的静态字符串中添加L"string"_TEXT("string")甚至_T("string")