前段时间在做一个小模块的时候,碰到一个问题,程序有两个窗口,一个父窗口,一个子窗口,这两个窗口的CAPTION分别不同,而程序要求在启动时显示在任务栏中的CAPTION始终为同一个CAPTION.开始时想到将两个窗口的TEXT设置为要显示在任务栏中CAPTION的文字,然后运行时用API来重画两个窗口的CAPTION,做的时候碰到了一些比较难处理的问题,比如窗口控制栏的颜色渐变问题,然后就放弃这种做法了,后来想到加一个隐形的窗口,用这个隐形窗口在任务栏中显示CAPTION,两个父子窗口设置为在任务栏不显示.这样就解决问题了.因为有很多画面需要这样做,因此把这个隐形窗口放到一个程序通用的模块中.
在将窗口放到一个程序通用的模块中的时候又遇到了一个问题,因为窗口没有最大最小画按钮,而在任务管理器中可以强制点击应用程序的最大最小化,项目要求在点击最小化的时候需要关闭程序,所以这个事件应写在隐形窗口的Resize中,然后通过隐形窗口再关闭主程序,在关闭主程序的时候需要访问设置各个程序中的一个允许关闭程序的公有变量标志位,又无法实例化窗口对象,就用了反射来实现.
部分代码如下:
private void HideFormForProjectCaption_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
Object obj = Application.OpenForms[_mainFormClassName];
if(obj!=null)
{
FieldInfo field = obj.GetType().GetField(