用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?
恳求赐教,问题描述不正确之处,请多多包含!!!
但是如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?
恳求赐教,问题描述不正确之处,请多多包含!!!
就看看VCL源码
源码总不让你迷惑吧?
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........ 只是个人意见 可能还有错误..
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个问题的操作。
application.handle也是程序的主进程的句柄
当mainform关闭时vcl就认为程序结序了。