首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

ShowWindow后窗体最小化按钮失效的有关问题

2012-03-16 
ShowWindow后窗体最小化按钮失效的问题各位大侠,请看以下代码:HWND hWnd ::FindWindow(NULL, TEXT(PM C

ShowWindow后窗体最小化按钮失效的问题
各位大侠,请看以下代码:
  HWND hWnd = ::FindWindow(NULL, TEXT("PM Control Panel"));
LONG l = ::GetWindowLong(hWnd, GWL_HINSTANCE);
if (hWnd) {
::ShowWindow(hWnd, SW_NORMAL);
::SetForegroundWindow(hWnd);
}

我用FindWindow找的另一个程序的主窗口,而这个程序是用VCL编制的,没有源代码,我发现这段代码运行后那个主窗口的最小化按钮失效了,
我在网上搜了下,有个解决方案,但我看不懂, 如下:

基于VCL的应用程序主窗体不会最小化,当主窗体接收到最小化消息时,它会传递到应用程序窗口。
使用Findwindow函数找到的是主窗体的句柄,而不是应用程序句柄(Application.Handle),所以建议用GetWindowLon函数进一步获得应用程序句柄,就可以避免最小化按钮失效的现象。

怎么扯到GetWindowLong上面去了,我是用VC的,特地请教各位C++ Builder高手。

[解决办法]
GetWindowLong函数功能描述:
用这个函数能够获得指定窗口的信息。得到后必须使用CallWindowProc函数来调用 GWL_HINSTANCE 得到应用程序运行实例的句柄GWL_HWNDPARENT 得到父窗口的句柄GWL_ID 得到窗口的标识符GWL_USERDATA 得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位 的值)得到后必须使用CallWindowProc函数来调用 DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值DWL_USER 得到额外的应用程序私有信息,如一些句柄和指针等。
希望对楼主有点帮助
[解决办法]
要找到BCB编的程序的Application,不要找主窗口, 直接用:
HWND hWnd= ::FindWindow(_T("TApplication"), _T("PM Control Panel程序运行后任务栏上的标题"));

向它发最小化消息.
[解决办法]
帮顶一下robbierong,我最近也碰到类似问题,也看到那个GetWindowLong()方法,试啦也没有成功,郁闷很久啦,现仍在苦苦寻觅解决方法。有请大侠帮忙啊!

热点排行