简单的编辑对话框

时间:2011-05-16 14:51:51

标签: c++ dialog

我正在修改一个在Windows中运行的程序,我希望在启动时输入几个值。

在AppMain的开头,以下预先存在的代码允许用户输入文件名:

char our_file_name[260] = "TEST";

#ifdef WIN32
edit_dialog(NULL,"Create File", "Enter file name:", our_file_name,260);
#endif

这一切似乎都很简单,所以我想我只是为我的(带符号)整数值重新创建这个值,并使用下面的代码紧接着上面的代码插入:

#ifdef WIN32
edit_dialog(NULL,"Custom tolerance", "Enter tolerance:", tolerance,260);
#endif

#ifdef WIN32
edit_dialog(NULL,"Custom position", "Enter intended position:", position,260);
#endif

...以下放置其他变量声明:

int tolerance = 400;
int position = 0;

代码编译得很好,但是当我运行程序时,文件名部分就像应该的那样工作,但是一旦这个新位开始运行,程序就会崩溃。

我做错了什么?有没有更好的方法来输入几个值?

1 个答案:

答案 0 :(得分:2)

edit_dialog函数的签名可能需要char *作为第4个参数。当您使用tolerance调用它时,您正在传递一个int,因此您的代码将int的值(在本例中为400)视为指针值(0x400)并且将查看位于地址0x400 ......轰隆隆。崩溃。

在将整数值传递给edit_dialog函数之前,需要将整数值写入字符缓冲区。

char buf[256];
sprintf( buf, "%d", tolerance);
#ifdef WIN32
edit_dialog(NULL,"Custom tolerance", "Enter tolerance:", buf, 260);
#endif

(我打赌edit_dialog是一个宏,因为我很确定大多数编译器会在编译时捕获这个错误并警告你。)

然后当您的编辑对话框返回时,它会将用户输入的字符存储回buf,您可能希望将其转换为int。

tolerance = atoi(buf);