【发布时间】:2013-07-11 20:17:57
【问题描述】:
我正在使用 C# Winforms 开发一个 GUI 项目,该项目需要使用 gnuplot 中的图表。这些图表必须是动态的形式,以便用户可以通过点击图表来获取信息。这意味着我必须打开窗口并且不能简单地在 GUI 中使用图表的图片。我一切正常,但我希望能够控制 gnuplot 图表在屏幕上的显示位置,以便用户不必手动移动它。我正在使用 C# 进程运行 gnuplot,我发现使用 user32.dll 函数 MoveWindow 可以让我移动一个进程的窗口,如果我有它的窗口句柄,但不幸的是,这些图不是进程本身,它们是由从进程向 gnuplot 发送命令,所以我找不到图形本身的窗口句柄。
我有没有办法获得这些图表的窗口句柄,或者有人知道更简单的方法来选择 gnuplot 创建的图表在屏幕上的显示位置吗?
这里是一些示例代码,展示了我的过程是如何创建 gnuplot 图的
Process gnuPlot = new Process();
gnuPlot.StartInfo.FileName = programName;
gnuPlot.StartInfo.UseShellExecute = false;
gnuPlot.StartInfo.RedirectStandardInput = true;
gnuPlot.StartInfo.CreateNoWindow = true;
gnuPlot.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
gnuPlot.Start();
StreamWriter gnuPlotInput = gnuPlot.StandardInput;
gnuPlotInput.WriteLine("set pm3d map");
gnuPlotInput.Flush();
string graphFileName = "fileName" notitle";
gnuPlotInput.WriteLine(String.Format("splot {0}", graphFileName));
gnuPlotInput.Flush();
提前致谢,
-杰克
【问题讨论】:
-
其实我只是通过按窗口名称搜索进程找到句柄来解决的。我稍后会发布代码,以防以后对任何人有帮助。
标签: c# winforms user-interface gnuplot window-handles