有一个程序A,主窗口中带有一个TPageControl控件,在其上有二个页面,程序运行时,只有一个页面显示出来,另一个页面没有显示,
我另外写了一程序B,在程序B中找到A程序中TPageControl控件的句柄,然后B程序发送一个消息给这个句柄,使A程序中TPageControl控件将其所有页面都显示出来
但不知发送什么消息,我用SPY++查看,也只看到一个页面。如何实现发送消息将另一个程序中的PAGECONTROL隐含的页面显示出来呢?
还请各位大侠指点,谢谢!

解决方案 »

  1.   

    看程序是什么语言写的
    如果是D写的,很可能在窗体创建时就创建了所有tab页
    如果是VC写的,很可能tab页要到该显示时才创建SPY++也找不到句柄的话,那就应该是后者了,既然都没创建,当然不可能发消息让它show出来了
      

  2.   

    PageControl1.Handle 接收以“TCM_”开头的消息。但我还没有听说过可以发隐藏消息,但可以发送删除的消息。i:=SendMessage(TabControl1.Handle,TCM_GETITEMCOUNT,0,0);//获取总页数,保存到变量i中。。
    SendMessage(PageControl1.Handle,TCM_DELETEITEM, 1,0);//删除第2页。
    如果不知道有多少页,可以用下面的方法删除最后一页:
    SendMessage(PageControl1.Handle,TCM_DELETEITEM, SendMessage(PageControl1.Handle,TCM_GETITEMCOUNT,0,0)-1,0);如果你确实想实现你所说的消息,你可以建两个TPageControl控件,一个PageControl1只有一页,另一个PageControl2有两个页,并且PageControl2的第一个页面跟PageControl1的完全相同。然后在你的程序B运行的时候隐藏PageControl1,显示PageControl2。这就是你要的效果。当然,如果你非常强悍的话,你可以在程序B执行的时候在程序A中发消息动态添加一页,然后再在该页上动态添加控件。其实Delphi中许多控件都可以直接用代码创建,而不用鼠标去拖已有的控件。而且动态创建的控件生成的EXE很小。
      

  3.   

    十分感谢楼上三位大侠的指点!A程序是用DELPHI编写的,默认的时候PageControl中只显示一页(TabSheet),另一页则是在符合一定的条件后才会显示,
    由于该程序只有EXE文件,没有源文件,而我现在就是想让另一页也可以直接显示出来。
    我试过在B程序中用TCM_INSERTITEM在A程序中的PageControl中添加一个TAB,但是点击该TAB后,在TABSHEET上面显示的是空白,
    不是原有的那个页面。感觉是TAB与页面没有关联起来。
    当没有使用TCM_INSERTITEM时,我用TCM_GETITEMCOUNT获取到的数据只为1。
    我目前采取的方法就是在B程序发送符合A程序中的条件让隐藏的页面显示出来。
    但是否还有其他方法呢?
    还请各路高手大侠指点,谢谢!