我有一个C#应用程序,正在从中启动一个单独的win32窗口。我将Win32 api调用编组到我的C#应用程序中,并试图从中控制win32。我要从按钮按下切换窗口,使其始终在所有窗口顶部最大化或最小化。
它将最大化显示,然后忽略第一次按按钮隐藏的内容,然后在再次按下按钮时保持显示状态,然后再次以相同的代码第三次按下按钮时最终隐藏。从现在开始,它的行为符合预期。我敢肯定,某些Windows标志在首先经过最大化/最小化周期之前无法正确设置。
这是窗口的生命周期:
最大化创建窗口
A:
隐藏:
target_hwnd = FindWindowHandleByCaption()
ShowWindow(target_hwnd, SW_SHOWMINIMIZED);
显示:
target_hwnd = FindWindowHandleByCaption()
ShowWindow(target_hwnd, SW_SHOWMAXIMIZED);
转到A:
我在做什么错?我已经花了几个小时尝试各种代码片段了。
谢谢!
编辑:
只需解决以下问题即可解决
:SendMessage(target_hwnd.ToInt32(), WM_SYSCOMMAND, SC_MINIMIZE, 0);
SendMessage(target_hwnd.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
代替使用ShowWindow。
答案 0 :(得分:1)
根据ShowWindow()
文档:
nCmdShow
类型:int控制窗口的显示方式。 如果启动应用程序的程序提供了
ShowWindow
结构,则该参数将在应用程序首次调用STARTUPINFO
时被忽略。否则,第一次调用ShowWindow
时,该值应为WinMain
函数在其nCmdShow
参数中获得的值。...
应用程序第一次调用
ShowWindow
时,应使用WinMain
函数的nCmdShow
参数作为其nCmdShow
参数。随后对ShowWindow
的调用必须使用给定列表中的值之一,而不是WinMain
函数的nCmdShow
参数指定的值。 如对nCmdShow
参数的讨论中所述,如果启动应用程序的程序在结构中指定了启动信息,则在第一次调用nCmdShow
时将忽略ShowWindow
值< / strong>。在这种情况下,ShowWindow
使用STARTUPINFO
结构中指定的信息来显示窗口。在随后的调用中,应用程序必须调用ShowWindow
设为nCmdShow
的{{1}}才能使用启动应用程序的程序提供的启动信息。此行为是为以下情况设计的:
应用程序通过设置了
SW_SHOWDEFAULT
标志的CreateWindow
来创建主窗口。应用程序通过清除
WS_VISIBLE
标志的情况下调用CreateWindow
来创建其主窗口,然后再使用WS_VISIBLE
标志将其设置为可见来调用ShowWindow
。