Re[7]: Как заполнить Dlg->m_listbox через внешнюю функции
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 10.08.04 12:22
Оценка: +1
Здравствуйте, lah, Вы писали:

lah>я сделал так


lah>В диалоге

lah>
lah>class CMyDlg : public CDialog
lah>{

lah>  CMyDlg(CStringArray& arStr, CWnd* pParent = NULL ); 
lah>  CStringArray m_aStr;
lah>   ....
lah>}

lah>***************************
lah>CMyDlgCert::CMyDlg(CStringArray& arStr, CWnd* pParent /*=NULL*/)
lah>    : CDialog(CDlgCert::IDD, pParent)
lah>{
lah>    m_aStr.Copy(arStr);
lah>}
lah>
- Искренне ваш, Поросенок Пафнутий
Как заполнить Dlg->m_listbox через внешнюю функции
От: lah  
Дата: 10.08.04 08:16
Оценка:
Здраствуйте.
Помогите кому не лень.

Есть окно диалога с ListBox'ом.
Пишу такую вешь:

,,,,

CMyDlg *pMyDlg = new CMyDlg(NULL);

...

pMyDlg->m_list.AddString("стока"); // Здесь программа ругается



Подскажите почему. И что надо делать, что бы заработало.

Причем надо чтобы диалоговое окно было модальным.

Спасибо.
Re: Как заполнить Dlg->m_listbox через внешнюю функции
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.08.04 08:21
Оценка:
Здравствуйте, lah, Вы писали:

lah>CMyDlg *pMyDlg = new CMyDlg(NULL); 

lah>...

lah>pMyDlg->m_list.AddString("стока");  // Здесь программа ругается


lah>Подскажите почему. И что надо делать, что бы заработало.


видимо окна еще нет, оно появится когда ты сделаешь DoModal.

Перенеси свой AddString в OnInitDialog() CMyDlg-а
Re: Как заполнить Dlg->m_listbox через внешнюю функции
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.08.04 09:58
Оценка:
Здравствуйте, lah, Вы писали:

>Но строка, которую нужно отправить в m_list определяется в этой функции (эта функция должна потом отобразить само диалоговое окно с заполненным списком).


добавь параметр в конструктор диалога, или после создания диалога записывай в его переменную, но в listbox — все равно в OnInitDialog

p/s/ не надо создавать новых сообщений, пиши в этой ветке
Re[2]: Как заполнить Dlg->m_listbox через внешнюю функции
От: lah  
Дата: 10.08.04 10:20
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, lah, Вы писали:


>>Но строка, которую нужно отправить в m_list определяется в этой функции (эта функция должна потом отобразить само диалоговое окно с заполненным списком).


OE>добавь параметр в конструктор диалога, или после создания диалога записывай в его переменную, но в listbox — все равно в OnInitDialog


OE>p/s/ не надо создавать новых сообщений, пиши в этой ветке


Уважаемый Odi$$ey если Вас не затруднит чуть-чуть по подробнее.
Re[3]: Как заполнить Dlg->m_listbox через внешнюю функции
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.08.04 10:39
Оценка:
Здравствуйте, lah, Вы писали:

>>>Но строка, которую нужно отправить в m_list определяется в этой функции (эта функция должна потом отобразить само диалоговое окно с заполненным списком).

OE>>добавь параметр в конструктор диалога, или после создания диалога записывай в его переменную, но в listbox — все равно в OnInitDialog

lah>чуть-чуть по подробнее.


это в диалоге:

class CMyDlg : public CDialog
{
   CMyDlg( CString s, CWnd* pParent = NULL );
   CString str;
}

CMyDlg::CMyDlg( CString s, CWnd* pParent /*=NULL*/ )
        : CDialog( CMyDlg::IDD, pParent )
{
    str = s;
}

BOOL CMyDlg::OnInitDialog()
{
    m_list.AddString(str);

    return TRUE;        
}


это использование:

CMyDlg *pMyDlg = new CMyDlg("стока", NULL); 
pMyDlg->DoModal();
Re[4]: Как заполнить Dlg->m_listbox через внешнюю функции
От: lah  
Дата: 10.08.04 11:44
Оценка:
Уважаемый Odi$$ey, дело в том, что список у меня заполняется в цикле, а если это делать через конструктор, то список будет иметь только одно поле.
Для устранения неясностей вставлю часть кода:

CMyDlg *pMyDlg;
int i = 0;
do {
char str[256];
///******************************************


// Блок получения значения str


///*******************************

pMyDlg = new CDlgCert(str, NULL)
i++;
} while (Условие);

pMyDlg->DoModal();

.......
Re[5]: Как заполнить Dlg->m_listbox через внешнюю функции
От: Zinya Беларусь  
Дата: 10.08.04 12:05
Оценка:
Здравствуйте, lah, Вы писали:

lah>Уважаемый Odi$$ey, дело в том, что список у меня заполняется в цикле, а если это делать через конструктор, то список будет иметь только одно поле.

lah>Для устранения неясностей вставлю часть кода:

lah>CMyDlg *pMyDlg;

lah>int i = 0;
lah>do {
lah> char str[256];
lah> ///******************************************


lah> // Блок получения значения str



lah> ///*******************************


lah> pMyDlg = new CDlgCert(str, NULL)

lah> i++;
lah>} while (Условие);

lah>pMyDlg->DoModal();


lah>.......


Сформируй сначала список строк, а потом передавай в конструктор.
Hедопитая бутылка подобна высшему образованию — когда-нибудь потом обязательно пригодится. ICQ#7981430
Re[6]: Как заполнить Dlg->m_listbox через внешнюю функции
От: lah  
Дата: 10.08.04 12:18
Оценка:
Здравствуйте, Zinya, Вы писали:


Z>Сформируй сначала список строк, а потом передавай в конструктор.


я сделал так

В диалоге
class CMyDlg : public CDialog
{

  CMyDlg(CStringArray arStr, CWnd* pParent = NULL ); 
  CStringArray m_aStr;
   ....
}

***************************
CMyDlgCert::CMyDlg(CStringArray arStr, CWnd* pParent /*=NULL*/)
    : CDialog(CDlgCert::IDD, pParent)
{
    m_aStr.Copy(arStr);

}

BOOL CMyDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();

    for (int i=1; i<=m_aStr.GetSize(); i++)
        m_list.AddString(m_aStr.GetAt(i));

    return TRUE; 
}


при использовании




CMyDlg *pMyDlg;
CStringArray arStr; 
int i = 0;
do {
  char str[256];
   ///******************************************


   // Блок получения значения str 


   ///*******************************

   arStr.Add(NameString);

   i++;
} while (Условие);

pMyDlg = new CMyDlg(arStr, NULL);
pMyDlg->DoModal();

.......


и компилятор выдает следующую ошибку:

error C2664: 'CDlgCert::CDlgCert' : cannot convert parameter 1 from 'class CStringArray' to 'class CStringArray'
No copy constructor available for class 'CStringArray'
Re[8]: Как заполнить Dlg->m_listbox через внешнюю функции
От: lah  
Дата: 10.08.04 12:33
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, lah, Вы писали:


lah>>я сделал так


lah>>В диалоге

lah>>
lah>>class CMyDlg : public CDialog
lah>>{

lah>>  CMyDlg(CStringArray& arStr, CWnd* pParent = NULL ); 
lah>>  CStringArray m_aStr;
lah>>   ....
lah>>}

lah>>***************************
lah>>CMyDlgCert::CMyDlg(CStringArray& arStr, CWnd* pParent /*=NULL*/)
lah>>    : CDialog(CDlgCert::IDD, pParent)
lah>>{
lah>>    m_aStr.Copy(arStr);
lah>>}
lah>>



Исправил, но теперь по pMyDlg->DoModal();
программа выдает ошибку.
Re[9]: Как заполнить Dlg->m_listbox через внешнюю функции
От: lah  
Дата: 10.08.04 12:44
Оценка:
Спасибо! Все получилось. Вопрос исчерпан.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.