我正在尝试使用键盘创建一个wxWidgets应用程序,特别是poEdit。有一个wxPanel包含三个控件;组合框,按钮和只读wxStyledTextCtrl。问题是一旦焦点进入wxStyledTextCtrl,就不可能使用键盘移回其他控件。我希望能够将wxStyledTextCtrl标签返回到组合框。到目前为止,我已经尝试过调用SetTabIndents(false),但这没有帮助。
有什么想法吗?
答案 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>
我可能会在未来的某个时候找到适用于其他操作系统的解决方案。