Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > HWND и класс


Автор: AndreySol 12.6.2007, 00:35
Приложение на базе диалога.
Можно-ли имея HWND главного диалогового окна получить указатель на класс этого диалогового окна ?

Автор: DigitSphinx 12.6.2007, 02:16
Если имеется ввиду это :
Код

CWnd * MyCWnd = new CWnd(SomeHWND);

или
Код

CWnd * MyCWnd = (CWnd *)SomeHWND;

То :
Код

error C2248: 'CWnd::CWnd' : cannot access private member declared in class 'CWnd'

Так что мне тоже будет интересно послушать ответы ! 

Автор: zkv 12.6.2007, 03:57
Код

void CTestDialogDlg::OnBnClickedButton10()
{
    HWND hWnd = this->GetSafeHwnd();
    CTestDialogDlg *pWnd = static_cast<CTestDialogDlg *>( CWnd::FromHandle( hWnd ) ); 
    ASSERT( pWnd->IsKindOf( RUNTIME_CLASS( CTestDialogDlg ) ) );
}

Автор: DigitSphinx 12.6.2007, 13:07
Код

HWND hWnd = this->m_hWnd;
CDialog *pWnd = (CDialog *)( CWnd::FromHandle( hWnd ) ); 
pWnd->SetWindowTextW(_T("TEST"));
CWnd * pCWnd = (CWnd*)(CWnd::FromHandle(hWnd));
pCWnd->SetWindowPos(NULL, 500, 500, 0, 0, SWP_NOSIZE);

Работает  smile  smile
Не знал про FromHandle(); Век живи век учись ))
zkv, Спасибо !

Автор: zkv 12.6.2007, 13:37
Цитата(DigitSphinx @  12.6.2007,  13:07 Найти цитируемый пост)
Не знал про FromHandle();

я тоже не знал (или забыл smile), посмотрел в МСДН 

Цитата(DigitSphinx @  12.6.2007,  13:07 Найти цитируемый пост)
pWnd->SetWindowTextW(_T("TEST"));

ну не надо так, я считаю вообще стоит забыть про существование функций с А и W на конце, ну не наша это забота, фреймворк сам нужную подставит, а в сочетании с макросом _T() это вообще нелепо смотрится smile

как-то так надо:
Код

pWnd->SetWindowText( _T("TEST") );

Автор: DigitSphinx 12.6.2007, 14:27
Это было не умышленно , я сам не заметил что с “W”  smile 

Автор: AndreySol 12.6.2007, 23:49
Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)