制做DreamWeaver气势气魄的措施
—- 用过DreamWeaver的人城市发明DreamWeaver将每一个编辑的文件显示在任务栏上,而且用户任意封锁一窗口而不影响其他窗口,好象每一个窗口间没有关联,没有主窗口似的。但我们也能发明其实这些窗口间也有数据是共享的,如存盘的路径。
—- 颠末研究我发明其实这些窗口其实是属于同一措施的,而且实现要领也很是的简朴。下面我用Inprise公司的C++ Builder为各人举一个简朴的例子。
—- 首先我们建设一个普通的应用措施。在这个措施中包括两个Form,个中Form1为主窗口,我们将Form2设为不由应用措施自动建设。
—- 在Form1中插手一新的Public的属性:
—- int FormCount;
—- 此属性用于记录系统成立的From2的实例的个数,在Form1的OnCreate事件中插手如下代码:
int i=GetWindowLong(this- >Handle,GWL_STYLE);
TForm2 *F,*G;
F=new TForm2(NULL);
G=new TForm2(NULL);
F- >ParentWindow=GetDesktopWindow();
F- >Caption="F";
G- >ParentWindow=GetDesktopWindow();
G- >Caption="G";
this- >FormCount=2;
SetWindowLong(G- >Handle,GWL_STYLE,i);
SetWindowLong(F- >Handle,GWL_STYLE,i);
F- >Show();
G- >Show();
—- 个中GetWindowLong,SetWindowLong为获取/配置Window属性的API函数,详细请看C++ Builder带的Win32辅佐。然后运行措施,我们就能发明措施在任务栏上显示了属于此措施的三个任务条。
—- 接下来我们要做的工作有两个:
—- 1、 埋没Form1及Application
—- 2、 让Form2的实例封锁应用措施
—- 实现第一件工作的要领在网上许多处所都提到了,即修改WinMain函数下面是详细的代码(粗斜体为插手的代码):
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application- >Initialize();
Application- >CreateForm(
__classid(TForm1), &Form1);
Application- >ShowMainForm=false;
ShowWindow(Application- >Handle, SW_HIDE);
Application- >Run();
}
catch (Exception &exception)
{
Application- >ShowException(&exception);
}
return 0;
}
—- 在这个处所要留意的是光用“Application->ShowMainForm=false;”是不能埋没主Form(Form1)的,必需将Form1的Visibled属性变为false。
—- 实现第二件工作需要用到Application的Terminate要领(竣事应用措施)。我们只要在TForm2的OnClose事件中简朴插手以下几句措施:
if (Form1- >FormCount>1)
Form1- >FormCount--;
else
Application- >Terminate();
—- 运行措施,你就能发明措施在有任务拦上有两个提示,窗口F及窗口G,并且这两个窗口看起来就象独立的应用措施。
—- 至此,一个DreamWeaver气势气魄的措施就做完了,是不是很简朴呢。