我正在使用C#Winforms中的GUI项目,需要使用gnuplot中的图表。这些图表必须采用动态形式,以便用户可以通过单击图表来获取信息。这意味着我必须打开窗口,不能简单地使用GUI中的图表图片。我有一切工作,但我希望能够控制gnuplot图表在屏幕上出现的位置,以便用户不必手动移动它。我正在使用C#进程来运行gnuplot而且我发现使用user32.dll函数MoveWindow会让我移动一个进程的窗口,如果我有它的窗口句柄,但不幸的是这些图形本身不是进程,它们是由从进程向gnuplot发送命令,所以我找不到图形本身的窗口句柄。
无论如何,我是否可以获得这些图表的窗口句柄,或者是否有人知道更简单的方法来选择gnuplot创建的图形在sceen上显示的位置?
以下是一些示例代码,展示了我的流程如何创建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();
先谢谢,
-Jake
答案 0 :(得分:0)
以下是对我有用的事情,以防将来帮助任何人
IntPtr windowId = IntPtr.Zero;
while (windowId == IntPtr.Zero)//keeps trying to get the id until it has it
windowId = FindWindowByCaption(IntPtr.Zero, "Gnuplot (window id : 0)");
MoveWindow(windowId, 670, 100, 550, 400, true);//adjusts the location of the gnuplot window