SetWindowTextW( &str... )乱码

我有一个MFC基于对话框的界面程序。我想在界面上的按钮上显示中文。中文是作为字符串资源放到string table里面的。我用str.LoadStringW(IDS_TEST)加载,然后用按钮的SetWindowTextW(&str,...)来显示。但显示一直是乱码。我确定我的string table设置的中文简体,项目\属性\字符集设置的是UNICODE。
如果直接SetWindowTextW(_T("测试")...)这样就显示正常,没有问题。
不知道为啥?

保存了字符串之后,把它转成utf8赋值给一个新的字符串,再打印这个新的字符串试试。

那就是str.LoadStringW(IDS_TEST)加载进来的字符串检查一下,看是不是正确的unicode字符

用SetWindowTextW(str.cstr(),...)

问题解决了,如果用了LoadString,那么要对应的使用GetString!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这个破问题折腾我好久了。