Cwnd returnd Неопределенное значение - PullRequest
0 голосов
/ 28 января 2010

Я хочу использовать Setwindowpos () в глобальной функции, чтобы изменить положение одного диалога. Так что я закодировал, как показано ниже

CWnd *pWnd = (CWnd*)pMain->GetDlgItem(IDD_TOOLBAR_DIALOG);//GetActiveFrame ();
pWnd->SetWindowPos(&CWnd::wndBottom,0,80,45,900,SWP_SHOWWINDOW);

pWnd возвращается как неопределенное значение. Так что я следую этому методу

CToolTab * tab;
tab = new CToolTab();
if(tab->GetSafeHwnd() == 0)
{
 tab = new CToolTab();
 if( tab->m_hWnd != NULL )
 {
 tab->SetWindowPos(&CWnd::wndBottom,0,80,45,900,SWP_SHOWWINDOW);   }
}

Но m_hWnd возвращает 0x0000. Так что в обоих случаях SetWindowPos показывает ошибку подтверждения. Как я могу получить дескриптор диалога в Глобальной функции?

1 Ответ

0 голосов
/ 02 февраля 2010

Хорошо, так что я обдумывал это, а потом мне пришло в голову, что IDD_TOOLBAR_DIALOG - это почти наверняка идентификатор ресурса для самого диалога, а не элемент управления в диалоге. Вы не можете вызвать GetDlgItem, ссылаясь на идентификатор ресурса Dialog, и ожидать, что найдете окно, в котором оно содержится (оно просто не будет работать, и вы получите нулевой указатель CWnd *).

На что указывает pMain? Главное окно приложения? Это родитель в диалоге?

Где в коде вы создаете диалог, который хотите переместить? В этот момент у вас должен быть действительный CWnd производный объект для него? Одним из решений было бы сохранить его как переменную-член, чтобы при необходимости позже вызвать SetWindowPos для него.

...