趣味+メモ用のブログです。
GNU/Linux関連、OSS関連情報、調査事項になるでしょうが、何を書くか分かりません。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
さらにチャレンジ!!
> ● Windowz7上での呼び出し階層 > CEditWndProc() hwnd:132848 uMsg:273 wParam:65574 iParam:0 > DispatchEvent() hwnd:132848 uMsg:273 wParam:65574 iParam:0 > CEditWnd::OnCommand() wNotifyCode=1 > CEditWnd::OnCommand() nFuncCode=30311 > [d:\project\sakuraeditor\trunk\sakura_core\ceditview_command.cpp:344] debug sakai F_UP > OnPaint(28,96)-(925,97) : 1 > > となっており、最終的に「WNDCLASSEX 」クラスの > 「lpfnWndProc(コールバック)」までたどりつくのです。 までは分かっているのですが、その先の調査です。 メインのループの中で、GetMessage()関数でまずメッセージを受け取っています。 (sakuraeditor CEditWnd.cpp:MessageLoop()関数内) じゃぁここでトラップしてやったらどうかと思い修正。 ------------------------------------------- //複数プロセス版 /* メッセージループ */ void CEditWnd::MessageLoop( void ) { MSG msg; int ret; //2004.02.17 Moca GetMessageのエラーチェック while ( NULL != m_hWnd && ( ret = GetMessage( &msg, NULL, 0, 0 ) ) ){ if( ret == -1 ){ break; } //@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたことによる変更 if( m_pPrintPreview && NULL != m_pPrintPreview->GetPrintPreviewBarHANDLE() && ::IsDialogMessage( m_pPrintPreview->GetPrintPreviewBarHANDLE(), &msg ) ){ /* 印刷プレビュー 操作バー */ }else if( NULL != m_cEditDoc.m_cDlgFind.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgFind.m_hWnd, &msg ) ){ /* 「検索」ダイアログ */ }else if( NULL != m_cEditDoc.m_cDlgFuncList.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgFuncList.m_hWnd, &msg ) ){ /* 「アウトライン」ダイアログ */ }else if( NULL != m_cEditDoc.m_cDlgReplace.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgReplace.m_hWnd, &msg ) ){ /* 「置換」ダイアログ */ }else if( NULL != m_cEditDoc.m_cDlgGrep.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgGrep.m_hWnd, &msg ) ){ /* 「Grep」ダイアログ */ }else if( NULL != m_cEditDoc.m_cHokanMgr.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cHokanMgr.m_hWnd, &msg ) ){ /* 「入力補完」 */ }else if( NULL != m_hwndSearchBox && ::IsDialogMessage( m_hwndSearchBox, &msg ) ){ /* 「検索ボックス」 */ ProcSearchBox( &msg ); }else { /* GetMessage後に則ってしまう!! */ if( msg.message == WM_KEYUP ){ DispatchEvent( msg.hwnd, msg.message, msg.wParam, msg.lParam ); }else{ if( NULL != m_pShareData->m_hAccel ){ if( TranslateAccelerator( msg.hwnd, m_pShareData->m_hAccel, &msg ) ){ }else{ TranslateMessage( &msg ); DispatchMessage( &msg ); } }else{ TranslateMessage( &msg ); DispatchMessage( &msg ); } } } } return; } ------------------------------------------- でWindowsでは動くんだけど、Wineでは動かない。 だめ!! 切り口を変えて、なぜSakuraEditorで動かないか検討してみる。 × SakuraEditor ○ TeraPad ○ Notopad++ ○ 秀丸エディター(検証はできていない) ○のエディターでソースがあるのは、notepad++のみ。 notepad++では、F3/F5/CTRL+Cなどのキーは、 アクセラレータを使用している模様。 ※ SakuraEditorでは、WM_KEYUPを直接判断している。 (やじるしきーはわからない。。。。。) これが違うの? ちょっと WM_COMMANDのアクセラレータについて 調べる必要があるかしら???? 参考URL: http://www.geocities.jp/ky_webid/win32c/033.html --------------------------------------------------- 19:36追記 http://www.geocities.jp/ky_webid/win32c/025.html のページをコンパイルしてwineで動かしてみた。 矢印キー、CTRL、BSなどがwineでも動作する、 Why? sakuraeditorに戻って、ちょっとソースを修正。 ●修正前 CEditWnd.cpp:MessageLoop()関数内 if( NULL != m_pShareData->m_hAccel ){ if( TranslateAccelerator( msg.hwnd, m_pShareData->m_hAccel, &msg ) ){ }else{ TranslateMessage( &msg ); DispatchMessage( &msg ); } }else{ TranslateMessage( &msg ); DispatchMessage( &msg ); } ●修正後 TranslateMessage( &msg ); DispatchMessage( &msg ); とすると、Windowsでも矢印キーなどが聞かない現象が発生。 つまり、「TranslateAccelerator」関数に何らかの問題がある? これは継続調査の必要あり・・・ PR |
カレンダー
カテゴリー
フリーエリア
最新コメント
最新記事
(05/02)
(01/25)
(01/15)
(12/04)
(12/01)
最新トラックバック
ブログ内検索
最古記事
(02/21)
(07/12)
(07/12)
(07/18)
(07/20) |