2

刚刚在 Visual Studio 2012 中使用 win32 进入 c++。我在 C 和 C# 方面经验丰富,但我的 c++ 有点缺乏。win32 的东西似乎只是采取了任何直觉的暗示并将其扔进了火山。到目前为止,它一直很痛苦。

这是我正在尝试做的事情:1)从文本框“编辑”控件中提取文本 2)将此文本转换为 int 3)使用 sprintf 类型格式化程序形成一个字符串,用于双浮点数 4)取结果字符串并将其显示在不同的文本框中。

我尝试了几种我在网上找到的不同的东西,但它们都不够用。这是我能做的最好的:

wchar_t buffer[30];
const wchar_t formatString[] = {'%','f','\0'}; //Yes I know this is awful, I don't know how to       convert a string literal into a wchar_t array.

GetWindowText(txtFixedPtToFloatInputHandle, &buffer[0], 15);

//Convert to signed integer
fixedPtValue = _wtoi(&buffer[0]);

//get a float
floatVal = 12.50;

//Use formatter to create a string representation
swprintf(buffer,  30, &formatString[0], floatVal);

SetWindowText(txtFixedPtToFloatOutputHandle, buffer);

这是我最近的一次。我知道这很讨厌,但我在网上找到的所有其他东西都达不到要求(LPWSTR、boost::、stdio.h)。在这段代码中,所有缓冲区都加载了正确的字符串!问题是我的程序在函数返回时关闭/退出!有什么帮助吗??

4

1 回答 1

2

如果您希望能够构建 ANSI 版本和 UNICODE 版本,您可以使用Tchar.h 中的 Generic-Text Mappings

#include <tchar.h>

_TCHAR EditText[ 32 ];
int cbCopied = GetWindowText( hWndInput, EditText, sizeof( EditText ) / sizeof( _TCHAR ) );
// Eventually use GetLastError if cbCopied == 0

// -1 because the snprint familly functions do not write a 0 if len == count, see docs
size_t cbMaxCarToOutput = ( sizeof( EditText ) / sizeof( _TCHAR ) ) - 1;
_sntprintf( EditText, cbMaxCarToOutput, _TEXT( "%f" ), floatVal );

SetWindowText( hWndInput, EditText );
于 2013-10-24T08:31:29.780 回答