C++ GUI в MFC - виджет разбиения на страницы

Я пишу код на C++, нацеленный на устройство WinCE 6.0, и мне трудно дорабатывать GUI для моего приложения. Конструктор окон VS 2005, который я должен использовать, кажется, не упрощает эту задачу, и я не могу найти документацию, которая проливает свет на API, надеюсь, кто-нибудь здесь сможет.

Мне нужно динамически писать на странице виджета пользователя на / общее количество страниц. Я ожидаю, что CTEXT правильный виджет для использования

CTEXT           IDC_PG, 168,183,63,63

Однако я не могу найти правильный способ печати на CTEXT (или любом другом подходящем виджете). Заранее благодарен за любые полезные советы.

1 ответ

Если я правильно понимаю вопрос, вы хотите отобразить немного текста в вашем пользовательском интерфейсе в форме "Страница x из n". Для этого подходит статический текстовый элемент управления (например, CTEXT).

Чтобы установить текст программно, вы можете вызвать SetWindowText, но, поскольку это диалоговое окно, вероятно, проще вызвать SetDlgItemText.

Из вашего примера, идентификатор IDC_PGи он должен соответствовать числовой константе, уникальной среди всех элементов управления в диалоговом окне. Предполагая, что у вас есть объект MFC для диалога (который я предполагаю, myDialog) и указатель на текст с нулевым символом в конце, который вы хотите отобразить (который я буду считать szPageText), ваш звонок будет выглядеть так:

myDialog.SetDlgItemText(IDC_PG, szPageText);

Если у вас есть дескриптор диалога, ваш вызов будет выглядеть так:

SetDlgItemText(hDlg, IDC_PG, szPageText);

Поскольку это более старый код, он может быть скомпилирован для MBCS (часто называемой ANSI в документации Windows) или UTF-16 (часто называемой Unicode или "широкими" строками в MSDN), поэтому вы, вероятно, захотите использовать TCHAR и связанные макросы для уверен, что это работает в любом случае.

TCHAR szPageText[64] = TEXT("");
wsprintf(szPageText, TEXT("Page %d of %d"), currentPage, totalPages);
myDialog.SetDlgItemText(IDC_PG, szPageText);

В более современном коде вы, вероятно, явно использовали бы широкие версии API:

WCHAR szPageText[64] = L"";
::wsprintfW(szPageText, L"Page %d of %d", currentPage, totalPages);
myDialog.SetDlgItemTextW(IDC_PG, szPageText);
Другие вопросы по тегам