两个applicaton,可以使一个application中new出的窗口中的父类为另一个application中的主窗口吗?(100分)

  • 主题发起人 主题发起人 bobzjh
  • 开始时间 开始时间
B

bobzjh

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个程序,一个程序A通过socket把它的主窗口的id(unsigned long)作为
参数传递给另一个程序B,B是隐藏的,B要根据这个id来作为要new一个子窗口的
父窗口id。new出的窗口,它可以显示在A上。
一般cbuilder里TForm2 *form=new TForm2(this);this是作为本程序的窗体指针,
那怎么转换可以作为另外一个程序的ID那????
 
TForm2 *Form2 = new TForm2(Application);
Form2->ParentWindow = hd;
//接收到的另一个窗体的句柄,注意,是要句柄(HWND)
Form2->Show();
注意,所有程序必须是在一台机器上才行。
另一个方法是模拟模态窗口效果,这个方法就不要执行上面的Form2->ParentWindow = hd这
一句了。
void __fastcall TForm2::FormShow(TObject *Sender)
{
if (ParentWND!=NULL) //ParentWND由Form1传入,其值是外部程序的窗体句柄
EnableWindow(ParentWND, false);
//禁用外部程序的窗体
}
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
if (ParentWND!=NULL)
EnableWindow(ParentWND, true);
//使能外部程序的窗体
}
 
老大,msdn上说hwnd参数必须是同一个application的,除非可以把他转化成handle
 
你把另一个程序的窗体句柄(HWND)赋给Form2试试,在Show之前,是有效的,但效果可能
不令人满意,通过上面例子的EnableWindow方法可以取得较好的效果。
 
SetParent试试看,句柄带在消息中传给父窗口中
 
hwnd不能通过setparent把另一个程序的hwnd赋值过去,只能用sachow说的第二个方法
 
后退
顶部