使用tab和shift-tab导出wxPanel中的wxStyledTextCtrl

时间:2015-08-05 18:53:23

标签: wxwidgets

我正在尝试使用键盘创建一个wxWidgets应用程序,特别是poEdit。有一个wxPanel包含三个控件;组合框,按钮和只读wxStyledTextCtrl。问题是一旦焦点进入wxStyledTextCtrl,就不可能使用键盘移回其他控件。我希望能够将wxStyledTextCtrl标签返回到组合框。到目前为止,我已经尝试过调用SetTabIndents(false),但这没有帮助。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我已经找到了自己问题的答案。我最后对wxStyledTextCtrl类进行了子类化,并覆盖了MSWWindowProc函数,以自定义WM_GETDLGCODE消息的处理,以清除DLGC_WANTALLKEYS和DLGC_WANTTAB位。我使用的代码如下。

我以前使用的代码如下:

<myStc.h>
#include <wx/stc/stc.h>

class myWxStyledTextCtrl : public wxStyledTextCtrl
{
public:
    DECLARE_DYNAMIC_CLASS(myWxStyledTextCtrl);
    myWxStyledTextCtrl(
        wxWindow* parent, wxWindowID id = wxID_ANY,
        const wxPoint& pos = wxDefaultPosition,
        const wxSize& size = wxDefaultSize, long style = 0,
        const wxString& name = wxSTCNameStr);
    myWxStyledTextCtrl();
    void SetUseTabToNavigate(bool useTabToNavigate);

#ifdef __WXMSW__
    // special Windows message handling
    virtual WXLRESULT MSWWindowProc(
        WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
#endif

    DECLARE_EVENT_TABLE();
private:
    bool m_useTabToNavigate;
};
</myStc.h>

<myStc.cpp>
#include "myStc.h"

IMPLEMENT_DYNAMIC_CLASS(myWxStyledTextCtrl, wxStyledTextCtrl);
BEGIN_EVENT_TABLE(myWxStyledTextCtrl, wxStyledTextCtrl)
END_EVENT_TABLE()

myWxStyledTextCtrl::myWxStyledTextCtrl(
    wxWindow* parent, wxWindowID id /*= wxID_ANY*/,
    const wxPoint& pos /*= wxDefaultPosition*/,
    const wxSize& size /*= wxDefaultSize*/, long style /*= 0*/,
    const wxString& name /*= wxSTCNameStr*/) :
    wxStyledTextCtrl(parent, id, pos, size, style, name)
{
    m_useTabToNavigate = false;
}

myWxStyledTextCtrl::myWxStyledTextCtrl() :
    wxStyledTextCtrl()
{
    m_useTabToNavigate = false;
}

void myWxStyledTextCtrl::SetUseTabToNavigate(bool useTabToNavigate)
{
    m_useTabToNavigate = useTabToNavigate;
}

#ifdef __WXMSW__
WXLRESULT myWxStyledTextCtrl::MSWWindowProc(
    WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
    WXLRESULT ret = wxStyledTextCtrl::MSWWindowProc(nMsg, wParam, lParam);
    if (!m_useTabToNavigate)
    {
        return ret;
    }
    if (nMsg == WM_GETDLGCODE)
    {
        ret &= ~(DLGC_WANTALLKEYS | DLGC_WANTTAB);
    }
    return ret;
}
#endif
</myStc.cpp>

我可能会在未来的某个时候找到适用于其他操作系统的解决方案。