Умоляю!!! Как связать control-переменную с элементом?
От: OISV  
Дата: 28.07.03 20:41
Оценка:
Но элемент создается ДИНАМИЧЕСКИ. Сам уже чуть голову не сломал, издевался над DoDataExchange — так ни к чему и не пришел, а это мне очень надо (для ToolTip'ов, для отображения gif-файлов на этом элементе и т.д.) Как это осуществить, подскажите, пожалуйста...
Re: Умоляю!!! Как связать control-переменную с элементом?
От: Serguei666 Беларусь  
Дата: 28.07.03 22:30
Оценка:
Здравствуйте, OISV, Вы писали:

OIS>Но элемент создается ДИНАМИЧЕСКИ. Сам уже чуть голову не сломал, издевался над DoDataExchange — так ни к чему и не пришел, а это мне очень надо (для ToolTip'ов, для отображения gif-файлов на этом элементе и т.д.) Как это осуществить, подскажите, пожалуйста...

Используйте функцию SubclassWindow
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re: Умоляю!!! Как связать control-переменную с элементом?
От: Рома Россия  
Дата: 28.07.03 22:44
Оценка:
Здравствуйте, OISV, Вы писали:

OIS>Но элемент создается ДИНАМИЧЕСКИ. Сам уже чуть голову не сломал, издевался над DoDataExchange — так ни к чему и не пришел, а это мне очень надо (для ToolTip'ов, для отображения gif-файлов на этом элементе и т.д.) Как это осуществить, подскажите, пожалуйста...

Крик души прямо

    myWnd = CreateWindow("STATIC", _T("my static"),        
                WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER,
                10, 10, 140, 40, m_hWnd, (HMENU)IDS_PICTSTATIC, NULL, NULL);
    UpdateData(FALSE);
    myPicture.Load("C:\\1.gif");
    myPicture.Draw();


Static надо создавать вот так. Т.е. не используя MFC обёртку.
40, 140 — ширина, длина.
IDS_PICTSTATIC — идентификатор в ресурсах
void CPictExTestDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CPictExTestDlg)
        // NOTE: the ClassWizard will add DDX and DDV calls here
    //}}AFX_DATA_MAP
    if (myWnd)
    {
        DDX_Control(pDX, IDS_PICTSTATIC, myPicture);
    }
}

Это перегруженный DoDataExchange
myWnd — это переменная типа HWHD. Сделай её членом класса.
У меня это работает.
Прикол в том что MFC не хочет сабклассить через DDX_Control, если окна связано уже с обёрткой. Вот и всё.
... << RSDN@Home 1.0 beta 7a >>
Re[2]: Умоляю!!! Как связать control-переменную с элементом?
От: Рома Россия  
Дата: 28.07.03 22:44
Оценка:
Здравствуйте, Serguei666, Вы писали:

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


OIS>>Но элемент создается ДИНАМИЧЕСКИ. Сам уже чуть голову не сломал, издевался над DoDataExchange — так ни к чему и не пришел, а это мне очень надо (для ToolTip'ов, для отображения gif-файлов на этом элементе и т.д.) Как это осуществить, подскажите, пожалуйста...

S>Используйте функцию SubclassWindow
Не работало, кстати.
... << RSDN@Home 1.0 beta 7a >>
Re[3]: Умоляю!!! Как связать control-переменную с элементом?
От: Serguei666 Беларусь  
Дата: 29.07.03 15:44
Оценка: :))
Здравствуйте, Рома, Вы писали:

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


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


OIS>>>Но элемент создается ДИНАМИЧЕСКИ. Сам уже чуть голову не сломал, издевался над DoDataExchange — так ни к чему и не пришел, а это мне очень надо (для ToolTip'ов, для отображения gif-файлов на этом элементе и т.д.) Как это осуществить, подскажите, пожалуйста...

S>>Используйте функцию SubclassWindow
Р>Не работало, кстати.
Неправильно использовали.
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re: Умоляю!!! Как связать control-переменную с элементом?
От: Serguei666 Беларусь  
Дата: 29.07.03 15:53
Оценка:
Здравствуйте, OISV, Вы писали:

OIS>Но элемент создается ДИНАМИЧЕСКИ. Сам уже чуть голову не сломал, издевался над DoDataExchange — так ни к чему и не пришел, а это мне очень надо (для ToolTip'ов, для отображения gif-файлов на этом элементе и т.д.) Как это осуществить, подскажите, пожалуйста...


Справились уже?
Если нет, то показывайте код и давайте детали — как переменную декларируете, как создаете контрол, что в DoDataExchange делаете, что хотите получить, что получается.
Ответ на каждый вопрос должен быть проиллюстрирован парой строчек кода. Тогда я буду иметь возможность вам помочь
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[4]: Умоляю!!! Как связать control-переменную с элементом?
От: Рома Россия  
Дата: 29.07.03 18:07
Оценка:
Здравствуйте, Serguei666, Вы писали:

S>Здравствуйте, Рома, Вы писали:


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


Р>>Не работало, кстати.

S>Неправильно использовали.


Делаем так — валится на ASSERT.
    CStatic myStatic;
    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
    myPicture.SubclassWindow(myStatic.m_hWnd);

Вот тут.
    ASSERT(FromHandlePermanent(hWndNew) == NULL);// must not already be in permanent map


Делаем так
    CStatic myStatic;
    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
    myPicture.SubclassWindow(myStatic.Detach());

Тоже не работает
Я пробовал эти два варианта.
Можно узнать как правильно?
... << RSDN@Home 1.0 beta 7a >>
Re[5]: Умоляю!!! Как связать control-переменную с элементом?
От: Serguei666 Беларусь  
Дата: 29.07.03 18:21
Оценка: 3 (1)
Здравствуйте, Рома, Вы писали:

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


S>>Здравствуйте, Рома, Вы писали:


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


Р>>>Не работало, кстати.

S>>Неправильно использовали.
Р>

Р>Делаем так — валится на ASSERT.

Р>
Р>    CStatic myStatic;
Р>    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
Р>                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
Р>    myPicture.SubclassWindow(myStatic.m_hWnd);
Р>

Р>Вот тут.
Р>
Р>    ASSERT(FromHandlePermanent(hWndNew) == NULL);// must not already be in permanent map
Р>


Р>Делаем так

Р>
Р>    CStatic myStatic;
Р>    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
Р>                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
Р>    myPicture.SubclassWindow(myStatic.Detach());
Р>

Р>Тоже не работает

В чем выражается "не работает"? Тоже ASSERT? В каком месте?

Р>Я пробовал эти два варианта.

Р>Можно узнать как правильно?

У вас не написано, какой тип имеет переменная myPicture. Буду считать, что тоже CStatic.
если нет, то укажите, какой тип.
Итак, для myPicture типа CStatic:

myPicture.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
 CRect(10,10,150,50), this, IDS_PICTSTATIC);


В обоих примерах у вас написано слишком много. Вы или вызываете Create, или SubclassWindow. И то, и другое одновременно — это лишнее, хотя можно заставить работать и такое.
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[6]: Умоляю!!! Как связать control-переменную с элементом?
От: Рома Россия  
Дата: 29.07.03 19:22
Оценка:
Здравствуйте, Serguei666, Вы писали:

S>Здравствуйте, Рома, Вы писали:


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


S>>>Здравствуйте, Рома, Вы писали:


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


Р>>>>Не работало, кстати.

S>>>Неправильно использовали.
Р>>

Р>>Делаем так — валится на ASSERT.

Р>>
Р>>    CStatic myStatic;
Р>>    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
Р>>                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
Р>>    myPicture.SubclassWindow(myStatic.m_hWnd);
Р>>

Р>>Вот тут.
Р>>
Р>>    ASSERT(FromHandlePermanent(hWndNew) == NULL);// must not already be in permanent map
Р>>


Р>>Делаем так

Р>>
Р>>    CStatic myStatic;
Р>>    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
Р>>                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
Р>>    myPicture.SubclassWindow(myStatic.Detach());
Р>>

Р>>Тоже не работает

S>В чем выражается "не работает"? Тоже ASSERT? В каком месте?


ASSERT, в WinCore.cpp, в SubclassWindow, кажется.
Р>>Я пробовал эти два варианта.
Р>>Можно узнать как правильно?

S>У вас не написано, какой тип имеет переменная myPicture. Буду считать, что тоже CStatic.

S>если нет, то укажите, какой тип.
Ну, вопрос был не мой. Вообще, CPictureEx : CStatic
S>Итак, для myPicture типа CStatic:

S>
S>myPicture.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
S> CRect(10,10,150,50), this, IDS_PICTSTATIC);
S>

Короче, сабклассить и не надо было. Был собственно вопрос. Посмотрите ниже, "как правильно static элемент создать"
Это меня и сбило с толку, продолжение темы т.с..
Ладно, спасибо, что закрыли хоть часть бездны моего незнания
... << RSDN@Home 1.0 beta 7a >>
Re[6]: Умоляю!!! Как связать control-переменную с элементом?
От: Рома Россия  
Дата: 29.07.03 19:24
Оценка:
Здравствуйте, Serguei666, Вы писали:

S>Здравствуйте, Рома, Вы писали:


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


S>>>Здравствуйте, Рома, Вы писали:


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


Р>>>>Не работало, кстати.

S>>>Неправильно использовали.
Р>>

Р>>Делаем так — валится на ASSERT.

Р>>
Р>>    CStatic myStatic;
Р>>    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
Р>>                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
Р>>    myPicture.SubclassWindow(myStatic.m_hWnd);
Р>>

Р>>Вот тут.
Р>>
Р>>    ASSERT(FromHandlePermanent(hWndNew) == NULL);// must not already be in permanent map
Р>>


Р>>Делаем так

Р>>
Р>>    CStatic myStatic;
Р>>    myStatic.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
Р>>                            CRect(10,10,150,50), this, IDS_PICTSTATIC);
Р>>    myPicture.SubclassWindow(myStatic.Detach());
Р>>

Р>>Тоже не работает

S>В чем выражается "не работает"? Тоже ASSERT? В каком месте?


ASSERT, в WinCore.cpp, в SubclassWindow, кажется.
Р>>Я пробовал эти два варианта.
Р>>Можно узнать как правильно?

S>У вас не написано, какой тип имеет переменная myPicture. Буду считать, что тоже CStatic.

S>если нет, то укажите, какой тип.
Ну, вопрос был не мой. Вообще, CPictureEx : CStatic
S>Итак, для myPicture типа CStatic:

S>
S>myPicture.Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE|SS_CENTER, 
S> CRect(10,10,150,50), this, IDS_PICTSTATIC);
S>

Короче, сабклассить и не надо было. Был собственно вопрос. Посмотрите ниже, "как правильно static элемент создать"
Это меня и сбило с толку, продолжение темы т.с..
Ладно, спасибо, что закрыли хоть часть бездны моего незнания
... << RSDN@Home 1.0 beta 7a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.