Консультация № 175217
13.12.2009, 20:01
0.00 руб.
0 2 1
Здравствуйте эксперты, подскажите пожалуйста. Пишу в Microsoft Visual C++ следующий проект . У меня есть окно диалога, на нем есть элемент Combo. Если какая-нибудь функция, которая могла бы загрузить в него нужные строки из текстового файла? Если нет, то надо самостоятельно это сделать, напишите как это тогда заранее к нему обратится? Вызываю диалоговое окно через DoModal

Обсуждение

Неизвестный
14.12.2009, 06:52
общий
это ответ
Здравствуйте, Tribak.

Для работы с Combo есть специальные оконные сообщения.

Добавление: CB_ADDSTRING
Удаление: CB_DELETESTRING
Число элементов: CB_GETCOUNT
Текущий элемент: CB_GETCURSEL
и так далее(msdn knows...)

Готовых функций, чтобы заполнить Combo из файла нету. Придётся построчно читать файл, потом эти строки заносить в Combo
(читать файл построчно: fopen - открыть файл, fgets - вычитать строку, fclose - закрыть файл)

Так как (я понял что) это MFC, не забываем проверять на нулёвость указатели на окна:

в OnInitDialog:

Код:
CWnd *pWnd = GetDlgItem(IDC_COMBO);
if(NULL != pWnd)
{
pWnd->SendMessage(CB_ADDSTRING, 0, LPARAM("New string 1"));
pWnd->SendMessage(CB_ADDSTRING, 0, LPARAM("New string 2"));
}


Или, как "чистый" вариант для MFC:

Код:
CComboBox *pCombo = dynamic_cast<CComboBox*>(GetDlgItem(IDC_COMBO));
if(NULL != pCombo)
{
pCombo->AddString("New string 1");
pCombo->AddString("New string 2");
}


Или совсем универсальный вариант:

Код:
HWND hCombo = ::GetDlgItem(m_hWnd, IDC_COMBO);
if(NULL != hCombo)
{
::SendMessage(hCombo, CB_ADDSTRING, 0, LPARAM("New string 1"));
::SendMessage(hCombo, CB_ADDSTRING, 0, LPARAM("New string 2"));

}
Неизвестный
14.12.2009, 07:17
общий
код:

Код:
#include <stdio.h>
//...
char szLine[1024] = "";
HWND hCombo = GetDlgItem(m_hWnd, IDC_COMBO);
FILE *fpPtr = NULL;
fpPtr = fopen("MyFile.txt", "r");
if(NULL != fpPtr && NULL != hCombo)
{
fseek(fpPtr, 0, SEEK_SET); // переместимся в начало файла
while(NULL != fgets(szLine, 1024, fpPtr))
{
::SendMessage(hCombo, CB_ADDSTRING, 0, LPARAM(szLine));
}
fclose(fpPtr);
}
Форма ответа