远程控制软件中窗口管理主要有两种模式,一种是以灰鸽子远控为代表的单窗口单任务管理模式,一种是以黑洞远控为代表的多窗口多任务管理模式。前一种比较简单,本文讲第二种方案的实现。这里着重讲窗口多开,多任务另起篇幅讲述。
假如我们需要同时对3台远程主机进行文件管理,那么需要打开3个文件管理的对话框,这3个对话框相同的是什么?不同的又是什么?相同的是对话框界面和处理过程,不同的是通信对象。好了,下面让我们思考下如何实现同与不同。要实现在不同的窗口自由切换,非模式对话框的效果自然是最理想。要实现不同的通信对象,只要绑定不同的SOCKET就行。下面是笔者根据开发和应用的经验,总结得三种方案,希望能对其他朋友有所帮助。
方案一:窗口数组
窗口数组比较好理解,你要3个对话框,正好我那有3个一样的对话框,只要拿过来绑上不同的通信对象就行了。窗口数组流程就是启动的时候建好对话框数组,需要的时候显示窗口并绑定一个通信对象,不需要的时候隐藏窗口并移除通信对象。
首先主窗口类中添加对话框数组CTestDlg1 m_TestDlg[10],在主对话框的OnInitDialog()中创建对话框数组,注意这里创建的是非模式对话框。
for (int i=0;i<10;i++)
{
m_TestDlg[i].Create(IDD_DIALOG2, GetDesktopWindow());
m_TestDlg[i].m_bUseing = FALSE;
m_TestDlg[i].ShowWindow(SW_HIDE);
}
上面要注意到需要有个标识变量来表示对话框是否在使用中。另外由于是非模式对话框,所以我们需要在对话框的DestroyWindow()中销毁它们,不然会造成资源泄露。