0

MFC アプリケーションでCEditは、ダイアログのコントロールがサブクラス化されます。別のダイアログには、そのテキスト ボックスに値を送信する数値キーパッドがあります。エディット コントロールでテキストが強調表示されている場合、GetSelメソッドは強調表示されているテキストの開始インデックスと終了インデックスを返し、これはキーパッドからの値に置き換えられます。これはうまくいきます。

サブクラスCEditがカスタムCComboBoxコントロールの一部になると、コンボボックスGetSelのコントロールのメソッドは常に 0 を返します。CEdit

原因と解決策が分からないようです。そして、どんな助けにも感謝します。ありがとう。

アップデート:

強調表示されたテキストを取得しようとするコードは次のとおりです。

BOOL CBaseDialog::PreTranslateMessage(MSG* pMsg) 
{
    if (pMsg->message == WM_KEYDOWN && pMsg->lParam == 2)
    {
        switch (pMsg->wParam)
        {
            case VK_TAB:
                //NextDialogCtrl();
                break;
            case 'ret':
                //keybd_event(VK_RETURN, 0, 0, 0);
                return FALSE;
            case '?':
                break;
            default:
                if (m_LastFocused >= 0)
                {        
                    CWnd* pwnd = GetDlgItem(m_LastFocused);

                    if (pwnd->IsKindOf(RUNTIME_CLASS(CComboBox)) )
                    {
                        CCustomComboBox* ctl = (CCustomComboBox*)pwnd;  

                        //this method always returns 0 index for the 
                        //start and end position index
                        ctl->m_edit->GetSel(m_LastStPos, m_LastEndPos);
                    }
                }
        } break;
    }
}

コンボは次のようにサブクラス化されます。

BOOL CSymbolDlg::OnInitDialog() 
{
    CDialog::OnInitDialog(); 

    //combo is CCustomComboBox type
    combo.SubclassDlgItem(IDC_COMBO,this);

   //rest of the code...
}

そして CEdit コントロール:

HBRUSH CCustomComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if (nCtlColor == CTLCOLOR_EDIT)
    {
        //[ASCII 160][ASCII 160][ASCII 160]Edit control
        if (m_edit.GetSafeHwnd() == NULL)
            m_edit.SubclassWindow(pWnd->GetSafeHwnd());
    }
    else if (nCtlColor == CTLCOLOR_LISTBOX)
    {
        //ListBox control
        if (m_listbox.GetSafeHwnd() == NULL)
            m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
    }
    HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
    return hbr;
}
4

0 に答える 0