所以我开始摆弄VSB,总的来说是更好的。我真的很想学习,但我觉得要么我能找到的信息是过时的,要么代码就是不适合我,不管是什么原因。但是,问题是:
我希望能够:可以点击我的VSB项目中的一个标签,一旦这个标签被点击,就会有一个面板。在这个面板中,我想打开记事本,最大化到面板窗口,停靠并且不能移动它(记事本)。
我也想为其他程序做同样的事情。我目前的代码是在一个新窗口中打开记事本的基本代码。我只是刚刚开始研究VSB,所以我的知识非常有限。
我可以在VSB(无C#)中执行此操作,但不能在C3中执行此操作
当前代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Software_Solution_C__Project__v._10._0._0
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
AboutBox1 myForm = new AboutBox1();
myForm.ShowDialog();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Process.Start("mspaint.exe");
}
}
}
我试着谷歌,我尝试了不同的解决方案,我发现,试图找到我的方式,但它要么崩溃或给无尽的错误信息,使我无法做到这一点。
编辑:我也尝试过以下代码:
namespace Software_Solution_C__Project__v._10._0._0
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
AboutBox1 myForm = new AboutBox1();
myForm.ShowDialog();
}
private const int WM_SYSCOMMAND = 274; private const int SC_MAXIMIZE = 61488;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void panel1_Paint(object sender, PaintEventArgs e)
{
Process proc;
proc = Process.Start("Notepad.exe");
proc.WaitForInputIdle();
SetParent(proc.MainWindowHandle, panel1.Handle);
//SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}
}
}
这里的问题是,记事本在面板中打开,但没有伸展/停靠以适应窗口,如果我移动窗口,记事本的另一个示例打开。如果我关闭记事本,它只是重新打开。
1条答案
按热度按时间izj3ouym1#
经过层层努力,我在“form1”中构建了一个“panel1”来实现这个功能,可以参考下面的代码:
如果你有什么问题,我们可以一起讨论。