|
|
|
Не входит в OnKeyDown
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! У меня есть диалог на котором стоит CTabCtrl. Мне надо обрабатывать сообщения с диалогов страниц, я создал для диалога одной из страниц обработчик сообщения WM_KEYDOWN но когда в режиме отладки захожу на эту страницу нажимаю какую-нибудь клавишу программа туда не заходит. Заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 12:58 |
|
||
|
Не входит в OnKeyDown
|
|||
|---|---|---|---|
|
#18+
Выложи код, так проше посмотреть будет. Обработчик создавал Add Event Handler? И еще. Сообщение будет приходить, только когда на Tab Control попал TabStop. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 14:10 |
|
||
|
Не входит в OnKeyDown
|
|||
|---|---|---|---|
|
#18+
Уважаемый AlexSar спасибо что заинтересовались моим вопросом! Вот мой класс дталога страницы: class CPageOptions1 : public CDialog { DECLARE_DYNAMIC(CPageOptions1) public: CPageOptions1(CWnd* pParent = NULL); // standard constructor virtual ~CPageOptions1(); // Dialog Data enum { IDD = IDD_PAGEOPTIONS1 }; virtual BOOL OnInitDialog(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual void OnOK(); virtual void OnCancel(); // virtual BOOL OnCommand(WPARAM wParam, LPARAM IParam); // virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult); virtual BOOL OnChildNotify( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult ); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedCheckjpg(); BOOL bSelJPG; BOOL bSelMPG; CString sDirJPG; CString sDirMPG; afx_msg void OnBnClickedCheckmpg(); afx_msg void OnEnChangeEditdirjpg(); afx_msg void OnEnChangeEditdirmpg(); afx_msg void OnBnClickedButtonseldirjpg(); afx_msg void OnBnClickedButtonseldirmpg(); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); }; Вот фрагмент его реализации: void CPageOptions1::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default CDialog::OnKeyDown(nChar, nRepCnt, nFlags); } Обработчик я не мог добавить через Add Event Handler, т.к. у эдита или чекбокса или баттона сообщения WM_KEYDOWN в списке этого мастера не было. Вообщем мне надо когда фокус на каком-нибудь котроле странице по нажатию какой-нибудь клавиши установить фокус на CTabCtrl, т.е. чтобы выйти из страницы без помощи мыши. Я ещё попробовал тут функцию BOOL CPageOptions1::OnChildNotify( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult ) { if(message==WM_KEYDOWN) { int x=10; } return CDialog::OnChildNotify(message, wParam, lParam, pLResult); } тоже внутрь if(message==WM_KEYDOWN) не входит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 06:34 |
|
||
|
Не входит в OnKeyDown
|
|||
|---|---|---|---|
|
#18+
И не должно входить, тк фокус ввода находится на одном из элементов диалога. Диалоговое окно получает WM_KEYDOWN, только если оно чистое и на нем нет элементов интерфеса. Если стоит задача просто реагировать на нажатия горячих клавишь, то самый простой способ решения через акселераторы. В редакторе ресурсов создается таблица акселераторов, которая ставит в соответстие код клавиши или комбинации с Ctrl, Alt и тд сообщению. Код: plaintext 1. Код: plaintext в PreTranslateMessage применяем акселератор: Код: plaintext 1. 2. 3. 4. 5. А вот и сам обработчик команд Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 08:36 |
|
||
|
Не входит в OnKeyDown
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 08:38 |
|
||
|
Не входит в OnKeyDown
|
|||
|---|---|---|---|
|
#18+
WM_KEYDOWN получает ТОЛЬКО окно, в котором находится фокус ввода !! Это скорей всего какой-нибудь из контролов этого диалога. Сам диалог НИКОГДА не получает фокус ввода. Если уж очень нужно, то в MFC есть механизм для этого -- PreProcessMessage. Но им нужно очень осторожно пользоваться, а вообще лучше не пользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 16:19 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33425131&tid=2032320]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 326ms |

| 0 / 0 |
