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


Автор: Vik 21.11.2004, 09:26
В MFSAppW установил флажек для rebar панели
после чего установил несколько кнопок и тд
написал обработчики в ручжную как положено
в обоаботчике написал

Код

GetDlgItem(IDC_STARTTHREAD)->EnableWindow(FALSE);


и во время выполнения окно с сообщением
Цитата
Unhandled exception at 0x0054b9c8 in KRN_5.exe: 0xC0000005: Access violation reading location 0x0000001c.

в функции EnableWindow
Как избежать этого помогите.

Автор: Darked 21.11.2004, 23:26
Vik
Приведи побольше кода.

Автор: Vik 22.11.2004, 07:50
Darked
ни понимаю какой код тебе нужно
всего лиш хочу сделать кнопку не активной
так же как и в диалоговом окне.

Автор: Darked 22.11.2004, 11:15
А может поробуешь, все -таки, нормально записать что - нибудь типа:
Код

   CButton*  pBut;
    pBut = (CButton*) GetDlgItem(IDC_STARTTHREAD);
    pBut->EnableWindow(FALSE);


Посмотрим что изменится, если что - нибудь изменится smile

Автор: Vik 22.11.2004, 12:51
Darked Спасибо за совет но ничего не изменилось.

Автор: Darked 22.11.2004, 13:29
Vik
Ну по сообщению, такое впечатление, что у тебя GetDlgItem не возращает указатель, посмотри в долбагере ,возращает что - нибудь. Правильно ли ты написал IDC_STARTTHREAD, видется такой ресурс?

Автор: Darked 22.11.2004, 14:10
CButton* pBut;
pBut = (CButton*) GetDlgItem(IDC_STARTTHREAD);
pBut->EnableWindow(FALSE);

Чего - то я тебе не то написал, забыл, что дело с ребаром имеем.


Автор: Vik 23.11.2004, 08:04
Darked
Ты прав я проверил GetDlgItem возвращает NULL
хотя IDC_STARTTHREAD я написал верно.
скорее всего это из за того что кнопка на ReBar панели.
Может будут какие нибуть еще предложения. smile

Автор: Darked 23.11.2004, 09:52
Vik
Как я понимаю у тебя на ребаре один из бандов - тулбар, кнопку которого ты и хочешь задизаблить. Попробуй что - нибудь типа:
Код

  m_wndToolBar.SendMessage(TB_SETSTATE, ID, MAKELONG(TBSTATE_ENABLED, 1));


Насчет (TBSTATE_ENABLED, 1)- 1 или 0 нужна я не уверен.

Автор: Vik 23.11.2004, 10:35
Darked
ну что тебе сказать
попробовал

Код

m_wndReBar.SendMessage(TB_SETSTATE,  IDC_STARTTHREAD , MAKELONG(TBSTATE_ENABLED, 1));


и с (TBSTATE_ENABLED, 1)- 1 или 0

сообщений никаких не возникло но и кнопка не задизаблилась
как окозалось TB_SETSTATE предназначена для ToolBarа.
Так что может ктонибудь еще что нибудь предложит.

Автор: Guest 23.11.2004, 19:14
А в топик про тулбар слабо заглянуть? smile Читай маленькие тайны МФС.Я для кого пишу?

DarkedА ты че подсказать не мог? smile

Автор: Coocky 23.11.2004, 19:15
Блин,под гостем вошел smile

Автор: Darked 23.11.2004, 23:00
Извини, Coocky, не догадался smile

Автор: Vik 24.11.2004, 11:11
Цитата
А в топик про тулбар слабо заглянуть?  Читай маленькие тайны МФС.Я для кого пишу?

DarkedА ты че подсказать не мог? 



Coocky

Очем ты.
Где читать.

Автор: Coocky 24.11.2004, 19:05
Есть топики с названием Маленькие тайны.МФС.Есть тема "GetDlgItem()-пользуемся правильно".Есть тема "CDialogBar-достучаться до небес ".Есть тема про кнопки на тулбаре.Поищи в поисковике smile

Автор: Vik 7.12.2004, 10:37
Coocky Толи поиск плохо пашит толи ты прикалываешся ?

Автор: alien_by 7.12.2004, 11:26
Я так понял, тебе нужно обновлять некий контрол после определённых действий.
Если так, то для этого в MFC существует стандартный механизм, основынный на сообщениях UPDATE_COMMAND_UI. Такое сообщение рассылается всем подписанным контролам, после того как пользователь (или система) произвели некоторые действия с одним из контролов (в меню или на тулбарах).

Чтобы подписать контрол на данное сообщение, нужно установить обработчик на сообщение UPDATE_COMMAND_UI.
Этот обработчик имеет следующий вид (мастер умеет генерить его сам).
Код

void CMyClass::OnUpdateToolsMyTool( CCmdUI* pCmdUI )
{
   if( Некоторое условие )
       pCmdUI->Enable( TRUE );
}


Класс CCmdUI имеет множество методов для управления контролами, активация/пассивация, разрешение/запрещение, изменение статута и т.п.

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