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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wxlua-users