C ++ Winapi Listbox строка с пробелом заканчивается в новой строке

Быстрый вопрос, если я создаю ListBox и добавляю строку с пробелом в список, список заканчивается довольно грязно, потому что все после пробела будет добавлено в следующую строку. В этом случае, показанном ниже, это еще хуже, потому что из-за этой проблемы в список не добавляется полное количество чисел. Это проблема, вызванная процессом преобразования строки в символ? Как я могу предотвратить это?

Вот код, который я использую для списка и процесса добавления:

case WM_CREATE:
{LBTest = CreateWindowEx(WS_EX_CLIENTEDGE
, L"LISTBOX",NULL
, WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY
, 7, 7, 300, 600
, hWnd, (HMENU)19, hInst, NULL);
std::wstring str,str2=L"Item Number ";
std::wstringstream ss;
for (int l = 0; l < 210; l++)
{
ss <<str2<< std::to_wstring(l);
ss >> str;
int pos = SendMessage(LBTest, LB_ADDSTRING, 0, (LPARAM)str.c_str());
SendMessage(LBTest, LB_SETITEMDATA, pos, (LPARAM)l);

}

break;
}

Вот полный код:

#include "stdafx.h"#include "Testproject.h"#include <iostream>
#include <string>
#include <thread>
#include <sstream>#define MAX_LOADSTRING 100
const UINT WM_WINDOW_UPDATE = WM_APP + 0;

HINSTANCE hInst;
WCHAR szTitle[MAX_LOADSTRING];
WCHAR szWindowClass[MAX_LOADSTRING];
HWND Button1,LBTest;ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK ListBoxExampleProc(HWND, UINT,
WPARAM, LPARAM);int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR    lpCmdLine,
_In_ int       nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_TESTPROJECT, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

HACCEL hAccelTable = LoadAccelerators(hInstance,   MAKEINTRESOURCE(IDC_TESTPROJECT));

MSG msg;while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEXW wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style          = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc    = WndProc;
wcex.cbClsExtra     = 0;
wcex.cbWndExtra     = 0;
wcex.hInstance      = hInstance;
wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTPROJECT));
wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_TESTPROJECT);
wcex.lpszClassName  = szWindowClass;
wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassExW(&wcex);
}BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; //

HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{LBTest = CreateWindowEx(WS_EX_CLIENTEDGE
, L"LISTBOX",NULL
, WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY
, 7, 7, 300, 600
, hWnd, (HMENU)19, hInst, NULL);
std::wstring str,str2=L"Item Number ";
std::wstringstream ss;
for (int l = 0; l < 210; l++)
{
ss.clear()
ss <<str2<< std::to_wstring(l);
ss >> str;
int pos = SendMessage(LBTest, LB_ADDSTRING, 0, (LPARAM)str.c_str());
SendMessage(LBTest, LB_SETITEMDATA, pos, (LPARAM)l);

}

break;
}
case WM_COMMAND:
{
int wmId = LOWORD(wParam);

switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;

default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
//TODO: Zeichencode, der hdc verwendet, hier einfügen...EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

Результат списка:

введите описание изображения здесь

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]