CTabCtrl

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

CTabCtrl

Сообщение Alezis » 23 апр 2005, 11:44

Трабл такой .
Есть табкантрол при нажатии на табы прячу/показываю соответствующие элементы на диалоге.
Нужно послать из другого окна того же процесса мессагу чтобы изменить закладку таб контрола, т.е. чтобы он перключился и показывал уже другие элементы(как при клике мышью по другому табу).
кароче как попасть в функцию обработки TCN_SELCHANGE
Я делаю так:

Код: Выделить всё

	NMHDR p;
	p.hwndFrom = m_tabWnd;
	p.idFrom = IDC_TAB;
	p.code = 0;
	  ::PostMessage(m_tabWnd,WM_NOTIFY,(WPARAM)p.idFrom,(LPARAM)&p);
Где ошибка?

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сообщение Romeo » 25 апр 2005, 13:29

Ошибка в том, что tab кидает нотификацию, а не наоборот (кто-то должен кидать нотификацию tab'у). Ситуацию нужно разрешать с помощью сообщения PSM_SETCURSEL либо в таком виде:

Код: Выделить всё

lResult = SendMessage(          // returns LRESULT in lResult     
     (HWND) hWndControl,       // handle to destination control
     (UINT) PSM_SETCURSEL,   // message ID
     (WPARAM) wParam,          // = (WPARAM) (int) index;
     (LPARAM) lParam              // = (LPARAM) (HPROPSHEETPAGE) hpage; 
);  
либо воспользоваться макро PropSheet_SetCurSel:

Код: Выделить всё

BOOL PropSheet_SetCurSel(
     HWND hPropSheetDlg,
     HPROPSHEETPAGE index,
     HPROPSHEETPAGE hpage
);
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Ответить