Хачу получать WM_SETFOCUS в Custom control
От: Atsy  
Дата: 30.03.02 15:06
Оценка:
Пишу на "чистом" Win API. Делаю свой контрол. Написал оконную функцию для него, зарегистрировал класс. В VCшном редакторе ресурсов добавил Custom control со стилем 0x50a10000
(WS_CHILD|WS_BORDER|WS_VSCROLL|WS_VISIBLE|WS_TABSTOP), прописал имя своего класс.
Все нормально работает, тока вот в эту оконную функцию не приходят сообщения WM_SETFOCUS, WM_KILLFOCUS, WM_ACTIVATE, а они мне ой как нужны...
Если субклассировать от какого-нибудь EditBox'а, то эти сообщения приходят. Тока я не хочу субклассировать :о(
Памагите, плз...
Все очевидное становится очевидным когда в него тыкают носом :о/
Re: Хачу получать WM_SETFOCUS в Custom control
От: ua1zcl Россия www.alexklm.ru
Дата: 30.03.02 16:10
Оценка:
Здравствуйте Atsy, Вы писали:

A>Пишу на "чистом" Win API. Делаю свой контрол...


Это почти невероятно чтобы система не посылала в окно такие главные сообщения.
Может это отсутствие

return DefWindowProc (hwCtrl,uMsg,wParam,lParam);


— для не обрабатывемых сообщений, и Вы это имеете ввиду?
Александр
Re[2]: Хачу получать WM_SETFOCUS в Custom control
От: Atsy  
Дата: 30.03.02 18:49
Оценка:
Здравствуйте ua1zcl, Вы писали:

U>
U>return DefWindowProc (hwCtrl,uMsg,wParam,lParam); 
U>


U>- для не обрабатывемых сообщений, и Вы это имеете ввиду?


Да есть у меня ентот DefWindowProc...
Оконная процедура у меня имеет вид

LONG WINAPI MyWndProc ( HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){
switch(msg){
case ...:
break;
case ...:
break;
default:
return DefWindowProc(hWnd,msg,wp,lp);
}
return false;
}

ставил вместо "return false" "return DefWindowProc(hWnd,msg,wp,lp)" — таже фигня. блин две недели ковыряюсь никак не пойму в чем прикол. Не посылаются сообщения, ну хоть тресни :о(
Все очевидное становится очевидным когда в него тыкают носом :о/
Re: Хачу получать WM_SETFOCUS в Custom control
От: Alex Fedotov США  
Дата: 30.03.02 19:27
Оценка:
Здравствуйте Atsy, Вы писали:

A>Пишу на "чистом" Win API. Делаю свой контрол. Написал оконную функцию для него, зарегистрировал класс. В VCшном редакторе ресурсов добавил Custom control со стилем 0x50a10000

A>(WS_CHILD|WS_BORDER|WS_VSCROLL|WS_VISIBLE|WS_TABSTOP), прописал имя своего класс.
A>Все нормально работает, тока вот в эту оконную функцию не приходят сообщения WM_SETFOCUS, WM_KILLFOCUS, WM_ACTIVATE, а они мне ой как нужны...

А когда, ты ожидаешь, чтобы они приходили?
-- Alex Fedotov
Re[2]: Хачу получать WM_SETFOCUS в Custom control
От: Atsy  
Дата: 30.03.02 19:41
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>А когда, ты ожидаешь, чтобы они приходили?


Хочу чтобы приходили после того, как я ткнусь мышой в этот контрол. Ну или после нажатия TAB (хотя это в далеком будущем :о) ).
Все очевидное становится очевидным когда в него тыкают носом :о/
Re[3]: Хачу получать WM_SETFOCUS в Custom control
От: Sasparella США  
Дата: 30.03.02 20:57
Оценка:
Здравствуйте Atsy, Вы писали:

A>Здравствуйте Alex Fedotov, Вы писали:


AF>>А когда, ты ожидаешь, чтобы они приходили?


A>Хочу чтобы приходили после того, как я ткнусь мышой в этот контрол. Ну или после нажатия TAB (хотя это в далеком будущем :о) ).


E меня было так — при тыканьем мыши фокус тоже не устанавливался — тогда я его в обработчике WM_LBUTTONDOWN ставил его вручную -::SetFocus(...)

Может у вас тожесамое?
Re[3]: Хачу получать WM_SETFOCUS в Custom control
От: ua1zcl Россия www.alexklm.ru
Дата: 30.03.02 21:00
Оценка:
Здравствуйте Atsy, Вы писали:

A>Здравствуйте Alex Fedotov, Вы писали:


AF>>А когда, ты ожидаешь, чтобы они приходили?


A>Хочу чтобы приходили после того, как я ткнусь мышой в этот контрол. Ну или после нажатия TAB (хотя это в далеком будущем :о) ).


Про DefWindowProc — некоторые, но не все, сообщения приходилось напралвять именно туда.
Ещё завист от зарегистрированного класса окна элемента управления, на что тоже надо обратить внимание. А если не получится, дайте мне Ваш код здесь или письмом на ua1zcl@mail.ru, попробую найти причину.
Александр
Re[4]: Хачу получать WM_SETFOCUS в Custom control
От: Atsy  
Дата: 31.03.02 00:11
Оценка:
Здравствуйте Sasparella, Вы писали:

S>E меня было так — при тыканьем мыши фокус тоже не устанавливался — тогда я его в обработчике WM_LBUTTONDOWN ставил его вручную -::SetFocus(...)


S>Может у вас тожесамое?



Спасибо, так работает (блин, как до самого не доперло? :о) )
Только все равно интересно, почему автоматически фокус не передается...
Все очевидное становится очевидным когда в него тыкают носом :о/
Re[4]: Хачу получать WM_SETFOCUS в Custom control
От: Atsy  
Дата: 31.03.02 00:28
Оценка:
Здравствуйте ua1zcl, Вы писали:

U>Про DefWindowProc — некоторые, но не все, сообщения приходилось напралвять именно туда.

U>Ещё завист от зарегистрированного класса окна элемента управления, на что тоже надо обратить внимание. А если не получится, дайте мне Ваш код здесь или письмом на ua1zcl@mail.ru, попробую найти причину.

Вот так я регистрирую класс:

WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = (WNDPROC)MyWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = 0;
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = "mylvclass";
if(!RegisterClass( &wc ))return false;

Оконную функцию я писал выше. (не привожу ее полностью из целей экономии размера сообщения ;о) )
Впрочем если по совету Sasparella все заработало, то какой смысл разбираться почему не шлются фокусные сообщения... :о(

P.S. Кстати, когда-то давно я пытался сварганить контрол на билдере и столкнулся с такой-же проблемой...
Все очевидное становится очевидным когда в него тыкают носом :о/
Re: Хачу получать WM_SETFOCUS в Custom control
От: ua1zcl Россия www.alexklm.ru
Дата: 31.03.02 07:20
Оценка:
Здравствуйте Atsy!
На http://www.template.fromru.com/zip/Cmdlg.zip я положил проект для BorlandC++5.02.
Там на примере кнопки наглядно показано многое нужное (и не нужное). В конце файла Cmdlg.cpp про собственно кнопку.
Александр
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.