I already asked this question on StackOverflow 
(http://stackoverflow.com/questions/1759366/embedded-wxlua-not-displaying-most-controls-but-still-does-layout-correctly),
 so I'm pretty much doing a copy-paste of it here.  Feel free to duplicate any 
answers there if you've got an account.

I am having trouble getting embedded wxLua to work with my application -- it 
works fine when I use the wxLua DLLs, but I'm trying to use the static 
libraries so I can distribute a single, standalone executable with no external 
dependencies.

First, the symptoms: Most controls (such as wxButtons, wxGauges, wxTextCtrls) 
do not display; at the very least, wxStaticTexts display, and I can 
successfully use menus to show an about menu and to quit.

Here's a simple test script:

    require("wx")
    frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Frame")
    panel = wx.wxPanel(frame, wx.wxID_ANY)
    hbox = wx.wxBoxSizer(wx.wxHORIZONTAL)
    hbox:Add(wx.wxButton(panel, wx.wxID_ANY, "I'm a button"))
    hbox:Add(wx.wxStaticText(panel, wx.wxID_ANY, "Hello"))
    panel:SetSizerAndFit(hbox)
    frame:Show(true)
    wx.wxGetApp():MainLoop()

The top window in this screen shot shows a raw `lua file.lua` that calls the wx 
library, and the bottom one shows the result when run from my embedded wxLua: 

http://img337.imageshack.us/img337/8425/wxluaissue.png

As you can see, the widgets that do show up get placed correctly, but the 
widgets that don't show up, neither get rendered nor process events.

Here's the offending (minimalized) C++:

    extern "C" {
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    }
    #include "wx/app.h"
    #include "wx/image.h"
    
    // disable some of the libraries we're didn't want
    #define wxLUA_USEBINDING_WXHTML 0
    #define wxLUA_USEBINDING_WXNET 0
    #define wxLUA_USEBINDING_WXLUASOCKET 0
    #define wxLUA_USEBINDING_WXSTC 0
    #include "wxbind/include/wxbinddefs.h"
    #include "wx/msgdlg.h"

    WXLUA_DECLARE_BIND_ALL;

    class MyApp : public wxApp
    {
        public:
            virtual bool OnInit();
            virtual int OnExit();
            void OnLua(wxLuaEvent &e);
            wxLuaState m_wxlState;
        private:
            DECLARE_EVENT_TABLE();
    };

    IMPLEMENT_APP(MyApp)

    BEGIN_EVENT_TABLE(MyApp, wxApp)
    EVT_LUA_ERROR           (wxID_ANY, MyApp::OnLua)
    END_EVENT_TABLE()

    bool MyApp::OnInit()
    {
        WXLUA_IMPLEMENT_BIND_ALL

        wxInitAllImageHandlers();
        wxLuaState::sm_wxAppMainLoop_will_run = true;
        m_wxlState = m_wxlState.Create(this);
        lua_State *L = m_wxlState.GetLuaState();

        luaL_openlibs(L);
        int res = luaL_dofile(L, "C:\\file.lua");
        if (res != 0)
        {
            wxMessageBox(wxString::FromAscii(lua_tostring(L, -1)), wxT("Error 
running script"));
            return false;
        }

        return true;
    }

    int MyApp::OnExit()
    {
        wxMessageBox(wxT("Goodbye!"));
        m_wxlState.CloseLuaState(true);
        m_wxlState.Destroy();
        return wxApp::OnExit();
    }

    void MyApp::OnLua(wxLuaEvent &e)
    {
        wxMessageBox(e.GetString(), wxT("wxLua"));
    }

I have stripped down both wxWidgets and wxLua using their setup.h and 
wxluasetup.h files; I can succcessfully render buttons if I use wxWidgets in 
pure C++, so I think the issue is with either how I compiled wxLua, or how I'm 
configuring the wxLuaState.

I think I've configured the wxLuaState correctly, but I haven't been able to 
find an example where all of the work is done in a luaL_dofile -- all the other 
examples have custom wx-derived classes, except for wxlua.cpp, which is a 
little different since it's for the wx.dll that Lua uses. I've spent several 
hours trying to figure out what I'm doing wrong, and I'm completely out of 
ideas at this point.

Has anyone seen this issue before, or can anyone confirm or deny that I'm 
setting up the wxLuaState correctly?

Mark
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
wxlua-users mailing list
wxlua-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wxlua-users

Reply via email to