用c写sdk程序时,exe或者dll的handle是os指定给这个module的句柄。
但是如delphi的文档所言:Application.handle 是“Provides access to the window handle of the main form (window) of the application"。
在程序中你可以通过project options对话框为程序指定一个form为mainform,这个mainform应该就是windows应用程序的主窗口的意思,tform类的handle是:”Provides access to the underlying Windows screen object for the control“,绝对令人认为tform类的handle也是底层的windows的窗口句柄。postmessage这个api函数就可以使用某个form的handle作为第一个参数。
问题1:如果设置应用程序的mainform为form1,那么application.handle与form1.handle是不是同一个windows窗口的句柄?不是,经过测试这两个handle的值不同,如果form1.handle是主窗口的windows句柄,那么application.handle又是哪个窗口的windows句柄?
问题2:在一个托盘程序中,fun1是tform的一个成员函数,也是负责处理托盘图标消息的处理函数。欲在单击托盘图标时显示程序窗口form1(tform的一个实例),同时欲在任务栏上显示本程序的小图标,我看到一些例子上是这样写的:ShowWindow(Handle,SW_SHOW);(此举是在屏幕显示form1)
                           ShowWindow(Application.handle,SW_SHOW);(此举是为了在任务栏显示程序小图标)。在托盘程序中还要改变程序窗口风格,使用SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW)(这个函数改的是Application.handle).到底哪个handle是通常意义上的主窗口的句炳?或者是这两个handle中有一个不是windows产生的窗口句柄?用spy++观察一个应用程序的主窗口(没有最小化时)和它在任务栏上的图标,它们两个的句柄是否一样?
问题3:在托盘程序中,我想在单击托盘图标时判断程序主窗口的状态:如果它被最小化成一个图标显示在任务栏上,就将它按ws_normal状态显示。在我进行这个判断时我应该使用application.handle还是
form1.handle来调用api?
恳求赐教,问题描述不正确之处,请多多包含!!!

解决方案 »

  1.   

    帮助上说得不清楚的话
    就看看VCL源码
    源码总不让你迷惑吧?
      

  2.   

    讨论 当然是有必要了。。application.handle: 应该是这个进程的句柄。。我看到一些例子上是这样写的:ShowWindow(Handle,SW_SHOW);(此举是在屏幕显示form1)
                               ShowWindow(Application.handle,SW_SHOW);(此举是为了在任务栏显示程序小图标)。
    // 我没这么写过 这样可以么??。。
    LRESULT CALLBACK WindowProc(// 这个是窗口对应的窗口处理函数 每个窗口用它来进行处理所有消息
      HWND hwnd,      // handle to window 
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );3. 调用MainFrm.Handle........ 只是个人意见 可能还有错误..
      

  3.   

    一个是application.handle. 一个form.handle1.   application.handle 是任务栏上面的按钮handle.
         form.handle 是窗体的handle
    2.   ShowWindow(Handle,SW_SHOW);(此举是在屏幕显示form1)
         ShowWindow(Application.handle,SW_SHOW);
         SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW) 非必要。
         mainform.hanle是主窗体的句柄.3.  通过MainForm.WindowState 来判断.  做第2个问题的操作。
      

  4.   

    补充:
    application.handle也是程序的主进程的句柄
    当mainform关闭时vcl就认为程序结序了。
      

  5.   

    Application 是应用程序的,Form 的 Handler 是窗体的,二者应该不同的吧!不知道正确与否。