width = 600 height = 400 local pathdlg =1000 local contendlg = 1002 --alert(getText(1000)) function Load() local path = getText(pathdlg); --alert(txt); local inp = io.open(path, "rb") //去读取文件 如 main.lua local data = inp:read("*all") //读取整个文件的内容 setText(contendlg, data) end
// my_lua_mfcDlg.cpp : 实现文件 // #include "stdafx.h" #include "my_lua_mfc.h" #include "my_lua_mfcDlg.h" #include "afxdialogex.h" #include <iostream> #include <stdio.h> using namespace std; extern "C" //包含lua的库 头文件 { #include <lua.h> #include <lauxlib.h> #include <lualib.h> }; #ifdef _DEBUG #define new DEBUG_NEW #endif lua_State* lua; // Cmy_lua_mfcDlg 对话框 Cmy_lua_mfcDlg::Cmy_lua_mfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(Cmy_lua_mfcDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void Cmy_lua_mfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(Cmy_lua_mfcDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &Cmy_lua_mfcDlg::OnBnClickedButton1) ON_BN_CLICKED(IDCANCEL, &Cmy_lua_mfcDlg::OnBnClickedCancel) END_MESSAGE_MAP() #include <atlconv.h> static Cmy_lua_mfcDlg* dlg; int alert(lua_State* lua) //打印 { size_t len; const char* msg = lua_tostring(lua, 1, &len); USES_CONVERSION; MessageBox(0, A2W(msg), L"lua msg", 0); return 0; } // Cmy_lua_mfcDlg 消息处理程序 int getText(lua_State* lua) { int id = 0; id = lua_tonumber(lua, 1); CString path; dlg->GetDlgItem(id)->GetWindowTextW(path); USES_CONVERSION; char* p = T2A(path); lua_pushstring(lua, p); return 1; } int setText(lua_State* lua) { int id = lua_tonumber(lua, 1); const char* txt = lua_tostring(lua, 2); USES_CONVERSION; dlg->GetDlgItem(id)->SetWindowTextW(A2W(txt)); return 0; } BOOL Cmy_lua_mfcDlg::OnInitDialog() { dlg = this; CDialogEx::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 //开启lua lua = lua_open(); luaopen_base(lua); luaopen_table(lua); luaopen_string(lua); luaL_openlibs(lua); lua_register(lua, "getText", getText); lua_register(lua, "alert", alert); lua_register(lua, "setText", setText); if (luaL_loadfile(lua, "mymfc.lua")) { cout<<"loadfile failed"<<lua_tostring(lua, -1)<<endl; return TRUE; } if (lua_pcall(lua, 0, 0, 0)) { cout<<"pcall failed"<<lua_tostring(lua, -1)<<endl; return TRUE; } //获取lua的配置 lua_getglobal(lua, "width"); //获取lua配置的宽高 int w = lua_tonumber(lua, -1); lua_pop(lua, 1); lua_getglobal(lua, "height"); int h = lua_tonumber(lua, -1); lua_pop(lua, 1); this->MoveWindow(0, 0, w, h); //设置窗口的 宽高 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void Cmy_lua_mfcDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR Cmy_lua_mfcDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void Cmy_lua_mfcDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 lua_getglobal(lua, "Load"); lua_pcall(lua, 0, 0, 0); } void Cmy_lua_mfcDlg::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnCancel(); }
c++和MFC 交互通过lua脚本实例
最新推荐文章于 2021-11-10 01:25:38 发布