7

これらのオプションを使用してテキストボックスを作成しています。コピー/切り取り/貼り付け/元に戻すことができますが、[すべて選択] を押してもすべてが選択されません。右クリックして[すべて選択] をクリックできますが、CTRL+Aは何もしません。なんで?

wnd = CreateWindow("EDIT", 0,
    WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
    x, y, w, h,
    parentWnd,
    NULL, NULL, NULL);
4

7 に答える 7

6

Ctrl+は+や+Aのような組み込みのアクセラレータではありません。これが、定義された WM_CUT、WM_PASTE、および WM_COPY メッセージが表示される理由ですが、WM_SELECTALL はありません。CtrlCCtrlV

この機能を自分で実装する必要があります。私はMFCアプリで次のようにしました:

static BOOL IsEdit( CWnd *pWnd ) 
{
    if ( ! pWnd ) return FALSE ;
    HWND hWnd = pWnd->GetSafeHwnd();
    if (hWnd == NULL)
     return FALSE;

    TCHAR szClassName[6];
    return ::GetClassName(hWnd, szClassName, 6) &&
         _tcsicmp(szClassName, _T("Edit")) == 0;
}

BOOL LogWindowDlg::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg->message==WM_KEYDOWN)
    {
        if ( pMsg->wParam=='A' && GetKeyState(VK_CONTROL)<0 )
        {
            // User pressed Ctrl-A.  Let's select-all
            CWnd * wnd = GetFocus() ;
            if ( wnd && IsEdit(wnd) )
                ((CEdit *)wnd)->SetSel(0,-1) ;
        }
    }   
    return CDialog::PreTranslateMessage(pMsg);
}

このページから IsEdit を盗んだことに注意してください: http://support.microsoft.com/kb/145616

私がそれを指摘する理由の 1 つは、功績を認めたいからです。また、IsEdit 関数 (クラス名の文字列を比較する) が役に立たないので、非難したいからです。

于 2008-11-24T22:23:28.360 に答える
3

そのキーストロークをキャプチャして、すべて自分で選択する必要があります。

RichTextBox で使用する C# コードを次に示します。

    protected override void OnKeyDown(KeyEventArgs e)
    {
        // Ctrl-A does a Select All in the editor window
        if (e.Control && (e.KeyCode == Keys.A))
        {
            this.SelectAll();
            e.Handled = true;
        }
    }

申し訳ありませんが、Win32 コードはありません。

于 2008-11-14T23:46:06.433 に答える
3

奇妙なことに、ES_MULTILINE を指定しない場合、Ctrl+は (すべて選択として) 機能します。A

ただし、複数行が必要な場合は役に立ちません

ES_MULTILINEのMSDN ドキュメントには、これについて何も書かれていないようです。

于 2011-12-30T22:42:31.780 に答える
3

I tend to use MFC (forgive me) instead of Win32 so I cannot answer this definitively, but I noticed this comment added to a page on an MS site concerning talking with an Edit control (a simple editor within the Edit control):

The edit control uses WM_CHAR for accepting characters, not WM_KEYDOWN etc. You must Translate() your messages or you ironically won't be able to edit the text in the edit control.

I don't know if this applies to BoltBait's response, but I suspect it does.

(I found this at http://msdn.microsoft.com/en-us/library/bb775462(VS.85).aspx)

于 2008-11-15T01:25:30.477 に答える
0

他の何かが盗んでいるということでしょうかCtrl+ A?Spy ++を使用して、編集コントロールに到達することを確認します。

于 2008-11-14T23:56:11.173 に答える
0

Why not add an accelerator for Ctrl+a to SelectAll?

于 2008-11-17T02:52:17.697 に答える