忍者ブログ
趣味+メモ用のブログです。 GNU/Linux関連、OSS関連情報、調査事項になるでしょうが、何を書くか分かりません。
[12] [11] [10] [9] [8] [7] [6] [5] [4] [2] [1]
×

[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


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
一乗寺 又兵衛
性別:
男性
職業:
コンパイル
趣味:
コンパイル
バーコード
ブログ内検索