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();
}