2013-10-24 5 views
1

Просто вскочил на C++ с win32 в Visual Studio 2012. Я опытный в C и C#, но мой C++ немного не хватает. Материал win32 просто, кажется, принимает любой намек на интуицию и бросает его в вулкан. Пока это была боль.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). В этом коде все буферы загружаются с правильными строками! Проблема в том, что моя программа закрывается/выходит, когда функция возвращается! Любая помощь??

+2

* «Я не знаю, как преобразовать строку буквального в массив wchar_t.» * - Поместите перед ним 'L'. - 'const wchar_t formatString [] = L"% f ";' –

+0

Несвязанный: вам нравится набирать = P? Вы передаете 'buffer' в' SetWindowText', как и должно быть, но передайте '& buffer [0]' таким функциям, как 'GetWindowText'. Не какая-то земляная ошибка; это только стиль. Оба они абсолютно правильны, и если так, как вы делаете так, пусть будет так. Я просто нашел немного странным, что это было непротиворечиво. – WhozCraig

+0

'Проблема в том, что моя программа закрывается/выходит, когда функция возвращается!' It should'n? Он выходит из строя или с ошибкой? Если с ошибкой, используйте отладчик. Если, как правило, я не вижу причин для отправки строкового кода. У вас есть «основная петля»? BTW, рассмотрим чтение книги на C++, которую вы все еще записываете в C. – Drop

ответ

2

Если вы хотите, чтобы иметь возможность строить версии ANSI и UNICODE версии, вы можете использовать Generic-Text Mappings in Tchar.h

#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); 
+1

Это правда, но на самом деле вам нужно просто использовать Unicode всегда. – tenfour

Смежные вопросы